[wp-cli]WordPressの投稿を削除する(リストアもするよ!)


前回は、wp-cliを使って投稿記事と固定ページを確認しました。今度は投稿記事と固定ページをコマンドラインから削除してみましょう。なお、サンプルで使用しているサイトは、いつでも簡単にロールバックできるよう、コンテンツのファイルとsqlをバックアップしています。こちらのコードは本ページの最後に貼り付けておきますね。

■ 投稿記事と固定ページの削除

まずは事前にバックアップスクリプト(/root/bin/BACKUP)でコンテンツとSQLをバックアップしておきます。バックアップ先は/root/backupとしておきます。

# bin/BACKUP
# ll backup/ | grep 11-41
-rw-r--r-- 1 root root 6624557  1月  4 11:41 <ホスト名>_CONTENTS_2015-01-04_11-41-36.tar.gz
-rw-r--r-- 1 root root   59450  1月  4 11:41 wpdb0001_2015-01-04_11-41-36.sql.gz

前回にならって投稿記事と固定ページがあることを確認します。

# wp --allow-root post list --path=/home/vhosts/$(uname -n)/public_html/
+----+------------+-------------+---------------------+-------------+
| ID | post_title | post_name   | post_date           | post_status |
+----+------------+-------------+---------------------+-------------+
| 1  | (っ´∀`)っ ゃー | hello-world | 2015-01-03 21:08:12 | publish     |
+----+------------+-------------+---------------------+-------------+
# wp --allow-root post list --post_type=page --path=/home/vhosts/$(uname -n)/public_html/
+----+------------+-------------+---------------------+-------------+
| ID | post_title | post_name   | post_date           | post_status |
+----+------------+-------------+---------------------+-------------+
| 2  | サンプルページ | sample-page | 2015-01-03 21:08:12 | publish     |
+----+------------+-------------+---------------------+-------------+

WordPressがインストールされた直後は、投稿記事のIDが1、固定ページのIDが2として最初から作成されています。なので、投稿IDを指定して削除します。

# wp --allow-root post delete 1 --path=/home/vhosts/$(uname -n)/public_html/
Success: Trashed post 1.
# wp --allow-root post delete 2 --path=/home/vhosts/$(uname -n)/public_html/
Success: Trashed post 2.

それではもう一度、投稿記事と固定ページの一覧を確認してみましょう。

# wp --allow-root post list --path=/home/vhosts/$(uname -n)/public_html/
+----+------------+-----------+-----------+-------------+
| ID | post_title | post_name | post_date | post_status |
+----+------------+-----------+-----------+-------------+
+----+------------+-----------+-----------+-------------+
# wp --allow-root post list --post_type=page --path=/home/vhosts/$(uname -n)/public_html/
+----+------------+-----------+-----------+-------------+
| ID | post_title | post_name | post_date | post_status |
+----+------------+-----------+-----------+-------------+
+----+------------+-----------+-----------+-------------+

見事に空っぽになりました。ブラウザから見てみるとこうなります。

wp_post_delete

 

なお、上記の削除方法ですと、投稿記事や固定ページは永久に削除されるわけではなく、ゴミ箱に入ることになります。ゴミ箱に入れず、永久に削除したい場合は、コマンドの引数に「--force」をつけて実行します。

■ バックアップスクリプトのソースとリストア作業

バックアップスクリプトは単純な作りです。一撃インストールでMySQLのユーザー名とパスワードをファイルに保存してあるので、これを利用するようにしています。

# cat bin/BACKUP 
#!/bin/bash
set -e
LANG=C
MUSER=$(cat .mysql/MySQLPARAM | grep ^user | awk '{print $2}')
MPASS=$(cat .mysql/MySQLPARAM | grep ^user | awk '{print $3}')
DB=wpdb0001
DROOT=/home/vhosts/$(uname -n)/public_html/
DATE=$(date +%Y-%m-%d_%H-%M-%S)
mysqldump -u ${MUSER} -p${MPASS} ${DB} > ~/backup/${DB}_${DATE}.sql
gzip ~/backup/${DB}_${DATE}.sql
cd ${DROOT}
tar czf ~/backup/$(uname -n)_CONTENTS_${DATE}.tar.gz *

それでは、ブログをリストアしましょう。ここまで壊滅的に壊してしまったので、一旦DBを削除してから作りなおします。なお、画像やスタイルシートなどのファイルは一切削除していないので、DBだけ戻すことにします。

# mysql -u $(cat .mysql/MySQLPARAM | grep ^user | awk '{print $2}') -p$(cat .mysql/MySQLPARAM | grep ^user | awk '{print $3}') -e "drop database wpdb0001;"
# mysql -u $(cat .mysql/MySQLPARAM | grep ^user | awk '{print $2}') -p$(cat .mysql/MySQLPARAM | grep ^user | awk '{print $3}') -e "create database wpdb0001 DEFAULT CHARACTER SET utf8;"
# gunzip backup/wpdb0001_2015-01-04_11-41-36.sql.gz
# mysql -u $(cat .mysql/MySQLPARAM | grep ^user | awk '{print $2}') -p$(cat .mysql/MySQLPARAM | grep ^user | awk '{print $3}') wpdb0001 < backup/wpdb0001_2015-01-04_11-41-36.sql

それでは復活したかブラウザから確認してみましょう。

NULLPOPOPO_WP_2014010400

いいですねー。もちろん、コマンドラインでも確認してみましょう。

# wp --allow-root post list --path=/home/vhosts/$(uname -n)/public_html/
+----+------------+-------------+---------------------+-------------+
| ID | post_title | post_name   | post_date           | post_status |
+----+------------+-------------+---------------------+-------------+
| 1  | (っ´∀`)っ ゃー | hello-world | 2015-01-03 21:08:12 | publish     |
+----+------------+-------------+---------------------+-------------+
# wp --allow-root post list --post_type=page --path=/home/vhosts/$(uname -n)/public_html/
+----+------------+-------------+---------------------+-------------+
| ID | post_title | post_name   | post_date           | post_status |
+----+------------+-------------+---------------------+-------------+
| 2  | サンプルページ | sample-page | 2015-01-03 21:08:12 | publish     |
+----+------------+-------------+---------------------+-------------+

バックアップは大事ですねえ。次回は、あらかじめエクスポートしておいたxmlファイルからインポートしてリストアしてみることにします。でわ〜♪