1

非常感谢以下信息: 不使用插件的 Wordpress 热门帖子,这极大地帮助我为我的 WordPress 网站整理了自己的热门帖子页面模板。但是,我认为我需要更改代码以使其表现更好,但不知道该怎么做。

新页面位于http://sassyginger.com/most-popular-posts。它显示了两个帖子(当它应该显示五个时),然后将它们都与“零视图”相关联,我知道这是不对的。

我对 PHP 很陌生,所以如果任何人都可以在如何调整Wordpress 热门帖子而不使用插件代码来显示五个帖子并去掉不正确的 0 视图位,我将不胜感激。

谢谢!

4

1 回答 1

1

默认情况下,Wordpress 不跟踪帖子的视图,因此如果您不想使用插件,则需要为所有帖子创建一个自定义字段,其中包含视图。然后编写一个函数,该函数采用该值并将某人加载该页面的所有内容添加一个。(假设你把函数放在你的functions.php中)并从你的单一模板中调用它并发送postid。

函数可能看起来像这样:

function addPostView($postID) {
$views = 'post_views'; // post_views is the custom field name
$count = get_post_meta($postID, $views, true); // grab the value from that custom field

// Now we need to check that the value we just grabbed isn't blank, if it is we need to set it to 1, since it would be our first view on this post.
if($count==''){
    $count = 0;
    update_post_meta($postID, $views, '1');
}else{
    // else we can just add one to the number.
    $count++;
    update_post_meta($postID, $views, $count);
}
}

在我们的单模板中,我们会在某处调用该函数,例如:

addPostView(get_the_ID());

然后问题二,你不能用操作符查询帖子,所以你不能只查询浏览量最高的五个帖子,所以你可能必须查询所有帖子,将视图自定义字段和帖子 ID 存储在一个数组中,然后对数组进行排序(使用 php 的排序函数)。现在你得到了每个帖子的 ID,并且在一个数组中发布了视图。因此,取前五个(或最后一个,取决于您的排序方式),您将获得查看次数最多的五个 postID。

//ordinary wp_query
$i = 0; // keeping track of our array
//while(post-> etc....
    global $post;
    $views = get_post_meta($post->ID, 'post_views', true); // Grab our value
    /* You could also use an object here */
    $postArray[$i][0] = $views; // set it in slot $i of our array
    $postArray[$i][1] = $post->ID; // and also set the postID in the same slot

    $i++;
//endwhile;

对数组进行排序:

 rsort($postArray);
 $postArray = array_slice( $postArray, 0, 5 ); // grab only the first 5 values, which will be the ones with highest views.

现在您需要进行第二次查询,您只需查询这些 ID(使用 'post__in' 选择器,然后您可以根据需要将它们循环出来。

请注意我没有尝试过这段代码,但我过去做过类似的事情。这可能不是最好的解决方案,但它会完成工作。查询所有帖子(如果你有很多帖子),只获取五个左右的帖子,这不是一个好习惯:)

于 2012-06-26T08:57:30.693 回答