WordPressの記事を、まとめて直したいことがあります。
管理画面から1本ずつ開いて直すのは、数が増えると現実的ではありません。
そんなときに使えるのがWP-CLIです。エックスサーバーには最初から入っています。
ただ、そのまま wp と打っても動きません。ここでつまずいたので、手順ごと残しておきます。
- エックスサーバーでSSH接続できるようにする手順
- wpコマンドが動かないときのエラーと原因
- PHPのバージョンを指定して動かす方法
- 実務でよく使うWP-CLIのコマンド
WP-CLIを使うと何が楽になるのか。
WP-CLIは、WordPressをコマンドで操作するためのツールです。
たとえば、こんなことが1行でできます。
- 全記事のカスタムフィールドを一括で書き換える。
- 記事の本文をファイルから流し込む。
- 特定の条件で記事を検索して、IDの一覧を取り出す。
- プラグインやテーマの状態を確認する。
管理画面で50回クリックする作業が、1行で終わります。
エックスサーバーでSSHを使えるようにする。
WP-CLIはサーバーの中で動かすので、まずSSHで接続できるようにします。
エックスサーバーのSSHは公開鍵認証のみです。パスワードでは接続できません。
サーバーパネルでSSHをONにする。
サーバーパネルの「SSH設定」を開きます。
「公開鍵を登録」から、登録方式を「手動」にして、自分で作った公開鍵を貼り付けます。
サーバー側で鍵を作る「自動生成」もありますが、こちらは秘密鍵をダウンロードして管理することになります。手元で作った鍵を登録するほうが、複数のサーバーを扱うときに整理しやすいです。
鍵を用意する。
手元のパソコンで鍵を作ります。
ssh-keygen -t ed25519 -f ~/.ssh/xserver -C "xserver"これで ~/.ssh/xserver(秘密鍵)と ~/.ssh/xserver.pub(公開鍵)ができます。
サーバーパネルに貼り付けるのは、.pub のほうです。中身をそのままコピーしてください。
接続する。
エックスサーバーのSSHは、ポートが22ではなく10022です。ここを忘れると繋がりません。
ssh -i ~/.ssh/xserver -p 10022 サーバーID@サーバーID.xsrv.jpサーバーIDは、サーバーパネルの右上に出ている文字列です。
wpコマンドが動かない。
接続できたので、WordPressのディレクトリへ移動して wp を打ちます。
cd ~/example.com/public_html
wp post listところが、こんなエラーが出ます。
PHP Parse error: syntax error, unexpected '?', expecting '&' or variable (T_VARIABLE)
in /home/~/wp-includes/compat-utf8.php on line 47WordPress本体のファイルで構文エラー、と言われます。
ファイルが壊れているのかと思ってしまいますが、そうではありません。
原因は、既定のPHPが古いから。
wp --info を打つと、原因が分かります。
PHP binary: /usr/bin/php
PHP version: 5.4.16コマンドラインのPHPが 5.4 でした。
ここが分かりにくいところで、サーバーパネルで設定するPHPのバージョンは、Webサイトを表示するときのものです。
SSHで入って打つコマンドには、その設定が反映されていません。
PHP 5.4 では ?? のような新しい書き方が解釈できないので、WordPress本体を読み込んだ時点で止まってしまうわけです。サイト自体は何ともありません。
PHPのバージョンを指定して実行する。
エックスサーバーには、バージョンごとのPHPが用意されています。
ls /usr/bin/php*/usr/bin/php8.2 や /usr/bin/php8.4 といったファイルが並んでいるはずです。
あとは、使いたいPHPを明示してWP-CLIを呼び出します。
/usr/bin/php8.2 /usr/bin/wp post listこれで動きます。
サイトが動いているPHPのバージョンに合わせておくのが無難です。
毎回打つのが面倒なら、エイリアスにする。
毎回この長さを打つのは面倒なので、短くしておきます。
WP="/usr/bin/php8.2 /usr/bin/wp"
$WP post listその場だけで使うなら、これで十分です。
毎回使うなら ~/.bashrc に書いておきます。
alias wp='/usr/bin/php8.2 /usr/bin/wp'よく使うコマンド。
実際に使ったものを挙げておきます。
| やりたいこと | コマンド |
| 記事の一覧を見る | wp post list --post_type=post |
| スラッグから記事IDを調べる | wp post list --name=スラッグ --field=ID |
| 記事の本文を取り出す | wp post get 123 --field=post_content |
| 記事の本文をファイルから更新する | wp post update 123 new.html --user=1 |
| カスタムフィールドを見る | wp post meta list 123 |
| カスタムフィールドを書き換える | wp post meta update 123 キー 値 |
| 管理者ユーザーを調べる | wp user list --role=administrator |
本文を更新するときの --user=1 は、リビジョンの作成者を残すために付けています。「付けないとHTMLが除去される」という話も見かけますが、実際に試したところ違いました。くわしくはWP-CLIで記事本文を更新するとブロックが壊れる原因と防ぎ方に書いています。
まとめ
エックスサーバーでWP-CLIが動かないときは、まず wp --info でPHPのバージョンを見てください。
5.4 と出たら、/usr/bin/php8.2 /usr/bin/wp のように実行するPHPを明示すれば動きます。
エラーの内容がWordPress本体の構文エラーなので、一瞬あせります。ですが、ファイルは壊れていません。落ち着いて実行環境のほうを疑ってください。