Создание команды WP CLI

Создать свои команды для WP CLI очень просто. Вариантов делать это несколько, ниже рассмотрим некоторые из них.

Методы для оформления вывода в консоли, смотрите здесь.

Вариант 1: создание WP CLI команды с помощью метода add_command()

Используем метод 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( ! class_exists( 'WP_CLI' ) ){
	return;
}

WP_CLI::add_command( 'mycommand', 'My_Command', [] );

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' === array_shift( $args ) ){

			$type = 'rm_stub_thumbs';
			isset( $params['thumbs'] ) && $type = 'rm_thumbs';

			FooClass::init()->force_clear( $type );
		}
	}

}

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