Создание команды WP CLI
Создать свои команды для WP CLI очень просто. Вариантов делать это несколько, ниже рассмотрим некоторые из них.
Методы для оформления вывода в консоли, смотрите здесь.
Кастомные команды срабатывают после хука wp_loaded.
Кастомные команды запускаются после загрузки всей среды WordPress. Сначала срабатывает полная загрузка WP - подгружается wp-config.php (из которого вырезается wp-settings.php), а затем подгружается сам файл wp-settings.php. Для версий ниже WP 4.6 вместо wp-settings.php загружается кастомный переписанный для WP-CLI: wp-cli\php\wp-settings-cli.php.
Затем загружается Админ част ВП - файл wp-admin/includes/admin.php.
И только потом, запускается команда.
Подробнее смотрите методы:
Есть исключения (каманды, которые запускаются раньше среди ВП), это например команад wp cli info.
Вариант 1: создание одной WP CLI команды через PHP функцию
Используем метод WP_CLI::add_command()
WP_CLI::add_command( 'my command', function ( $args, $assoc_args ) { WP_CLI::success( $args[0] . ' ' . $assoc_args['append'] . ' ' . $assoc_args['all'] ); } );
Теперь используем в командной строке:
$ wp my command arg1 --append=foo --all Success: arg1 foo 1
Вариант 2: создание команд через класс
-
Создаем файл
class-My_Command.php
название файла можно разумеется указать свое. -
Подключаем файл в PHP например, в файл темы functions.php или в плагин.
- Добавляем следующий код в файл:
<?php if( ! defined( 'WP_CLI' ) ){ return; } WP_CLI::add_command( 'mycommand', My_Command::class, [] ); class My_Command extends WP_CLI_Command { public function __construct(){} /** * Working with cache and removable data (post meta). * * ## OPTIONS * * <rm> * : Removes cache. * * [--stubs] * : Remove only stubs from cache. The same as not specify any params. * * [--meta] * : Remove past meta associated with this plugin. * * ## EXAMPLES * * wp mycommand cache rm # treats as `rm --stubs` * wp mycommand cache rm --meta * * @param $args * @param $params */ public function cache( $args, $params ){ // clear cache if( 'rm' === array_shift( $args ) ){ $type = 'rm_stub_thumbs'; isset( $params['thumbs'] ) && $type = 'rm_thumbs'; FooClass::init()->force_clear( $type ); } } /** * Some custom code (for tests for example). * * ## EXAMPLES * * wp mycommand custom */ public function custom(){ // clear cache if( 'rm' === reset( $args ) ){ $type = 'rm_stub_thumbs'; isset( $params['thumbs'] ) && $type = 'rm_thumbs'; FooClass::init()->force_clear( $type ); } } }
Теперь для создания очередной команды, нужно просто добавить метод в созданный класс. Название метода станет названием первого аргумента команды.