Проверка требований плагина: VALIDATE_PLUGIN_REQUIREMENTS()

## VALIDATE_PLUGIN_REQUIREMENTS() │ WP 5.2.0

Функция VALIDATE_PLUGIN_REQUIREMENTS() проверяет, соответствуют ли требования плагина версии WordPress и версии PHP. 

Она использует информацию из заголовков  
- **Requires at least**,  
- **Requires PHP**,  
- **Requires Plugins**,  

определенных в основном PHP файле плагина.

### Используемые функции

- is_wp_version_compatible()
- is_php_version_compatible()
- get_file_data()

### Нет хуков

### Возвращаемое значение

true | WP_Error. Возвращает true, если требования выполнены, и WP_Error в случае ошибки.

### Как использовать

```php
validate_plugin_requirements( $plugin );

Параметры:

  • $plugin (string) (обязательный) — Путь к файлу плагина относительно директории плагинов.

Примеры

Проверка совместимости плагина

Проверим совместимость версий PHP и WP для плагина Democracy Poll:

Для этого следующий код можно вставить в хук активации плагина:

register_activation_hook( __FILE__, 'myplugin_activate' );

function myplugin_activate(){
    // Используем для админки
    require_once ABSPATH . '/wp-admin/includes/plugin.php'; 

    $plugin = 'democracy-poll/democracy.php';
    $valid  = validate_plugin_requirements( $plugin );

    if( is_wp_error( $valid ) ){
        wp_die( $valid->get_error_message() );
        // Это приведет к выводу:
        // Ошибка: Текущие версии WordPress и PHP не соответствуют минимальным требованиям для Democracy Poll.
    }
}

Изменения в версии

  • С 5.2.0 - Функция была введена.
  • С 5.3.0 - Добавлена поддержка чтения заголовков из основного PHP файла плагина.
  • С 5.8.0 - Удалена поддержка использования readme.txt как резервного варианта.
  • С 6.5.0 - Добавлена поддержка заголовка 'Requires Plugins'.

Код функции VALIDATE_PLUGIN_REQUIREMENTS

function validate_plugin_requirements( $plugin ) {
    $plugin_headers = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );

    $requirements = array(
        'requires'         => ! empty( $plugin_headers['RequiresWP'] ) ? $plugin_headers['RequiresWP'] : '',
        'requires_php'     => ! empty( $plugin_headers['RequiresPHP'] ) ? $plugin_headers['RequiresPHP'] : '',
        'requires_plugins' => ! empty( $plugin_headers['RequiresPlugins'] ) ? $plugin_headers['RequiresPlugins'] : '',
    );

    $compatible_wp  = is_wp_version_compatible( $requirements['requires'] );
    $compatible_php = is_php_version_compatible( $requirements['requires_php'] );

    if ( ! $compatible_wp && ! $compatible_php ) {
        return new WP_Error(
            'plugin_wp_php_incompatible',
            sprintf(
                'Ошибка: Текущие версии WordPress (%1$s) и PHP (%2$s) не соответствуют минимальным требованиям для %3$s. Плагин требует WordPress %4$s и PHP %5$s.',
                get_bloginfo( 'version' ),
                PHP_VERSION,
                $plugin_headers['Name'],
                $requirements['requires'],
                $requirements['requires_php']
            )
        );
    } elseif ( ! $compatible_php ) {
        return new WP_Error(
            'plugin_php_incompatible',
            sprintf(
                'Ошибка: Текущая версия PHP (%1$s) не соответствует минимальным требованиям для %2$s. Плагин требует PHP %3$s.',
                PHP_VERSION,
                $plugin_headers['Name'],
                $requirements['requires_php']
            )
        );
    } elseif ( ! $compatible_wp ) {
        return new WP_Error(
            'plugin_wp_incompatible',
            sprintf(
                'Ошибка: Текущая версия WordPress (%1$s) не соответствует минимальным треб��ваниям для %2$s. Плагин требует WordPress %3$s.',
                get_bloginfo( 'version' ),
                $plugin_headers['Name'],
                $requirements['requires']
            )
        );
    }

    return true;
}

Связанные функции

  • activate_plugins()
  • deactivate_plugins()
  • get_plugin_data()
  • get_plugins()
  • is_plugin_active()
  • plugin_basename()
  • wp_get_active_and_valid_plugins()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *