30天后帖子自动过期的代码

时间:2013-04-24 作者:Punct Ulica

我尝试了Wordpress插件部分提供的插件,但它们似乎失败得很惨。最初,我使用了按用户角色自动发布过期信息,这在一段时间内有效,但由于某些原因,现在没有。

我想在函数中添加一个代码。php,将自动设置为比发布日期早30天的草稿帖子。

我有以下代码,但不知道这是否是我应该使用的代码。这是否正确?如果不正确,正确的形式是什么?

function expire_posts() {
global $wpdb;
$daystogo = "30";
$sql = "UPDATE wp_posts SET `post_status` = \'draft\' WHERE `post_type` = \'post\' AND DATEDIFF(NOW(), `post_date`) > \'$daystogo\')";
}

add_action(\'wp_head\', \'expire_posts\');

2 个回复
SO网友:Ralf912

您的查询存在一些问题

$daystogo = "30";

$sql =
"UPDATE {$wpdb->posts}
SET post_status = \'draft\'
WHERE (post_type = \'post\' AND post_status = \'publish\')
AND DATEDIFF(NOW(), post_date) > %d";

$wpdb->query( $wpdb->prepare( $sql, $daystogo ) );
您不想通过将垃圾帖子声明为草稿来取消垃圾帖子,对吗?而且您确实不想让每个自动保存的版本(post\\u status=inherit)都成为草稿。因此,只选择已发布的帖子。

使用$wpdb-prepare() 对于EVERY 查询

(编辑:每个具有变量输入的查询,也就是说。不要使用prepare for没有变量输入的完全静态查询。)

使用WPDB 类变量而不是普通表名$wpdb->posts 而不是wp_posts. 请参见Codex.

在编写查询代码之前,首先测试查询。使用类似MySQL frontendMySQL-Admin. 在sql查询中,有一个) 在没有人应该去的地方。

SO网友:RRikesh

您刚刚声明了查询,但没有执行它!

function expire_posts() {
  global $wpdb;
  $daystogo = "30";
  $sql = "UPDATE wp_posts SET `post_status` = \'draft\' WHERE `post_type` = \'post\' AND DATEDIFF(NOW(), `post_date`) > \'$daystogo\')";
  $wpdb->query( $sql );
}
别忘了永远prepare your queries.

使用wp_cron() 定期(如一天一次)运行代码。挂接到时wp_head, 每次用户访问页面时,查询都将运行。

结束