mixhostのレンタルサーバーで遊ぶ その8: WP-CLIを導入する

前回はWordPressのサイトをmixhostのレンタルサーバーに引っ越してみました。WordPressの引っ越しはプラグインを使うことにより思ったより簡単にすることができました。

今回はWordPressをコマンドラインから管理するための「WP-CLI」というツールを導入したいと思います。

WP-CLIとは

WP-CLIとはWordPressをコマンドラインから管理するためのコマンドです。公式サイトは下記になります。うれしいことに公式サイトは日本語に対応していていました。

WP-CLIを使ってできることは多岐にわたります。WP-CLIのコマンドについては下記にまとまっています。

私がWP-CLIを使って便利だと思ったのが、コマンドラインを使って記事をポストできると言うことです。

シェルスクリプトと組み合わせたりすれば、自動的に記事を更新することもできたりします。

WP-CLIを使う前の準備

WP-CLIはコマンドラインのツールなので、mixhostのレンタルサーバーにSSH接続して作業する必要があります。

SSH接続方法については下記の記事で紹介しているので、参考にしてください。

今回はmixhostのレンタルサーバーで各クライアントで生成した認証キーを使ってSSH接続する方法を紹介します。mixhostの推奨方法はサーバ側(cPanel)で認証キーを生成して秘密キーをクライアントにコピーする方法ですが、本来はクライアントの生成した公開キーをサーバに登録する方が良いのではないかと思います。

WP-CLIのインストール

移行の作業はレンタルサーバーにSSHで接続して行います

WP-CLI自体はPHPのスクリプトのようなので、管理者権限がなくてもインストールが可能です。そのためレンタルサーバーでもインストールできるはずです。

WP-CLIのインストール方法は公式サイトに記載されているので、これに従って試してみます。

まずは「wp-cli.phar」というファイルを取得(ダウンロード)します。

$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

ダウンロードに成功したらこのファイルを清浄に実行できることを確認します。

$ php wp-cli.phar --info
OS:     Linux 3.10.0-962.3.2.lve1.5.26.7.el7.x86_64 #1 SMP Wed Oct 2 07:53:12 EDT 2019 x86_64
Shell:  /bin/bash
PHP binary:     /opt/cpanel/ea-php72/root/usr/bin/php.cagefs
PHP version:    7.2.30
php.ini used:   /opt/cpanel/ea-php72/root/etc/php.ini
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:       /home/foo
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.4.0

次により簡単に「wp」だけで実行できるようにします。

$ mkdir -p bin
$ chmod +x wp-cli.phar
$ mv wp-cli.phar bin/wp

ここでもう一度動作確認をしてみます。

$ wp --info
OS:     Linux 3.10.0-962.3.2.lve1.5.26.7.el7.x86_64 #1 SMP Wed Oct 2 07:53:12 EDT 2019 x86_64
Shell:  /bin/bash
PHP binary:     /opt/cpanel/ea-php72/root/usr/bin/php.cagefs
PHP version:    7.2.30
php.ini used:   /opt/cpanel/ea-php72/root/etc/php.ini
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:       /home/foo
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.4.0

次にWP-CLIでタブ補完をできるように設定ファイルを取得します。

$ curl -O https://raw.githubusercontent.com/wp-cli/wp-cli/v2.4.0/utils/wp-completion.bash
$ mv wp-completion.bash etc/

そして「.bash_profile」の末尾でこのファイルを読み込むようにします。

$ echo "source ~/etc/wp-completion.bash" >> .bash_profile

エディタでファイルを変更したい場合は、mixhostでは「vi」か「nano」が利用できます(emacsは利用できません)。

あとは.bash_profileを再読込してこの設定を有効にします。

$ source .bash_profile

この設定が有効になれば「wp 」と入力してからTABキーを押すと利用可能なコマンドが表示(補完)されます。

$ wp <タブキー>
cache              db                 import             package            search-replace     term
cap                embed              language           plugin             server             theme
cli                eval               maintenance-mode   post               shell              transient
comment            eval-file          media              post-type          sidebar            user
config             export             menu               rewrite            site               widget
core               help               network            role               super-admin
cron               i18n               option             scaffold           taxonomy

WP-CLIを使って見る

mixhostのWordPressクイックスタートでWordPressをセットアップすると、ホームディレクトリのpublic_htmlディレクトリにWordPressがインストールされています。

インストールされているWordPressには「Hello world」というタイトルの記事があるはずです。この記事の内容をWP-CLIを使って確認してみましょう。

この記事はID=1なので、ID=1の内容をwp postコマンドでチェックしてみます。

$ wp post get --path=$HOME/public_html 1
+-----------------------+----------------------------------------------------------------------------------------------+
| Field                 | Value                                                                                        |
+-----------------------+----------------------------------------------------------------------------------------------+
| ID                    | 1                                                                                            |
| post_author           | 1                                                                                            |
| post_date             | 2020-05-10 05:58:53                                                                          |
| post_date_gmt         | 2020-05-10 05:58:53                                                                          |
| post_content          | <!-- wp:paragraph --> <p>Welcome to WordPress. This is your first post. Edit or delete it, t |
|                       | hen start writing!</p> <!-- /wp:paragraph -->                                                |
| post_title            | Hello world!                                                                                 |
| post_excerpt          |                                                                                              |
| post_status           | publish                                                                                      |
| comment_status        | open                                                                                         |
| ping_status           | open                                                                                         |
| post_password         |                                                                                              |
| post_name             | hello-world                                                                                  |
| to_ping               |                                                                                              |
| pinged                |                                                                                              |
| post_modified         | 2020-05-10 05:58:53                                                                          |
| post_modified_gmt     | 2020-05-10 05:58:53                                                                          |
| post_content_filtered |                                                                                              |
| post_parent           | 0                                                                                            |
| guid                  | https://example.com/?p=1                                                                     |
| menu_order            | 0                                                                                            |
| post_type             | post                                                                                         |
| post_mime_type        |                                                                                              |
| comment_count         | 1                                                                                            |
+-----------------------+----------------------------------------------------------------------------------------------+

さらに「–field」というオプションを使うと特定のフィールドだけ取り出すことができます。この記事のタイトルを取り出す場合は次のようになります。

$ wp post get --path=$HOME/public_html 1 --field=post_title
Hello world!

このタイトルを「Hello WP-CLI!」に書き換えてみましょう。

$ wp post update --path=$HOME/public_html 1 --post_title='Hello WP-CLI!'
Success: Updated post 1.

これでブラウザでWordPressのサイトを開いてみるとタイトルが「Hello WP-CLI!」に変っているはずです。

タイトルを変更した後


まとめ

今回はmixhostのレンタルサーバーにWP-CLIというツールを導入してみました。

WP-CLIはPHPで動作するスクリプトなのでユーザ権限で簡単にインストールすることができます。このWP-CLIを使うとコマンドラインでWordPressのコンテンツなどを変更できるので、自動制御などを考えている方にはお勧めのツールです。

次回はmixhostのレンタルサーバーにPerlモジュールを追加してみます。