В настоящее время я использую этот код для отображения наиболее популярного сообщения, отсортированного по количеству просмотров, которое до сих пор работало хорошо:
/**
* 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' );
Любая помощь будет высоко ценится!
Я думаю, что проблема может быть связана с тем, как вы используете 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
Надеюсь это поможет. Ваш код действительно близок, я думаю.
Других решений пока нет …