[wp-cli]コマンドラインからWordPressのコメントを操作する


日々大量のコメントSPAMと戦っている皆さん、こんばんは。wp-cli(と、ほんの少しのSQL文)を使うと、WordPressのコメント操作が楽になりますよ。今回は、前半戦にコマンドラインから行うコメント操作の基本と、後半戦はSPAMコメントの退治方法をお伝えしようと思います。

■ 投稿ID1のコメント数を確認する

投稿ID1番にコメントがどれだけついているかは「wp comment count <投稿ID>」で行います。以下の例では、承認されたコメントが1件ついていることがわかります。

$ wp comment count 1
approved:        1
moderated:       0
SPAM:            0
trash:           0
post-trashed:    0
total_comments:  1

■ コメント一覧を確認する

コメント一覧を確認するには「wp comment list」を実行します。ここには、SPAMまたはゴミ箱に入ったコメント以外(承認されたもの、承認前のもの)が表示されます。

$ wp comment list
+------------+-----------------+-----------------+-----------------+----------------+-----------------+
| comment_ID | comment_post_ID | comment_date    | comment_approve | comment_author | comment_author_ |
|            |                 |                 | d               |                | email           |
+------------+-----------------+-----------------+-----------------+----------------+-----------------+
| 20         | 1               | 2015-01-03 21:0 | 1               | Mr WordPress   |                 |
|            |                 | 8:12            |                 |                |                 |
+------------+-----------------+-----------------+-----------------+----------------+-----------------+

承認前のコメントがあるとこんな風に表示されます。

$ wp comment list
+------------+-----------------+-----------------+-----------------+----------------+-----------------+
| comment_ID | comment_post_ID | comment_date    | comment_approve | comment_author | comment_author_ |
|            |                 |                 | d               |                | email           |
+------------+-----------------+-----------------+-----------------+----------------+-----------------+
| 21         | 1               | 2015-01-10 14:1 | 0               | (っ´∀`)っ ゃー |                 |
|            |                 | 5:20            |                 |                |                 |
| 20         | 1               | 2015-01-03 21:0 | 1               | Mr WordPress   |                 |
|            |                 | 8:12            |                 |                |                 |
+------------+-----------------+-----------------+-----------------+----------------+-----------------+

comment_approvedの列が0は承認前、1が承認済のコメントとなります。

 

■ コメント一覧をCSVで取得する

コメントの一覧をCSV形式で表示するには、「wp comment list」に「--format=csv」をつけます。リダイレクトしないと標準出力に表示されるので、ファイルにリダイレクトしましょう。

$ wp comment list --format=csv > ${HOME}/comments.csv
$ cat ${HOME}/comments.csv 
comment_ID,comment_post_ID,comment_date,comment_approved,comment_author,comment_author_email
20,1,"2015-01-03 21:08:12",1,"Mr WordPress",

 

■ コメントのステータスを確認する

コメントID20が承認されているかを確認するには以下のようにします。

$ wp comment status 20
approved

 

■ コメントの詳細を確認する

コメントの詳細な内容を確認するには「wp comment get <コメントID>」と実行します。

$ wp comment get 20
+----------------------+----------------------------------------------------------------------------+
| Field                | Value                                                                      |
+----------------------+----------------------------------------------------------------------------+
| comment_ID           | 20                                                                         |
| comment_post_ID      | 1                                                                          |
| comment_author       | Mr WordPress                                                               |
| comment_author_email |                                                                            |
| comment_author_url   | https://wordpress.org/                                                     |
| comment_author_IP    |                                                                            |
| comment_date         | 2015-01-03 21:08:12                                                        |
| comment_date_gmt     | 2015-01-03 21:08:12                                                        |
| comment_content      | これはコメントです。
コメントを削除するには、ログインして投稿編集画面でコメントを表示してください。編集または削除するオプションが用意されています。 |
| comment_karma        | 0                                                                          |
| comment_approved     | 1                                                                          |
| comment_agent        |                                                                            |
| comment_type         |                                                                            |
| comment_parent       | 0                                                                          |
| user_id              | 0                                                                          |
+----------------------+----------------------------------------------------------------------------+

 

■ コメントの承認を取り消す

コメントの承認を取り消すには、「wp comment update」を使います。

$ wp comment update 20 --comment_approved=0 
Success: Updated comment 20.

wp-cliの公式な手順では「wp comment unapprove」となっていますが、何故かこれではエラーとなってしまうようです。

$ wp comment unapprove 20
Error: コメントの状態を更新できませんでした

wp comment status で確認してみましょう。

$ wp comment status 20
unapproved

 

■ コメントを再承認する

先ほど承認を取り消したコメントを再度承認します。unapproveではエラーとなりましたが、approveはうまくいくようです。

$ wp comment approve 20
Success: Approved comment 20
$ wp comment status 20
approved

 

■ コメントをSPAMとしてマークする

コメントをSPAMとしてマークするには「wp comment spam <コメントID>」を実行します。

$ wp comment spam 20
Success: Marked as spam comment 20.

それでは確認してみましょう。コメントがSPAMとしてマークされました。

$ wp comment status 20
spam

 

■ コメントにマークしたSPAMを取り消す

一度SPAMとしてマークしたコメントを再承認することもできます。

$ wp comment unspam 20
Success: unspammed comment 20.
$ wp comment status 20
approved

 

■ コメント作成者のウェブサイトURLを更新する

コメントの任意の項目を更新するには、「wp comment update <コメントID>」にフィールドを指定します。まずはコメント作成者のウェブサイトURL(comment_author_url)を表示してみましょう。

$ wp comment get 20 --field=comment_author_url
https://wordpress.org/

続いて、comment_author_urlを更新します。

$ wp comment update 20 --comment_author_url=https://nullpopopo.blogcube.info/
Success: Updated comment 20.

再度確認してみましょう。comment_author_urlが更新されました。

$ wp comment get 20 --field=comment_author_url
https://nullpopopo.blogcube.info/

 

■ コメント作成者のウェブサイトURLを削除する

コメント作成者のウェブサイトURLを削除します。ただし、まったくの空欄にすることはできないので、引数に「--comment_author_url='http://'」を与えます。

$ wp comment update 20 --comment_author_url='http://'
Success: Updated comment 20.

 

■ 投稿ID1にコメントする

wp-cliを使うと、コマンドラインからコメントをつけることができます。引数には最低限、「--comment_post_ID=<コメントをつける投稿IDの番号>」と「--comment_content=<コメント本文>」、そして「--comment_author=<コメント投稿者名>」をつけます。

$ wp comment create --comment_post_ID=1 \
--comment_content="
みなさまおはようございます。
本日もよい天気ですね。" \
--comment_author="(っ´∀`)っ ゃー"
Success: Created comment 21.

上記のコメント投稿はいきなり承認されるので、「--comment_approved=0」をつけることで承認を待つことができます。

$ wp comment create --comment_post_ID=1 \
--comment_approved=0 \
--comment_content="
みなさまおはようございます。
本日もよい天気ですね。" \
--comment_author="(っ´∀`)っ ゃー"
Success: Created comment 21.

 

■ 投稿ID1にコメントを100個生成する

これは半ば嫌がらせか自作自演ですが・・・同じコメントを100個生成したいときは、bashのforループでまわすこともできます。

$ for A in $(seq 1 100); do wp comment create --comment_post_ID=1 --comment_content="
みなさまおはようございます。
本日もよい天気ですね。" --comment_author="(っ´∀`)っ ゃー"; done

 

■ コメントをゴミ箱に入れる

コメントをゴミ箱に入れるには、「wp comment trash」または「wp comment delete」を使います。

$ wp comment trash 20
Success: Trashed comment 20.

または

$ wp comment delete 20
Success: Deleted comment 20.

 

■ コメントをゴミ箱から復活させる

コメントをゴミ箱から復活させるには「wp comment untrash」を使います。

$ wp comment untrash 20
Success: Untrashed comment 20.

 

■ コメントを恒久的に削除する

コメントをゴミ箱に入れず、恒久的に削除するには「wp comment delete <コメントID> --force」を使います。

$ wp comment delete 20 --force
Success: Deleted comment 20.

 

■ コメントのURLを取得する

コメントのURLを取得するには「wp comment url <コメントID>」を使います。

$ wp comment url 20
http://xxxxxxxx/?p=1#comment-20

 

■ コメントの文字列を置換する

コメント本文の文字列「コメント」を「米」に置換してみましょう。まずはコメントの本文を取得します。

$ wp comment get 20 --field=comment_content
これはコメントです。
コメントを削除するには、ログインして投稿編集画面でコメントを表示してください。編集または削除するオプションが用意されています。

それではいよいよ置換です。

$ wp search-replace 'コメント' '米' wp_comments
+-------------+----------------------+--------------+------+
| Table       | Column               | Replacements | Type |
+-------------+----------------------+--------------+------+
| 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      | 1            | SQL  |
| wp_comments | comment_approved     | 0            | SQL  |
| wp_comments | comment_agent        | 0            | SQL  |
| wp_comments | comment_type         | 0            | SQL  |
+-------------+----------------------+--------------+------+
Success: Made 1 replacements.

このように、置換結果が表示されました。それでは再度確認してみましょう。

$ wp comment get 20 --field=comment_content
これは米です。
米を削除するには、ログインして投稿編集画面で米を表示してください。編集または削除するオプションが用意されています。

 

■ コメントの文字列を検索してSPAMとしてマークする

まずは、ここではダミーのSPAMコメントを生成してみましょう。

$ wp comment create --comment_post_ID=1 \
--comment_content="
ロレックスのコピーです。
本物よりも精巧な作りですよ!" \
--comment_author="偽物商会" \
--path=/home/vhosts/wp-centos7/public_html/

$ wp comment create --comment_post_ID=1 \
--comment_content="
シャネルのコピーです。
本物よりも精巧な作りですよ!" \
--comment_author="偽物商会" \
--path=/home/vhosts/wp-centos7/public_html/

$ wp comment create --comment_post_ID=1 \
--comment_content="
ルイ・ヴィトンのコピーです。
本物よりも精巧な作りですよ!" \
--comment_author="偽物商会" \
--path=/home/vhosts/wp-centos7/public_html/

$ wp comment create --comment_post_ID=1 \
--comment_content="
プラダのコピーです。
本物よりも精巧な作りですよ!" \
--comment_author="偽物商会" \
--path=/home/vhosts/wp-centos7/public_html/

次に、mysqlコマンドで、コメント本文に「コピー」を含むものを検索してみます。

$ mysql -u <ユーザー名> -p<パスワード> <DB名> -e "select comment_ID,comment_post_ID,comment_content from wp_comments where comment_content like '%コピー%';"
+------------+-----------------+----------------------------------------------------------------------------------------+
| comment_ID | comment_post_ID | comment_content                                                                        |
+------------+-----------------+----------------------------------------------------------------------------------------+
|         21 |               1 | 
ロレックスのコピーです。
本物よりも精巧な作りですよ!                                 |
|         22 |               1 | 
シャネルのコピーです。
本物よりも精巧な作りですよ!                                   |
|         23 |               1 | 
ルイ・ヴィトンのコピーです。
本物よりも精巧な作りですよ!                             |
|         24 |               1 | 
プラダのコピーです。
本物よりも精巧な作りですよ!                                     |
+------------+-----------------+----------------------------------------------------------------------------------------+

少し見づらいので、罫線とカラムを表示せずに検索してみましょう。

$ mysql -u <ユーザー名> -p<パスワード> <DB名> -N -B -e "select comment_ID,comment_post_ID,comment_content from wp_comments where comment_content like '%コピー%';"
21	1	\nロレックスのコピーです。\n本物よりも精巧な作りですよ!
22	1	\nシャネルのコピーです。\n本物よりも精巧な作りですよ!
23	1	\nルイ・ヴィトンのコピーです。\n本物よりも精巧な作りですよ!
24	1	\nプラダのコピーです。\n本物よりも精巧な作りですよ!

wp comment list でも見てみましょう。

$ wp comment list
+------------+-----------------+-----------------+-----------------+----------------+-----------------+
| comment_ID | comment_post_ID | comment_date    | comment_approve | comment_author | comment_author_ |
|            |                 |                 | d               |                | email           |
+------------+-----------------+-----------------+-----------------+----------------+-----------------+
| 21         | 1               | 2015-01-10 14:5 | 1               | 偽物商会       |                 |
|            |                 | 7:48            |                 |                |                 |
| 22         | 1               | 2015-01-10 14:5 | 1               | 偽物商会       |                 |
|            |                 | 7:48            |                 |                |                 |
| 23         | 1               | 2015-01-10 14:5 | 1               | 偽物商会       |                 |
|            |                 | 7:48            |                 |                |                 |
| 24         | 1               | 2015-01-10 14:5 | 1               | 偽物商会       |                 |
|            |                 | 7:48            |                 |                |                 |
| 20         | 1               | 2015-01-03 21:0 | 1               | Mr WordPress   |                 |
|            |                 | 8:12            |                 |                |                 |
+------------+-----------------+-----------------+-----------------+----------------+-----------------+

以上の検索結果からコメント本文に「コピー」を含むものすべてをSPAMとしてマークします。

$ for A in $(mysql -u <ユーザー名> -p<パスワード> <DB名> -N -B -e "select comment_ID from wp_comments where comment_content like '%コピー%';"); do wp comment spam $A; done
Success: Marked as SPAM comment 21.
Success: Marked as SPAM comment 22.
Success: Marked as SPAM comment 23.
Success: Marked as SPAM comment 24.

再度wp comment listで確認します。

$ wp comment list
+------------+-----------------+-----------------+-----------------+----------------+-----------------+
| comment_ID | comment_post_ID | comment_date    | comment_approve | comment_author | comment_author_ |
|            |                 |                 | d               |                | email           |
+------------+-----------------+-----------------+-----------------+----------------+-----------------+
| 20         | 1               | 2015-01-03 21:0 | 1               | Mr WordPress   |                 |
|            |                 | 8:12            |                 |                |                 |
+------------+-----------------+-----------------+-----------------+----------------+-----------------+

SPAMとマークされたコメントはwp comment listで見ることができないようなので、SPAMとマークされたコメントだけをSQL文を直接表示してみましょう。フィールドは左から「コメントID」「コメントがついた投稿ID」「コメント承認状態」「コメント本文」です。コメント承認状態が「spam」になっているので、しっかりとspamとしてマークされています。

$ mysql -u <ユーザー名> -p<パスワード> <DB名> -N -B -e "select comment_ID,comment_post_ID,comment_approved,comment_content from wp_comments where comment_approved like 'spam';"
21	1	spam	\nロレックスのコピーです。\n本物よりも精巧な作りですよ!
22	1	spam	\nシャネルのコピーです。\n本物よりも精巧な作りですよ!
23	1	spam	\nルイ・ヴィトンのコピーです。\n本物よりも精巧な作りですよ!
24	1	spam	\nプラダのコピーです。\n本物よりも精巧な作りですよ!

いかがでしたでしょうか?黒い画面おっかない!と思われるかも知れませんが、ブラウザでチマチマSPAM退治するよりはるかに効率的かと思います。でわ〜♪

[amazonjs asin="4844337092" locale="JP" title="いちばんやさしいWordPressの教本 人気講師が教える本格Webサイトの作り方 第2版 WordPress 4.x対応 (「いちばんやさしい教本」シリーズ)"]