【WordPress】万能コマンド wp shell を活用する

【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>

変数も宣言できます。 exitwp 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 を紹介しました。汎用性が高くて便利なので、ぜひいろいろ活用してみてください。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ