Сброс количества постов каждый час

В настоящее время я использую этот код для отображения наиболее популярного сообщения, отсортированного по количеству просмотров, которое до сих пор работало хорошо:

 /**
*   Count visits to post.
*/

function wpb_set_post_views($postID) {
$count_key = 'wpb_post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}

}
//To keep the count accurate, lets get rid of prefetching
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

/**
*   Single post count code
*/

function wpb_track_post_views ($post_id) {
if ( !is_single() ) return;
if ( empty ( $post_id) ) {
global $post;
$post_id = $post->ID;
}
wpb_set_post_views($post_id);
}
add_action( 'wp_head', 'wpb_track_post_views');

Я хотел бы сбросить количество просмотров на 0 на почасовой основе, но я не слишком уверен, как это сделать. Я попробовал использовать приведенный ниже код, но пока мне не повезло. Это правильное направление?

/**
* Reset the post views on hourly basis.
*/if ( ! wp_next_scheduled( 'daily_cron_action' ) ) {
wp_schedule_event( time(), 'hourly', 'daily_cron_action' );
}function reset_postview_counters() {
$count_key = 'wpb_post_views_count';
$args      = array(
'numberposts'      => -1,
'meta_key'         => $count_key,
'post_type'        => 'event',
'suppress_filters' => true
);

$postslist = get_posts( $args );
foreach ( $postslist as $singlepost ) {
delete_post_meta( $singlepost->ID, $count_key );
}
}
add_action( 'daily_cron_action', 'reset_postview_counters' );

Любая помощь будет высоко ценится!

1

Решение

Я думаю, что проблема может быть связана с тем, как вы используете get_posts()

Вы проходите в meta_key, но не давая ему значение для проверки с meta_value,

Попробуйте просто удалить meta_key линия от ваших аргументов.

meta_key следует использовать как:

$args = array(
'numberposts'      => -1,
'meta_key'         => 'color',
'meta_value'       => 'red',
'post_type'        => 'event',
'suppress_filters' => true
);

Это захватило бы все сообщения с color поле postmeta, где значение red

Надеюсь это поможет. Ваш код действительно близок, я думаю.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector