シェル(@takasqr)のブログ

wp-cliのインストールと使い方【WordPressコマンドツール】

WP-CLIとは

WordPressに対する変更をLinuxのコマンドラインで行うことができるツールです。WordPressのインストールから記事の投稿まで様々なことがコマンド上でできます。

この記事を書いた人

@takasqr アプリケーション開発が大好きなエンジニア。Vue、Swift、Electrom などでアプリを作って公開している。AWS や Firebase などのクラウドサービスも好き。

作ったアプリKeyScript

WP-CLIをインストールする

pharファイルをダウンロードします。

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

wp-cli.pharファイルが動くことを確認する。

php wp-cli.phar --info

wp-cli.pharに実行権限をつける。

chmod +x wp-cli.phar

wp-cli.pharをwpに名前変更してPATHの通る場所に配置する。 mvコマンドを使って名前変更と、配置を一度に行います。

sudo mv wp-cli.phar /usr/local/bin/wp

動作確認します。

/usr/local/bin以外の場所から、

wp --info

と打って情報が返ってくれば成功です。

OS:Linux 4.14.121-85.96.amzn1.x86_64 #1 SMP Wed May 22 00:45:50 UTC 2019 x86_64
Shell:
PHP binary:/usr/local/bin/php
PHP version:7.3.6
php.ini used:
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:/var/www/html
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version:2.2.0

はじめ、wp-cli.pharファイルをwpに名前変更することに気づかなくて、 /usr/local/binにwpフォルダを作ってしまってました。

Dockerfileに書くとしたら

DockerfileのRUNコマンドに書きました。動作確認済です。

RUN echo 'wp-cli'; \
  curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar; \
  chmod +x wp-cli.phar; \
  mv wp-cli.phar /usr/local/bin/wp

記事を投稿する

postコマンドで記事をコマンドで投稿する。 CUI環境でWordPressの記事を投稿できるコマンドです。

基本

下のコマンドを実行する。

wp post create \
  --allow-root \
  --post_content="<h2>test</h2>" \
  --post_title="test" \
  --post_status="Publish" \
  --post_type="Post" \
  --post_date="2019-6-16 00:00:00" \
  --post_modified="2019-6-16 00:00:00"

パラメータは適宜読み替えてください。

テキストファイルの中身をcontentとして投稿する

wp post create \
  --allow-root \
  --post_content="`cat /home/[user_name]/post/example.html`" \
  --post_title="test" \
  --post_status="Publish" \
  --post_type="Post" \
  --post_date="2019-6-16 00:00:00" \
  --post_modified="2019-6-16 00:00:00"
/home/[user_name]/post/example.html

example.htmlの内容を記事のcontentとして出力します。

ディレクトリの中にあるテキストファイルを記事として出力する

#!/bin/bash

cd /home/wordpress-auto/post
for file in `\find . -maxdepth 1 -type f`; do
  wp post create \
    --allow-root \
    --path="/var/www/html/" \
    --post_content="`cat $file`" \
    --post_title="test" \
    --post_status="Publish" \
    --post_type="Post" \
    --post_date="2019-6-16 00:00:00" \
    --post_modified="2019-6-16 00:00:00"
done

ディレクトリの中にあるファイルをループさせて、記事を投稿していきます。

テキストの中のパラメータを利用して投稿する

#!/bin/bash

cd /home/wordpress-auto/post
for file in `\find . -maxdepth 1 -type f`; do
  wp post create \
    --allow-root \
    --path="/var/www/html/" \
    --post_content="`cat $file`" \
    --post_date="`sed -n 1p $file`" \
    --post_modified="`sed -n 2p $file`" \
    --post_status="`sed -n 3p $file`" \
    --post_title="`sed -n 4p $file`" \
    --post_type="`sed -n 5p $file`"
done

バッククォートの中はコマンドとして評価されるので、

sed -n 5p $file

sedを使って任意の行を抜き出しています。

躓いたこと

はじめ、Markdownをcontentに入れて実行しましたが、変換してくれずhtmlで流してみるとうまくいきました。

その他コマンドを紹介する

Just another WordPress siteを変更する

WordPressをインストールするとブログタイトルの横に出てくるアレです。

以下コマンドで変更できます。

wp option update blogdescription 'dev application !!' --allow-root --path="/var/www/html/"

blogdescriptionという項目名のようです。

「dev application !!」の部分を好きなフレーズに変更してください。

WP-CLIでメニューをコマンドで登録しました。

# primary-menuを登録
wp menu create "primary-menu" --allow-root --path="/var/www/html/"
# Menu の中身を登録
wp menu item add-post "primary-menu" 00012 --title="post list" --allow-root --path="/var/www/html/"

wp menu item add-post "primary-menu" 00014 --title="links" --allow-root --path="/var/www/html/"
# location を登録
wp menu location list --allow-root --path="/var/www/html/"
# location を登録
wp menu location assign primary-menu menu-1 --allow-root --path="/var/www/html/"
# wp menu location assign primary-menu primary --allow-root --path="/var/www/html/"

はじめロケーションの登録がうまくいきませんでした。

Error: Invalid location primary.

原因を調べるためにlocationのリストを表示させると、

location        description
menu-1  Primary
footer  Footer Menu
social  Social Links Menu

Primaryに登録する為にはmenu-1という名前で登録する必要があるようです。

WP-CLIの公式サイトには、

$ wp menu location assign primary-menu primary
Success: Assigned location primary to menu primary-menu.

とかいてありましたが違うようです。

さいごに

記事の内容をテキストファイルにすることができると、gitなどで記事を管理することができるようになります。

参考

WP-CLIのコマンドリファレンスサイト。

https://developer.wordpress.org/cli/commands/