按帖子显示作者的总帖子浏览量POST_META

时间:2015-04-30 作者:pippo083

我在过去的3个小时里一直在网上搜索,但没有成功。

我有一个网站,作者可以在那里发布帖子,帖子视图可以使用Posteta“post\\u views\\u count”进行跟踪。

我正在使用此代码和作品,但只显示前5篇文章的数量,而不是所有作者的文章。这是密码?

global $wp_query;

$author_id = get_current_user_id();

$author_posts = get_posts( array(\'author\' => $author_id) );

$counter = 0; // needed to collect the total sum of views

foreach ( $author_posts as $post ) {

    $views = absint( get_post_meta( $post->ID, \'post_views_count\', true ) );

    var_dump($views);

    $counter += $views;
}
echo "{$counter}";
怎么了?为什么只显示5个帖子的数量?非常感谢

2 个回复
SO网友:Tom J Nowell

它显示了前5篇文章,因为这是第1页上的文章数量,而您从未告诉它每页要加载多少篇文章,所以它使用了您在“设置”下设置的默认每页文章。

您需要修改get_posts 致电posts_per_page 参数

然而,我将注意到以下问题:

  • get_posts 不缓存方式WP_Query 是否,切换到直接使用WP_Query 将视图计数存储在post meta中的效率非常低,并且会降低页面加载速度。您的统计数据不可靠,因为现在每当有多个人访问一个页面时,您都会遇到竞争条件,这可能会导致缩小值(您的页面视图更新不是原子操作)
  • 无法缓存您的页面,任何试图缓存页面的行为都会破坏你的统计数据,而不是echo "{$counter}"; 你应该使用echo $counter;global $wp_query;
SO网友:ahmet

多亏了汤姆·诺威尔的回答,我才明白了这一点。

以下是缺失的部分:

$author_posts = get_posts( array(\'author\' => $author_id, \'numberposts\' => -1 ));
试试这个

<?php
      global $wp_query;

      $author_id = $wp_query->queried_object_id;
      $author_posts = get_posts( array(\'author\' => $author_id, \'numberposts\' => -1 ));
      $counter = 0; // needed to collect the total sum of views

      foreach ( $author_posts as $post ) {

      $views = absint( get_post_meta( $post->ID, \'post_views_count\', true ) );

      $counter += $views;

      }
      echo $counter;

     ?> 

结束