日々大量のコメント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対応 (「いちばんやさしい教本」シリーズ)"]