【问题标题】:WordPress - Displaying most read posts in the last weekWordPress - 显示上周阅读次数最多的帖子
【发布时间】:2016-08-09 12:22:03
【问题描述】:

如何显示上周阅读最多的帖子?

我有以下代码来记录帖子的每一次点击,所以我会知道有多少人阅读了帖子。

    function getPostViews($postID){
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return "0 View";
    }
    return $count.' Views';
}

function setPostViews($postID) {
    $count_key = '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);
    }
}


// Remove issues with prefetching adding extra views
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
/**
 * Add a new column in the wp-admin posts list
 *
 * @param $defaults
 *
 * @return mixed
 */

function subh_posts_column_views( $defaults ) {
    $defaults['post_views'] = __( 'Views' );
    return $defaults;
}

/**
 * Display the number of views for each posts
 *
 * @param $column_name
 * @param $id
 *
 * @return void simply echo out the number of views
 */

function subh_posts_custom_column_views( $column_name, $id ) {
    if ( $column_name === 'post_views' ) {
       echo getPostViews( get_the_ID() );
    }
}

add_filter( 'manage_posts_columns', 'subh_posts_column_views' );
add_action( 'manage_posts_custom_column', 'subh_posts_custom_column_views', 5, 2 );

如何设置以下内容以显示上周阅读次数最多的帖子?

    $options = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => $limit,
        'ignore_sticky_posts' => true,
        /* 'orderby' => 'meta_value_num', */
        'orderby' => 'rand',
        'order' => 'desc',
        'meta_key' => 'post_views_count'
    );

【问题讨论】:

    标签: php wordpress time count posts


    【解决方案1】:

    您可以为 wp_postmeta 表中的每个帖子添加一个 'last_view_date' 元数据,稍微更改您的 2 个第一个函数,并创建一个条件函数对于上周(过去 7 天)阅读过的帖子返回 true。

    这是我为您定制的第一个功能:

    function getPostViews($postID){
        $count_key = 'post_views_count';
        $date_key = 'last_view_date';
        $today_date = date("Y-m-d");
        $count = get_post_meta($postID, $count_key, true);
        if($count==''){
            // Note: update_post_meta() create the data if not exist
            update_post_meta($postID, $count_key, '0');
    
            // Setting the "view date" for the first time
            update_post_meta($postID, $date_key, $today_date);
    
            return '0 View';
        }
        return $count.' Views';
    }
    
    function setPostViews($postID) {
        $count_key = 'post_views_count';
        $date_key = 'last_view_date';
        $today_date = date("Y-m-d");
        $count = get_post_meta($postID, $count_key, true);
        if($count==''){
            $count = 0;
            // Note: update_post_meta() create the data if not exist
            update_post_meta($postID, $count_key, '0');
    
            // Setting the "view date" for the first time
            update_post_meta($postID, $date_key, $today_date);
    
        }else{
            $count++;
            update_post_meta($postID, $count_key, $count);
    
            // Updating the "view date"
            update_post_meta($postID, $date_key, $today_date);
        }
    }
    

    这是条件函数代码,用于过滤上周查看的帖子:

    // Conditional function that return true, whem a post have been read at least once in last week.
    function is_week_viewed($postID) {
        $now = time();
        $date_key = 'last_view_date';
        $view_date = get_post_meta($postID, $date_key, true);
        $viewdate = strtotime( $view_date );
        $datediff = $now - $viewdate;
        $days = floor($datediff/(60*60*24));
        $count = get_post_meta($postID, $count_key, true);
        if ( $count > '0' && $days < 8) {
            return true;
        }
    }
    

    使用该材料,您可以设法为您的搜索查询显示上周阅读次数最多的帖子……

    然后使用 is_week_viewed() 条件函数,您现在可以过滤搜索结果以仅获取上周的帖子。

    参考 - 条件函数基于这个旧线程:
    Finding the number of days between two dates

    【讨论】:

    • 非常感谢我!效果很好!在我将其标记为已回答之前,我想在现场网站上检查一些内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多