如何根据人气过滤主页帖子?

时间:2018-06-24 作者:Ayu

我希望我的WordPress主页按人气显示帖子。就像它自动将大多数访问者访问过的帖子带到顶部一样,按升序排列。任何帮助都将不胜感激。

2 个回复
SO网友:Dharmishtha Patel

我们需要做的第一件事是创建一个函数来检测帖子视图计数,并将其存储为每个帖子的自定义字段。为此,请在主题的函数中粘贴以下代码。php文件

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);
现在您已经有了这个函数,我们需要在单个贴子页面上调用这个函数。这样,函数就可以准确地知道哪个帖子获得了视图的信任。为此,您需要在单个post循环中粘贴以下代码:

wpb_set_post_views(get_the_ID());
如果您使用的是子主题,或者您只是想让事情变得简单,那么您只需使用wp\\u head hook在标题中添加跟踪器。因此,请在主题函数中粘贴以下代码。php文件

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\');
一旦您放置了此项,每次用户访问帖子时,自定义字段都会更新。

注意:如果您使用的是缓存插件,默认情况下此技术将不起作用。我们使用的是W3 Total Cache,它具有称为碎片缓存的功能。你可以用它来完成这项工作。以下是需要更改的内容:

<!-- mfunc wpb_set_post_views($post_id); --><!-- /mfunc -->
现在,您可以做各种很酷的事情,比如显示帖子视图计数,或者按视图计数对帖子进行排序。让我们看看如何做这些很酷的事情。

如果要在单个帖子页面上显示帖子视图计数(通常在评论计数或其他内容旁边)。然后,您需要做的第一件事是在主题的函数中添加以下内容。php文件

function wpb_get_post_views($postID){
    $count_key = \'wpb_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\';
}
然后在post循环中添加以下代码:

wpb_get_post_views(get_the_ID());
如果要按视图计数对帖子进行排序,那么可以通过使用wp\\u query post\\u元参数轻松地进行排序。最基本的循环查询示例如下所示:

<?php 
$popularpost = new WP_Query( array( \'posts_per_page\' => 4, \'meta_key\' => \'wpb_post_views_count\', \'orderby\' => \'meta_value_num\', \'order\' => \'DESC\'  ) );
while ( $popularpost->have_posts() ) : $popularpost->the_post();

the_title();

endwhile;
?>

SO网友:dhirenpatel22

为了得到受欢迎的帖子,必须有一定的参数来决定帖子的受欢迎程度。可以知道帖子受欢迎程度的一些参数是帖子喜欢度、帖子浏览量和评论数量。

根据我的说法”Post Views“这似乎是决定这篇文章受欢迎程度的合适参数。

步骤1:创建一个自定义帖子元来存储帖子视图。在中添加以下代码functions.php 添加其他post meta字段"post_views_count".

<?php
// function to display number of posts.
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 to 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);
    }
}
?>
步骤2:现在我们需要在用户每次访问单个页面的帖子时存储视图。在中添加以下代码single.php 文件来统计用户每次访问post单个页面时的post视图数。

<?php setPostViews(get_the_ID()); ?>
此外,使用以下代码在single.php 页面,以便我们可以检查列表页面上帖子的排序顺序是否与该特定帖子的帖子视图一致。

<?php echo getPostViews(get_the_ID()); ?>
现在随机访问几个帖子页面,检查帖子浏览量的值。如果每次刷新页面时,帖子浏览量都会增加,那么它工作正常。

现在我们可以使用post meta的值"post_views_count" 计算该帖子的受欢迎程度。帖子浏览量越高,意味着帖子越受欢迎。因此,请更改默认WordPress博客页面模板中帖子的排序顺序(home.php) 通过在functions.php 文件

<?php
// Function to change order of Post
function wpdocs_five_posts_on_homepage( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'orderby\', \'meta_value\' );
        $query->set(\'meta_key\', \'post_views_count\');
        $query->set( \'order\', \'DESC\' );
    }
}
add_action( \'pre_get_posts\', \'wpdocs_five_posts_on_homepage\' );
?>

结束