使用WP CLI!
首先获取您想要的帖子,我们将使用wp post list 命令,我们需要在服务器上的WordPress目录中运行该命令。在这里,我抓取了2014年10月我博客上的所有帖子:
wp post list --year=2014 --monthnum=10
这给了我(哦,不,我的秘密草稿帖子):
+-----+-------------------------------+-------------------------------+---------------------+-------------+
| ID | post_title | post_name | post_date | post_status |
+-----+-------------------------------+-------------------------------+---------------------+-------------+
| 534 | In Defence of WordPress | defence-of-wordpress | 2014-10-23 23:23:37 | draft |
| 588 | WordCamp Europe Vs PHPNW 2014 | wordcamp-europe-vs-phpnw-2014 | 2014-10-09 14:46:32 | draft |
+-----+-------------------------------+-------------------------------+---------------------+-------------+
但我们需要一些易于解析的内容,所以让我们将其输出为csv:
wp post list --year=2014 --monthnum=10 --format=csv
我使用了csv格式,以便对其进行解析,这给了我:
ID,post_title,post_name,post_date,post_status
534,"In Defence of WordPress",defence-of-wordpress,"2014-10-23 23:23:37",draft
588,"WordCamp Europe Vs PHPNW 2014",wordcamp-europe-vs-phpnw-2014,"2014-10-09 14:46:32",draft
不过,我们只需要ID,所以让我们将命令更改为:
wp post list --year=2014 --monthnum=10 --format=csv --fields=ID
给我们:
ID
534
588
我们现在有了一些可以在shell脚本中循环的东西!您可以运行shell脚本,而不是执行sql查询。
updateposts.sh
然后执行它
cd /my/path/to/wordpress/
posts=$(wp post list --year=2014 --monthnum=10 --format=csv --fields=ID);
for post in $posts; do
(
if [[ "$post" == "ID" ]]; then
echo "skipping header column"
else
# update the post status
fi
)
done
要更新post状态,我们可以使用
wp post update 命令E、 g.:
wp post update 123 --post_status=draft
综上所述,我们得到:
cd /my/path/to/wordpress/
posts=$(wp post list --year=2014 --monthnum=10 --format=csv --fields=ID);
for post in $posts; do
(
if [[ "$post" == "ID" ]]; then
echo "skipping header column"
else
wp post update $post --post_status=publish
fi
)
done
现在,如果我运行它,2014年10月我博客上的所有内容都将成为一篇已发布的帖子。当然,您需要调整日期及其设置的post状态。您可能还想进一步限制它获取的帖子。如果是,请查看以下查询参数:
WP_Query
, 它们与
wp post list
.