Как работать c WP-CLI

Предыстория

Нужно было написать поддержку WP CLI в плагине.

WP CLI может быть полезен в случаях, когда удобно работать с командной строкой, нежели с веб-интерфейсом. Например для длительных или «тяжелых» задач типа импорта данных или массовых операций перебора. В моем случае основная цель — запуск фоновых процессов импорта товаров и других процессов.

Как запустить WP-CLI на Open Server

Для запуска на WP CLI под Open Server нужно:

Убедиться что у вас php работает из под консоли. Как это сделать описано тут.

Провести процедуру, аналогичную установке composer под OpenServer:

  • Открыть консоль OPServer
  • Перейти в папку с актуальной версией
    PHP cd modules/php/PHP_7.4
  • скачать phar файл или набрать в консоли
    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  • Проверить работу командой
    php wp-cli.phar --info

  • Теперь cli по-факту работает. Но нам нужно, что бы она работала аналогично документации.
    Для этого создадим ссылку

    echo "%~dp0wp-cli.phar" %*>wp.bat
  • Профит. Все, теперь мы можем использовать любые команды WP CLI, например: wp --info
    
    $ wp --info
    OS: Windows NT 10.0 build 22000 (Windows 10) AMD64
    Shell: C:\Windows\system32\cmd.exe
    PHP binary: c:\OpenServer\modules\php\PHP_7.4\php.exe
    PHP version: 7.4.29
    php.ini used: C:\openserver\modules\php\PHP_7.4\php.ini
    MySQL binary:
    MySQL version:
    SQL modes:
    WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli
    WP-CLI vendor dir: phar://wp-cli.phar/vendor
    WP_CLI phar path: C:\OpenServer\modules\php\PHP_7.4
    WP-CLI packages dir:
    WP-CLI cache dir: c:\openserver/.wp-cli/cache
    WP-CLI global config:
    WP-CLI project config:
    WP-CLI version: 2.7.1
    

 

Как написать php обработчик команды

Как написать обработчик подробно написано в оф. документации к WP CLI https://wp-cli.org/#extending

Я приведу свой пример, для наглядности:

class MY_CLI
{
    /** Регистрация хука **/
    public static function add_action(){
        add_action( 'cli_init', [self::class, 'register_command'], 10, 1);
    }
    
    /** Регистрация консольной команды **/
    public static function register_command(){
        \WP_CLI::add_command( 'woo2iiko', new self());
    }

    /**
     * Получаем инстанс плагина, содержащего данные о версии
    **/
    public function __construct(){
        $this->plugin = WP_Plugin::getInstance();
    }

    /**
     * Print a plugin version
     *
     * @example wp woo2iiko version
     * @return void
     */
    public function version(){
        \WP_CLI::log( $this->plugin->version );
    }
}
// Вызов
MY_CLI::add_action();

Результат

PS C:\OpenServer\domains\woocommerce.loc> wp woo2iiko version
1.0.4.5