在 Wordpress 中一段时间​​后重置 post 元

Reset post meta after time in Wordpress

所以我的 Wordpress 网站有这个功能,它基本上只计算每次点击并循环显示最受欢迎的点击。 我的问题是元字段不会在一段时间后重置或减少。所以它会显示旧帖子而不是新帖子。我对 PHP 了解不多,所以如果有人能帮助我,我将不胜感激!

这是我当前的 PHP 功能:

function shapeSpace_popular_posts($post_id) {
    $count_key = 'popular_posts';
    $count = get_post_meta($post_id, $count_key, true);
    if ($count == '') {
        $count = 0;
        delete_post_meta($post_id, $count_key);
        add_post_meta($post_id, $count_key, '0');
    } else {
        $count++;
        update_post_meta($post_id, $count_key, $count);
    }
}

add_action('wp_ajax_track_clicks', 'track_clicks');
add_action('wp_ajax_nopriv_track_clicks', 'track_clicks');

function track_clicks(){
    $post_id = $_POST['post_id'];
    shapeSpace_popular_posts($post_id);
    echo 'Success';
    wp_die();
}

使用 wp_schedule_event() 函数 运行 将所有 post 元数据设置为 0 的函数:

https://codex.wordpress.org/Function_Reference/wp_schedule_event

并添加自定义重复间隔:

function add_cron_recurrence_interval( $schedules ) {
$schedules['every_three_minutes'] = array(
    'interval'  => 180,
    'display'   => __( 'Every 3 Minutes', 'textdomain' )
    );    
    return $schedules;
}
add_filter( 'cron_schedules', 'add_cron_recurrence_interval' );

要删除所有 post 元数据,请使用 <?php delete_post_meta_by_key( 'popular_posts' ); ?>

https://codex.wordpress.org/Function_Reference/delete_post_meta

此外,我建议您进行消毒

$_POST['post_id'] 

intval($_POST['post_id'])

https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data