使用wp_cron安排每天更新一次帖子

时间:2013-09-03 作者:Eckstein

我有一个挂钩到save\\u post的函数,它根据今天的日期更改自定义分类术语的值。这很好用。当我更新帖子时,分类术语会正确更新。

但我希望每天自动更新一次,而不必自己手动更新帖子。我阅读了wp\\u cron并创建了下面的代码,这基本上是一种尝试,每天查询一组特定的帖子,然后通过wp\\u update\\u post()简单地运行它们,这将触发上面提到的更改分类法术语值的函数。

但它似乎不起作用。此外,我真的不知道如何测试wp\\u cron,而不只是等待一天,看看会发生什么。我安装了一个控制台,这样我就可以看到即将到来的预定事件,下面的事件是明确安排的,似乎没有任何效果。

有谁能就我可能出了什么问题提供一些建议吗?

    //Schedule active events to update_post every day
    if( !wp_next_scheduled( \'event_status_refresh\' ) ) {  
       wp_schedule_event( time(), \'daily\', \'event_status_refresh\' );  
    }  
//When the event fires, we call the function to update the posts
    add_action( \'event_status_refresh\', \'update_event_status\' ); 

//The function to update the posts
function update_event_status() {
    global $post;

    $active = array( 
    \'post_type\'=>\'event\',
    \'posts_per_page\'=>\'-1\',
    \'tax_query\'=>array(
        array(
            \'taxonomy\'=>\'event_status\',
            \'field\'=>\'slug\',
            \'terms\'=>array(
                \'playing_now\',
                \'opening_soon\'
            )
        )
    ),
);
$query   = new WP_Query($active);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();

            $update = array(
            \'ID\' => get_the_ID(),
            );

            // Update the post into the database
            wp_update_post( $update );
    }
}
wp_reset_postdata();

}

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

这是一个典型的X-Y problem. 你的克朗很好。你的逻辑并非如此。

您有一个钩住save_posts 你认为通过阵列$update = array( \'ID\' => get_the_ID() ) 将触发该操作,因此您的帖子将更新分类法。不幸的是,这是错误的。

将此类型的数组(仅ID字段)传递给wp_update_post 将只识别帖子,它没有数据可保存在数组中的其他位置。所以它不会更新任何内容,也不会触发任何save_post 行动。

所以你的cronis 每天跑步,但什么也不做。

解决方案:

钩住save_post 可能会接受post\\u id作为param,并在需要时更新post,对吧。所以,与其跑wp_update_post 让它更新帖子,自己调用你的函数。

while ($query->have_posts()) {
  $query->the_post();
  $toupdate = get_the_ID();

  your_function_that_hook_into_save_post( $toupdate );

}

结束

相关推荐

wp-cron: freeze at "now"

抱歉问了这么愚蠢的问题。简单地说,我有一个wp(3.5.1版)博客,使用了一个经过大量修改的(我自己)主题。除了wp cron之外,其他一切都正常工作。列出的作业出现在(例如)crontrol中,时间流逝直到“现在”(这意味着作业应该开始)。无论如何,什么都没有发生:计划的后期冻结在“现在”,我的自定义函数冻结在“现在”,等等。如果我手动运行它,一切都正常(因此没有代码问题)。我尝试禁用wp cron(使用define(\'DISABLE_WP_CRON\', true); 并设置一个自定义wp cron