Создание команды WP CLI
Создать свои команды для WP CLI очень просто. Вариантов делать это несколько, ниже рассмотрим некоторые из них.
Методы для оформления вывода в консоли, смотрите здесь.
Кастомные команды срабатывают после хука wp_loaded.
Кастомные команды запускаются после загрузки всей среды WordPress. Сначала срабатывает полная загрузка WP - подгружается wp-config.php (из которого вырезается wp-settings.php), а затем подгружается сам файл wp-settings.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 );
}
}
}
Теперь для создания очередной команды, нужно просто добавить метод в созданный класс. Название метода станет названием первого аргумента команды.