你在这里遇到的最大问题是调用你的帖子缩略图。这会在每篇文章中添加两个查询,这相当繁重。当我们看到source code of get_the_post_thumbnail()
, 我们将看到缩略图只缓存在主查询中,而不是自定义查询中。所以我们需要手动完成。
您可以添加
update_post_thumbnail_cache( $footer_query );
就在你的循环之前。这应该可以处理大量的db调用
只需对代码进行一些注释
您应该使用wp_reset_postdata()
循环之后,不是wp_reset_query()
, 后者与连用query_posts
你永远不应该使用它。wp_reset_postdata()
也应在endwhile
和endif
随机排序总是比任何其他排序慢得多,因为它仍然要通过完整的数据库来挑选随机帖子,所以您可能需要研究一下
没有必要用默认值定义参数。post_type
默认设置为post
和post_status
到publish
正确地缩进代码,使其更可读、更易于维护和调试
从PHP 5.4开始,您可以使用需要较少书写的短数组语法;-)
您可能可以按如下方式重写代码
$args = [
\'posts_per_page\' => 18,
\'orderby\' => \'rand\',
\'no_found_rows\' => true, // counts posts, remove if pagination require
// look for post which has featured img
\'meta_query\' => [
[
\'key\' => \'_thumbnail_id\',
]
]
];
$footer_query = new WP_Query( $args );
// Update the thumbnail cache
update_post_thumbnail_cache( $footer_query );
// LOOP
if ($footer_query->have_posts()) :
while ($footer_query->have_posts()) :
$footer_query->the_post();
?>
<a href="<?php the_permalink() ?>">
<?php echo get_the_post_thumbnail( get_the_ID(), \'small_thumbnail\', array(\'class\' => \'img-responsive\') ); ?>
</a>
<a href="<?php the_permalink() ?>">
<?php the_title(); ?>
</a>
<?php
endwhile;
wp_reset_postdata();
endif;