您使用$wpdb有什么具体原因吗?你也可以这样做WP_Query
这始终是推荐的。
因此,如果计算帖子浏览量的元键是views
然后你可以运行这个WP_Query
返回顶部查看的帖子。您还可以通过以下方式限制结果posts_per_page
.
<?php
$args = array(
\'post_type\' => \'post\',
\'post_status\' => \'publish\',
\'meta_key\' => \'views\',
\'orderby\' => \'meta_value_num\',
\'ignore_sticky_posts\' => 1,
\'posts_per_page\' => \'30\',
);
$my_query = new WP_Query( $args );
if ( $my_query->have_posts() ) :
$postnum = 1;
while ( $my_query->have_posts() ) : $my_query->the_post();
echo "Post id " . $post->ID . " has " . get_post_meta( $post->ID, \'views\', true ) . " views and rank is " . $postnum . ".<br />";
$postnum++;
endwhile;
endif;
wp_reset_postdata();
?>
EDIT 1
好了,现在我明白你在问什么了。您希望获得每个帖子的排名,并在帖子列表中显示它。首先,我们需要按视图对所有帖子进行排序,并将其存储在一个数组中。之后,在每个帖子中,我们需要找出每个帖子在排名数组中的位置。
首先,我们将在中定义全局变量functions.php
文件
$rank_array = array();
现在,在您的模板中,我们将运行一个自定义WP\\U查询以获取秩数组。将此添加到某个位置。必须在循环之外,并且必须位于显示这些帖子的主题php文件上。
global $rank_array;
$args = array(
\'post_type\' => \'post\',
\'meta_key\' => \'views\',
\'orderby\' => \'meta_value_num\',
\'posts_per_page\' => -1,
\'ignore_sticky_posts\' => 1,
\'fields\' => \'ids\',
);
$rank_query = new WP_Query( $args );
$rank_array = $rank_query->posts;
现在,我们在我们的
$rank_array
大堆
现在,在您输出帖子列表的循环中。你需要找到每个帖子的ID排名。这必须在循环中使用。
global $rank_array;
$item_rank = array_search( $post->ID, $rank_array ) + 1;
echo "Rank: " . $item_rank . " with " . get_post_meta( $post->ID, \'views\', true ) . " views";