可以使用中的自定义字段参数WP_Query
就像你所做的那样,你只需要再扩展一点
您可以通过以下方式进行排序post_views_count
和使用meta_query
获取具有最高帖子视图计数和帖子缩略图的所有帖子
你可以试试这样的
$args = array(
\'order\' => \'DESC\',
\'posts_per_page\' => 20,
\'meta_key\' => \'post_views_count\',
\'orderby\' => \'meta_value_num\',
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'post_views_count\',
\'compare\' => \'EXISTS\'
),
array(
\'key\' => \'_thumbnail_id\',
\'compare\' => \'EXISTS\'
),
),
);
$popularPosts = new WP_Query( $args );
要获得更准确的后期视图计数,请查看
this post 我已经完成了这个主题。这是非常准确的,不包括双重观点
EDIT
另一方面,您需要重置自定义查询,因此,
any and all 自定义查询,因为它们将受到影响并将影响其他查询。就在之后
<?php endwhile; ?>
, 添加
<?php wp_reset_postdata(); ?>
EDIT 2
我已经测试了你的代码,它确实破坏了我的边栏内容。我已将您的代码修改为以下代码。它确实像预期的那样工作,根据它有帖子缩略图并按最高帖子数量排序的事实,只检索最近三十篇帖子。我还在localhost上测试这一点。另一件你需要注意的事情是,你必须有Wordpress 3.9+才能工作
在WordPress 3.9及更高版本中使用“EXISTS”或“NOT EXISTS”比较时,无需指定值。
<?php if (is_home()) : ?>
<section class="featured-posts clear">
<?php
function filter_where($where = \'\') {
//posts in the last 30 days
$where .= " AND post_date > \'" . date(\'Y-m-d\', strtotime(\'-30 days\')) . "\'";
return $where;
}
add_filter(\'posts_where\', \'filter_where\');
$args = array(
\'order\' => \'DESC\',
\'posts_per_page\' => 20,
\'meta_key\' => \'post_views_count\',
\'orderby\' => \'meta_value_num\',
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'post_views_count\',
\'compare\' => \'EXISTS\'
),
array(
\'key\' => \'_thumbnail_id\',
\'compare\' => \'EXISTS\'
),
),
);
$popularPosts = new WP_Query( $args );
remove_filter(\'posts_where\', \'filter_where\');
$counter = 1; ?>
<?php while ($popularPosts->have_posts() ) : $popularPosts->the_post(); ?>
<article class="box-<?php echo $counter++; ?>">
<a href=" <?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?>
<span><?php the_title(); ?></span>
</a>
</article>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
</section>
<?php endif; // is_home ?>
EDIT 3
您还可以使用中描述的方法
this answer by @ialocin 对于我的一个问题,请使用
pre_get_posts
. 此代码可以很容易地进行调整,以用于自定义查询。我个人认为,这是一种更好的方法,可以用于应用和删除自定义查询的自定义过滤器