Вопрос или проблема
Можно ли использовать WP-CLI в плагине (или теме)?
Например
$ret = \WP_CLI::execute('plugin list');
Я хочу использовать некоторые подкоманды из других плагинов.
WP-CLI — это интерфейс командной строки для WP. Следовательно, он используется в среде UNIX shell. Плагины и темы написаны на PHP (который сам по себе также выполняется в среде shell, обычно UNIX). Таким образом, чтобы выполнить команду WP-CLI в плагине, вам необходимо передать её из PHP в UNIX shell. Это можно сделать с помощью PHP функции shell_exec
.
Поэтому ответ на вопрос “возможно ли это?” — ДА. Однако ответ на вопрос “должен ли я это делать?” — НИ В КОЕМ СЛУЧАЕ. Вот некоторые соображения:
-
WP-CLI может даже не быть установлена на сервере, где используется плагин/тема, например, потому что это сервер на базе Windows.
-
Использование
shell_exec
из темы/плагина представляет собой угрозу безопасности из-за мощных команд, доступных в командной строке. Многие провайдеры блокируют использование PHP функцийshell_exec
и других командных исполнений. -
Все, что можно сделать через WP-CLI, можно сделать и непосредственно в WP. В конце концов, это шлюз к WP и он не предлагает дополнительной функциональности.
Сегодня был такой вопрос
Вы можете использовать внутренний API WP-CLI для этого.
Ваш плагин или тема могут вызвать
WP_CLI::runcommand( $command, $options = [] )
Вы можете найти больше информации об этом здесь:
https://make.wordpress.org/cli/handbook/references/internal-api/wp-cli-runcommand/
Примечание: Как уже упоминалось, есть вероятность того, что WP-CLI может не быть установлен на сервере, но вы можете выполнить проверку для константы WP_CLI во время выполнения, например:
if ( defined( 'WP_CLI' ) && WP_CLI ) {
// Выполнение WP-CLI задач
}
.
Ответ или решение
Использование WP-CLI в плагине или теме WordPress — это реальная задача, которая может вызвать множество вопросов у разработчиков. Вот детальный разбор ситуации, основанный на предоставленной информации и лучших практиках.
Возможность использования WP-CLI в плагине или теме
Да, технически можно использовать WP-CLI в плагине или теме WordPress. WP-CLI — это интерфейс командной строки для WordPress, что позволяет выполнять ряд административных задач из командной строки. Однако из-за его природы, существует несколько аспектов, которые следует принять во внимание.
Использование WP-CLI с помощью shell_exec
Одним из методов может быть использование функции PHP shell_exec
для выполнения команд WP-CLI из PHP-кода. Например:
$ret = shell_exec('wp plugin list');
Однако стоит отметить несколько важных ограничений и рисков:
-
Совместимость окружения: WP-CLI может не быть установлен на всех серверах, на которых используется ваш плагин или тема, особенно если это серверы на базе Windows, в отличие от Unix-подобных систем.
-
Уязвимости безопасности: Использование
shell_exec
потенциально открывает серьезные уязвимости безопасности, так как это позволяет выполнять произвольные команды в системе. Многие хостинг-провайдеры блокируют использованиеshell_exec
и других подобных функций в PHP из-за этих рисков. -
Дублирование функциональности: Все задачи, которые WP-CLI позволяет выполнять, можно реализовать и через стандартные функции WordPress, так как WP-CLI предоставляет интерфейс ко многим из тех же функций.
Использование WP-CLI внутреннего API
Вместо обходного пути с shell_exec
, можно использовать внутренний API WP-CLI:
if ( defined( 'WP_CLI' ) && WP_CLI ) {
WP_CLI::runcommand( 'plugin list' );
}
Преимущества данного подхода:
- Безопасность: Это решение более безопасное, так как не зависит от вызова системных команд через PHP.
- Удобство: Возможность интеграции WP-CLI команд непосредственно через PHP, что облегчает разработку и тестирование.
- Проверка доступности: Вы можете легко проверить, доступен ли WP-CLI на сервере с помощью проверки константы
WP_CLI
.
Заключение
Использование WP-CLI в плагине или теме возможно, но требует осторожного подхода. Применение WP-CLI внутренного API — это более безопасный и чистый способ интеграции. Однако важным является также понимание контекста использования и потенциальных ограничений со стороны сервера. При написании плагинов или тем, рассмотрите также возможность реализации аналогичной функциональности через стандартные функции WordPress для обеспечения максимальной совместимости и безопасности.
Надеюсь, эта информация будет полезна разработчикам, которые рассматривают возможность использования WP-CLI в своих проектах.