如何从表格中选择特定月份的帖子,并使用MySQL更新帖子状态?

时间:2014-12-10 作者:John Peter

我想通过MySQL命令使用SSH更改特定月份的post状态。。。谁能告诉我如何通过SSH实现这一点吗。我有超过40000篇帖子,每个月大约有2000/3000篇帖子,所以在进行批量更新之前,我必须小心使用SSH-MySql命令。

提前谢谢。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

使用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.

结束

相关推荐

Order posts by condition

我需要得到15个帖子。如果有带标签的featured, 我希望他们是第一个。如果没有,我希望其余的是随机帖子。我的想法是根据条件对帖子进行排序tag=featured 描述和随机。我可以用query_posts()?我的失败尝试:query_posts(\'posts_per_page=15&orderby=((tag=featured),rand)&order=desc\'; 谢谢你。