WP-CLIアドベントカレンダーの11日目です。
昨日は @tecking さんの「bashかわいいよbash-さくらのレンタルサーバでも『WP-CLI』の入力補完機能を」でした。
今回は、自作のプラグインに wp-cli 用のコマンドを追加する方法についてです。
最近、Theme Check プラグインを wp-cli 対応させるコードを書いてプルリクした(まだ、マージされてない…)ので、それを元に解説します。
wokamoto/theme-check
実際に追加したのは theme-check.php の下3行と、wp-cli.php です。
wp-cli が実行された場合のみ wp-cli.php を include するには theme-check.php の下3行のように WP_CLI という定数が存在するかどうか ( defined('WP_CLI') && WP_CLI
) で確認します。
プラグインに以下の3行を追加しましょう。
if ( defined('WP_CLI') && WP_CLI ) { require_once(dirname(__FILE__).'/wp-cli.php'); }
次に wp-cli.php の記述方法について解説します。
wp-cli から呼び出された場合、WP_CLI_Command というクラスが使用できるようになっているので、これを extends してクラスを作成します。
このクラスの書き方は、宮内さんが書いた「WP-CLIのパッケージコマンドを自作」という記事が参考になります。
詳しことは、そちらにお任せしてそちらに書いてないことを書きましょう。
function __invoke() の前にコメントが書いてありますが、実はこれが重要です。
https://github.com/wokamoto/theme-check/blob/Support-WP-CLI-Spike/wp-cli.php#L9-L23
/** * Theme check. * * ## OPTIONS * * [<theme>] * : Theme name. Default: current theme * * [--format=<format>] * : Accepted values: text, json. Default: text * * ## EXAMPLES * * wp theme-check twentyfourteen */
wp-cli では、コマンドの help を wp help <command> と打つことで表示されますが、この時に表示されるテキストはこのコメント内に書いてあるテキストになります。
そのため、このコメントを書いておくと wp help theme-check と打つと以下のように表示されます。
$ wp help theme-check NAME wp theme-check DESCRIPTION Theme check. SYNOPSIS wp theme-check [<theme>] [--format=<format>] OPTIONS [<theme>] Theme name. Default: current theme [--format=<format>] Accepted values: text, json. Default: text EXAMPLES wp theme-check twentyfourteen
良くできてますね。
wp theme-check ではチェックするテーマを指定できます。例えば wp theme-check twentyfourteen と入力すると twentyfourteen テーマをチェックします。
これは、WP_CLI_Command を継承したクラス内のメソッドの第一引数 $args に配列としてセットされます。( 入力した値がブランク区切りで配列にセットされる )
wp theme-check twentyfourteen と入力された場合 $args の内容は array( 'twentyfourteen' )
としてセットされるので $args[0]
で、コマンドラインで入力された値を取得することが可能です。
wp theme-check では –format=<text or json> オプションを受けることができますが、これは invoke() の第二引数 $assoc_args に仮想配列としてセットされます。
wp theme-check –format=json と入力された場合 $assoc_args の内容は array( 'format' => 'json' )
となりますので $assoc_args['format']
で、コマンドラインで入力された値を取得することが可能です。
ただし、この $assoc_args に format がセットされているのはメソッド( function __invoke() )の前に書いたコメントに [--format=<format>]
と書いてあるからです。
オプションを受け付けたい場合は、コメントをきちんと記述しましょう。
良くできてますね。
さらにサブコマンドを追加したい場合があるかもしれません。
例えば wp theme-check info と入力したら、テーマの情報を表示したい場合は WP_CLI_Command を拡張したクラスにサブコマンドと同名のメソッドを追加するだけです。
@shinichiN さんです、よろしくー