Создание команды 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: создание команд через класс

  1. Создаем файл class-My_Command.php название файла можно разумеется указать свое.

  2. Подключаем файл в PHP например, в файл темы functions.php или в плагин.

  3. Добавляем следующий код в файл:
<?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 );
		}
	}

}

Теперь для создания очередной команды, нужно просто добавить метод в созданный класс. Название метода станет названием первого аргумента команды.