ブログ
WP-CLIインストール
WP-CLIとは
WP-CLIとは、コマンドラインでwordpressに関するあれこれができるようにしてれるもの。
WP-CLI は WordPress を管理するためのコマンドラインインターフェースです。
プラグインのアップデートやマルチサイトのセットアップなどの多くのことをブラウザ無しで行うことができます。
GUIでやると面倒なことがWP-CLIを使うと簡単に出来そう?
という期待から、使ってみました。
ぱっと探しただけでも、この辺りが便利そうです。
wp search-replace 'AAA' 'BBB'
サイト内データの検索・置換
wp search-replace 'http://before.jp' 'http://after.jp' --skip-columns=guid
引っ越し時のドメインの置き換え
wp post generate --count=500 --post_type=page
空の固定ページをたくさん作成する
wp user import-csv /path/to/users.csv
管理画面のユーザーをCSVから登録する
wp user update USERNAME --user_pass=NEWPASSWORD
管理画面のログインパスワード変更
あるいは、インストールから案件共通の初期設定までをコマンドで保存しておけたら、便利かも。
個人的にはここが目標です。
本記事では、まずはWP-CLIのインストールについてと、各環境でのハウツーを記録しておきます。
WP-CLIインストール
公式サイトに従いインストールします。
$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
$ php wp-cli.phar --info
$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp
$ wp --info
PHP binary: /usr/bin/php
PHP version: 5.5.38
php.ini used:
WP-CLI root dir: phar://wp-cli.phar
WP-CLI vendor dir: phar://wp-cli.phar/vendor
WP_CLI phar path: /Users/user/workspace/sample/htdocs/wp
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.4.1
インストールが成功していれば、上のように表示されます。
では、「引っ越し時のドメインの置き換え」を試してみます。
操作したいWordPress配下まで移動してから、
$ wp search-replace 'http://before.jp' 'http://after.jp' --skip-columns=guid --dry-run
+------------------+-----------------------+--------------+------+
| Table | Column | Replacements | Type |
+------------------+-----------------------+--------------+------+
| wp_commentmeta | meta_key | 0 | SQL |
| wp_commentmeta | meta_value | 0 | SQL |
| wp_comments | comment_author | 0 | SQL |
| wp_comments | comment_author_email | 0 | SQL |
| wp_comments | comment_author_url | 0 | SQL |
| wp_comments | comment_author_IP | 0 | SQL |
| wp_comments | comment_content | 0 | SQL |
| wp_comments | comment_approved | 0 | SQL |
| wp_comments | comment_agent | 0 | SQL |
| wp_comments | comment_type | 0 | SQL |
| wp_links | link_url | 0 | SQL |
| wp_links | link_name | 0 | SQL |
| wp_links | link_image | 0 | SQL |
| wp_links | link_target | 0 | SQL |
| wp_links | link_description | 0 | SQL |
| wp_links | link_visible | 0 | SQL |
| wp_links | link_rel | 0 | SQL |
| wp_links | link_notes | 0 | SQL |
| wp_links | link_rss | 0 | SQL |
| wp_options | option_name | 0 | SQL |
| wp_options | option_value | 2 | PHP |
| wp_options | autoload | 0 | SQL |
| wp_postmeta | meta_key | 0 | SQL |
| wp_postmeta | meta_value | 0 | PHP |
| wp_posts | post_content | 0 | SQL |
| wp_posts | post_title | 0 | SQL |
| wp_posts | post_excerpt | 0 | SQL |
| wp_posts | post_status | 0 | SQL |
| wp_posts | comment_status | 0 | SQL |
| wp_posts | ping_status | 0 | SQL |
| wp_posts | post_password | 0 | SQL |
| wp_posts | post_name | 0 | SQL |
| wp_posts | to_ping | 0 | SQL |
| wp_posts | pinged | 0 | SQL |
| wp_posts | post_content_filtered | 0 | SQL |
| wp_posts | post_type | 0 | SQL |
| wp_posts | post_mime_type | 0 | SQL |
| wp_term_taxonomy | taxonomy | 0 | SQL |
| wp_term_taxonomy | description | 0 | SQL |
| wp_termmeta | meta_key | 0 | SQL |
| wp_termmeta | meta_value | 0 | SQL |
| wp_terms | name | 0 | SQL |
| wp_terms | slug | 0 | SQL |
| wp_usermeta | meta_key | 0 | SQL |
| wp_usermeta | meta_value | 0 | PHP |
| wp_users | user_login | 0 | SQL |
| wp_users | user_nicename | 0 | SQL |
| wp_users | user_email | 0 | SQL |
| wp_users | user_url | 0 | SQL |
| wp_users | user_activation_key | 0 | SQL |
| wp_users | display_name | 0 | SQL |
+------------------+-----------------------+--------------+------+
Success: 2 replacements to be made.
まずはsearch-replace
の--dry-run
オプションで、実際には実行しないまま結果だけを確認します。
[–dry-run]
Run the entire search/replace operation and show report, but don’t save changes to the database.
実行結果に問題ないことを確認したら、--dry-run
オプションを外して、実行します。
$ wp search-replace 'http://before.jp' 'http://after.jp' --skip-columns=guid
+------------------+-----------------------+--------------+------+
| Table | Column | Replacements | Type |
+------------------+-----------------------+--------------+------+
| wp_commentmeta | meta_key | 0 | SQL |
| wp_commentmeta | meta_value | 0 | SQL |
| wp_comments | comment_author | 0 | SQL |
| wp_comments | comment_author_email | 0 | SQL |
| wp_comments | comment_author_url | 0 | SQL |
| wp_comments | comment_author_IP | 0 | SQL |
| wp_comments | comment_content | 0 | SQL |
| wp_comments | comment_approved | 0 | SQL |
| wp_comments | comment_agent | 0 | SQL |
| wp_comments | comment_type | 0 | SQL |
| wp_links | link_url | 0 | SQL |
| wp_links | link_name | 0 | SQL |
| wp_links | link_image | 0 | SQL |
| wp_links | link_target | 0 | SQL |
| wp_links | link_description | 0 | SQL |
| wp_links | link_visible | 0 | SQL |
| wp_links | link_rel | 0 | SQL |
| wp_links | link_notes | 0 | SQL |
| wp_links | link_rss | 0 | SQL |
| wp_options | option_name | 0 | SQL |
| wp_options | option_value | 2 | PHP |
| wp_options | autoload | 0 | SQL |
| wp_postmeta | meta_key | 0 | SQL |
| wp_postmeta | meta_value | 0 | PHP |
| wp_posts | post_content | 0 | SQL |
| wp_posts | post_title | 0 | SQL |
| wp_posts | post_excerpt | 0 | SQL |
| wp_posts | post_status | 0 | SQL |
| wp_posts | comment_status | 0 | SQL |
| wp_posts | ping_status | 0 | SQL |
| wp_posts | post_password | 0 | SQL |
| wp_posts | post_name | 0 | SQL |
| wp_posts | to_ping | 0 | SQL |
| wp_posts | pinged | 0 | SQL |
| wp_posts | post_content_filtered | 0 | SQL |
| wp_posts | post_type | 0 | SQL |
| wp_posts | post_mime_type | 0 | SQL |
| wp_term_taxonomy | taxonomy | 0 | SQL |
| wp_term_taxonomy | description | 0 | SQL |
| wp_termmeta | meta_key | 0 | SQL |
| wp_termmeta | meta_value | 0 | SQL |
| wp_terms | name | 0 | SQL |
| wp_terms | slug | 0 | SQL |
| wp_usermeta | meta_key | 0 | SQL |
| wp_usermeta | meta_value | 0 | PHP |
| wp_users | user_login | 0 | SQL |
| wp_users | user_nicename | 0 | SQL |
| wp_users | user_email | 0 | SQL |
| wp_users | user_url | 0 | SQL |
| wp_users | user_activation_key | 0 | SQL |
| wp_users | display_name | 0 | SQL |
+------------------+-----------------------+--------------+------+
Success: Made 2 replacements.
MAMP環境で使う
MAMP環境でWP-CLIを使う場合、wp-config.phpに追記が必要です。
/** MySQL のホスト名 */
// define('DB_HOST', 'localhost');
define('DB_HOST', 'localhost:/Applications/MAMP/tmp/mysql/mysql.sock');
Local by Flywheelで使う
Local by Flywheelは、こちらの記事で先輩ががちらりと紹介している「Wordpressの環境が一瞬で作れる」ツールです。
- Virtual Boxで仮想OSを立て、rootユーザーでSSHアクセスができる。
- OSはDebian
- WP-CLIがデフォルトでインストールされている。
# pwd
/
# wp user list
+----+------------+--------------+--------------------------+---------------------+---------------+
| ID | user_login | display_name | user_email | user_registered | roles |
+----+------------+--------------+--------------------------+---------------------+---------------+
| 1 | admin | admin | dev-email@flywheel.local | 2018-01-10 01:59:54 | subscriber |
+----+------------+--------------+--------------------------+---------------------+---------------+
仮想OSにSSHでアクセスするとルートパスにいますが、その場でWP-CLIが使えるようです。
(WordPressは/app/public/配下)
ただし、手動でWordPressアドレスを変更すると、今度はどこへ移動してもパスが通らなくなりました。
# pwd
/
# wp user list
Error: This does not seem to be a WordPress install.
Pass --path=`path/to/wordpress` or run `wp core download`.
# cd /app/public/wordpress
# wp user list
Error: This does not seem to be a WordPress install.
Pass --path=`path/to/wordpress` or run `wp core download`.
根本的な解決ではありませんが、明示的にwp-confing.phpまでのパスを示して使用することができます。
# wp user list --path=/app/public/wp/
+----+------------+--------------+--------------------------+---------------------+---------------+
| ID | user_login | display_name | user_email | user_registered | roles |
+----+------------+--------------+--------------------------+---------------------+---------------+
| 1 | admin | admin | dev-email@flywheel.local | 2018-01-10 01:59:54 | subscriber |
+----+------------+--------------+--------------------------+---------------------+---------------+
–path= Path to the WordPress files.
2018年2月28日追記 ここから
パスが行方不明になる原因を、先輩が見つけてくれました。
ルート直下に設定ファイル「wp-cli.yml」があり、このファイルでWordPressへのパスを指定していました。
# cat wp-cli.yml
path: /app/public
これを修正すれば、きちんとパスが通りました。
OSがDebianなので、エディタコマンドはviではなくnanoです。
# nano wp-cli.yml
# cat wp-cli.yml
path: /app/public/wp
設定ファイルの優先順位は以下のようです。
- Command-line arguments.
- wp-cli.local.yml file inside the current working directory (or upwards).
- wp-cli.yml file inside the current working directory (or upwards).
- ~/.wp-cli/config.yml file (path can be changed by setting the WP_CLI_CONFIG_PATH environment variable).
- WP-CLI defaults.
参考:WP-CLI Config
2018年2月28日追記 おわり
なお、WP-CLIは本来rootユーザーで使うには-–allow-root
オプション(※非推奨)が必要ですが、Local by Flywheel では .bashrc にaliasが指定されているようです。
# cat ~/.bashrc
alias wp="wp --allow-root"
# alias wp
alias wp='wp --allow-root'
# unalias wp
# alias wp
bash: alias: wp: not found
# wp user list
Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under.
If you REALLY mean to run this as root, we won't stop you, but just bear in mind that any code on this site will then have full control of your server, making it quite DANGEROUS.
If you'd like to continue as root, please run this again, adding this flag: --allow-root
If you'd like to run it as the user that this site is under, you can run the following to become the respective user:
sudo -u USER -i -- wp <command>
CPIサーバー(シェアードプラン)で使う
弊社の開発でよく使うサーバーCPIサーバー(シェアードプラン)は、
- 共用サーバー
- phpコマンドはphp-5.5.27
- OSはFreeBSD
この環境にWP-CLIをインストールします。
% mkdir bin
% cd bin/
% curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
% php-5.5.27 wp-cli.phar --info
ここまでは他の環境と同じです。
共用サーバーなのでusr/local/bin
へのアクセス権が無く、wpコマンドの登録ができません。
代わりにaliasを登録します。
% vi ~/.cshrc
OSがFreeBSDなので、.bashrcではなく.cshrcです。
% cat ~/.cshrc
alias wp 'php-5.5.27 ~/bin/wp-cli.phar'
以上で、他の環境と同じように使えるようになりました。