如何将计划事件设置为每周或每月修改所有帖子的元值?

时间:2014-06-15 作者:moyu

到目前为止,我已经添加了一些函数来设置post meta中的post视图计数。但我想要更多:post\\u views\\u count\\u all:这是一个post meta并保存所有post视图;post\\u views\\u count\\u weekly:这是一个post meta,每周保存post views,然后清除为0;post\\u views\\u count\\u monthly:同上,但每月清理为0。

以下是我目前的代码:

function twenty_set_post_views($content) {
$count_key = \'post_views_count\';
$key_array = array(
    \'all\',
    \'monthly\',
    \'weekly\',
    \'daily\'
);
if(is_single()) {
    global $post;
    $postID = $post->ID;
    foreach ($key_array as $key) {
        $count_key_t = $count_key . \'_\' . $key;

        $count = get_post_meta($postID, $count_key_t, true);
        if($count == \'\') {
            $count = 0;
            delete_post_meta($postID, $count_key_t);
            add_post_meta($postID, $count_key_t, \'0\');
        }else{
            $count++;
            update_post_meta($postID, $count_key_t, $count);
        }

    }
}
}
add_action( \'the_content\', \'twenty_set_post_views\' );
上周,我会使用帖子浏览量统计来列出热门帖子。那么,如何将每周或每月清理post\\u views\\u count\\u和每月清理post\\u views\\u count\\u的计划事件设置为0?

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

wp_schedule_event() 就是你要找的。使用此函数,您可以创建一个cron jon,Wordpress将在您配置的特定时间间隔内执行该操作。此函数应仅在插件激活时调用,并且应在插件停用时清除计划事件。例如:

 //Create the weekly and monthly interval
 add_filter(\'cron_schedules\', \'cyb_cron_schedules\');
 function cyb_cron_schedules( $schedules ) {
     $schedules[\'weekly\'] = array(
        \'interval\' => 604800, //that\'s how many seconds in a week, for the unix timestamp
         \'display\' => __(\'weekly\')
     );
     $schedules[\'monthly\'] = array(
        \'interval\' => 2592000, //that\'s how many seconds in a month (30 days), for the unix timestamp
         \'display\' => __(\'monthly\')
     );
     return $schedules;
 }

 register_activation_hook( __FILE__, \'cyb_activation\' );
 function cyb_activation() {
      //Unix timestamp for first run of the event. time() for now
      $firstrun = time();
      wp_schedule_event( $firstrun, \'weekly\', \'cyb_clear_weekly_post_views\' );
      wp_schedule_event( $firstrun, \'monthly\', \'cyb_clear_monthly_post_views\' );
 }

 register_deactivation_hook( __FILE__, \'cyb_deactivation\' );
 function cyb_activation() {
      wp_clear_scheduled_hook( \'cyb_clear_weekly_post_views\' );
      wp_clear_scheduled_hook( \'cyb_clear_monthly_post_views\' );
 }

 function cyb_clear_weekly_post_views() {
      //Set post_views_count_weekly to 0. Doing this for all post may need a lot of resources
      $posts = get_posts(array(\'numberposts\' => -1) );
      foreach($posts as $post) {
           update_post_meta($post->ID, \'post_views_count_weekly\', 0);
      }
 }

 function cyb_clear_monthly_post_views() {
      //Set post_views_count_monthly to 0. Doing this for all post may need a lot of resources
      $posts = get_posts(array(\'numberposts\' => -1) );
      foreach($posts as $post) {
           update_post_meta($post->ID, \'post_views_count_monthly\', 0);
      }
 }
注意:如果需要以精确的间隔运行计划的事件,则应在服务器中创建cron jon,而不是使用wp_schedule_event(). 中的更多信息wp_schedule_event().

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在