【WordPress】万能コマンド wp shell を活用する
『サガ スカーレット グレイス 緋色の野望 Limited BOX 【邪神】』 の Nintendo Switch 版と PlayStation 4版のどちらを予約すべきか長々迷った挙句、結局 Switch 版を選んだ kagata です。いずれにしてもハードを買ってこないといけません。
今回は、WP-CLI の中ではあまり注目されていないような気がするコマンド wp shell
を紹介します。地味ながら、いろいろな場面で活用できる万能コマンドです。
wp shell
とは
wp shell
は、コマンドラインから入力した PHP コードを対話的に実行するコマンドです。WordPress 向けの REPL というと、プログラマーには通りがよいかもしれません。
wp shell | WordPress Developer Resources
使い方はシンプルです。WP-CLI をインストールした環境で、 wp shell
コマンドを実行するだけです。お手元に環境がない場合は、以前の記事を参考に環境を準備してみてください。
$ wp shell
wp>
wp>
というプロンプトが表示され、入力待ちの状態になります。ここに PHP コードを打ち込むと、WordPress 上で実行した結果(式の評価)が返ってきます。
wp> 1 + 1;
=> int(2)
wp>
変数も宣言できます。 exit
で wp shell
を抜けると、変数はリセットされます。
wp> $a = 2;
=> int(2)
wp> $b = 3;
=> int(3)
wp> $a + $b;
=> int(5)
wp> exit
$ wp shell
wp> isset($a)
=> bool(false)
wp>
WordPress 上で実行されるので、もちろん WordPress のテンプレート関数も呼び出せます。
wp> get_bloginfo('name');
=> string(6) "Example"
wp>
以下では wp shell
が便利に使える場面を2つ紹介します。
使いみちその1:コードを試しに実行してみる
たとえば WordPress テーマ内の PHP コードを編集しているとき、実行結果を確認しようとして編集するたびにブラウザをリロードしたりしていないでしょうか。リロードにかかる時間は微々たるものかもしれませんが、作業中何度も繰り返すことを考えると、少しでも時間を短縮したいところです。
そんなときは、テンプレートの変更内容をコマンドラインで直接実行してみましょう。
wp> date('Y-m-d', strtotime('last day of 2020-02'));
=> string(10) "2020-02-29"
wp> date('Y年n月j日', strtotime('last day of 2020-02'));
=> string(9) "2020年2月29日"
wp>
結果を確認したいコードだけをピンポイントで確認できるので、ページ全体の表示結果を待つよりもスピーディです。
改行を含むコードも入力して実行できますが、ちょっとめんどうです。改行の前に \
を追加しましょう。
wp> get_posts();
=> array(2) {
[0]=>
object(WP_Post)#6967 (24) {
["ID"]=>
int(5)
["post_author"]=>
string(1) "1"
["post_date"]=>
string(19) "2018-07-09 02:29:20"
["post_date_gmt"]=>
string(19) "2018-07-09 02:29:20"
["post_content"]=>
string(31) "この記事は2件目です。"
["post_title"]=>
string(16) "2件目の記事"
(省略)
}
[1]=>
object(WP_Post)#6958 (24) {
["ID"]=>
int(1)
["post_author"]=>
string(1) "1"
["post_date"]=>
string(19) "2018-07-06 10:05:09"
["post_date_gmt"]=>
string(19) "2018-07-06 10:05:09"
["post_content"]=>
string(85) "Welcome to WordPress. This is your first post. Edit or delete it, then start writing!"
["post_title"]=>
string(12) "Hello world!"
(省略)
}
}
wp> get_posts([\
--> 'posts_per_page' => 1,\
--> ]);
=> array(1) {
[0]=>
object(WP_Post)#6956 (24) {
["ID"]=>
int(5)
["post_author"]=>
string(1) "1"
["post_date"]=>
string(19) "2018-07-09 02:29:20"
["post_date_gmt"]=>
string(19) "2018-07-09 02:29:20"
["post_content"]=>
string(31) "この記事は2件目です。"
["post_title"]=>
string(16) "2件目の記事"
(省略)
}
}
wp>
使いみちその2:データを編集する
WordPress のカスタマイズをするとき、動作確認などのためにデータをあれこれ入れ替えたくなることがあります。管理画面からデータを操作したり、phpMyAdmin などからデータベースを直接編集したりすることが多いと思いますが、データを更新する関数を wp shell
から実行すると手早くて便利です。
例えば、ユーザーメタデータをいろいろいじりたいときは関数 update_user_meta()
で次のようにします。
wp> $user = new WP_User(1);
=> object(WP_User)#6958 (8) {
(省略)
}
wp> update_user_meta($user->ID, 'foo', 'bar');
=> int(20)
wp> $user->get('foo');
=> string(3) "bar"
wp> update_user_meta($user->ID, 'foo', 'hoge');
=> bool(true)
wp> $user->get('foo');
=> string(4) "hoge"
wp>
もっとも、WP-CLI には各種データを編集するための API がひととおりそろっています。ユーザーメタデータを編集する上の例は、 wp user meta
コマンドを使った次の操作と等価です。
$ wp user meta add 1 foo "bar"
Success: Added custom field.
$ wp user meta list 1 --keys=foo
+---------+----------+------------+
| user_id | meta_key | meta_value |
+---------+----------+------------+
| 1 | foo | bar |
+---------+----------+------------+
$ wp user meta update 1 foo "hoge"
Success: Updated custom field 'foo'.
$ wp user meta list 1 --keys=foo
+---------+----------+------------+
| user_id | meta_key | meta_value |
+---------+----------+------------+
| 1 | foo | hoge |
+---------+----------+------------+
$
どちらでもよいのですが、WordPress 関数と別に WP-CLI のサブコマンドも覚えないといけない後者よりは、PHP コード上でもコマンドラインでも同じ書き方ができる wp shell
のほうが応用が効いて便利なんじゃないか、と個人的には思っています。
まとめ
コマンドラインから PHP コードを実行して WordPress を操作できるコマンド wp shell
を紹介しました。汎用性が高くて便利なので、ぜひいろいろ活用してみてください。