你把这里的一切都复杂化了。你所做的不仅仅是昂贵的(因为你失去了所有的缓存,包括post、post meta、term和缩略图缓存),这也是完全错误的。
您正在运行替换主查询的自定义查询。这本身会使页面加载变慢
为了安全和动态,您不应该运行自己的SQL查询。正如我所说,您释放了所有缓存,这使得页面加载更快,并减少了db查询。您还松开了所有过滤器和操作WP_Query
提供
您正在运行许多不必要的查询。你需要做的一切都已经在主查询中了,这只是使用这些信息来满足你的需要的一个例子
让我们看看如何解决这个问题。分类术语存档页面上的主查询已经只返回所查询术语中的帖子。默认情况下,这些帖子是按日期、描述排序的,因此最新的帖子将位于顶部,恐龙将位于底部。正如您所看到的,一切都已经存在,您可能需要做的就是更改每页显示的帖子数量,在这种情况下,似乎所有帖子都在第一页上
因为我们在这里使用主查询,所以所有的后期缓存都被我们的post、post meta和term信息填满,这为以后的db查询节省了很多时间。此外,由于我们使用主查询,因此也会缓存帖子缩略图。请记住,post缩略图仅为主查询缓存,而不是为自定义查询缓存。
首先,让我们使用pre_get_posts
获取分类术语归档页面第一页上的所有帖子
add_action( \'pre_get_posts\', function ( $q )
{
if ( !is_admin() // Only target front end
&& $q->is_main_query() // Only target the main query
&& $q->is_tax() // Only target taxonomy term archive pages
) {
$q->set( \'posts_per_page\', -1 ); // Will return all posts on page one
}
});
如果使用主默认循环,则会在分类法归档页面上看到按日期排序返回的所有帖子
让我们对循环进行排序。首先,删除所有代码。我们不希望也不需要自定义查询。我们只想使用主回路。至于排序部分,比较发布日期很容易,如果任何两个发布的日期不同,则只显示年份(NOTE: 所有代码都未经测试,我只清理了您的代码,没有更改它
if ( have_posts() ) {
// Define a variable which will hold our year value
$year_variable = \'\';
while ( have_posts() ) {
the_post();
// Lets get the post date, but only the year value
$post_year = get_the_date( \'Y\' );
/**
* Compare the current post\'s date with our $year_variable and
* display the year value if the two dates differs
*/
if ( $year_variable !== $post_year )
echo \'<div id="press-year">\' . $post_year . \'</div>\';
// Update the $year_variable value
$year_variable = $post_year;
// Now we can display the rest of the loop
echo \'<div id="small_gridbox1">\';
$src = wp_get_attachment_image_src( get_post_thumbnail_id(), thumbnail, false);
echo \'<div id="small_gridbackground" style="background-image: url(
\' . $src[0] . \'
</div>\';
echo \'<a href=\'" . the_field(\'pdflink\') . \'" target="_blank
<div id="small_gridcontent">
<div class="small_title">
\' . the_title() . \'
<div class="job_title">
\' . the_field(\'title\') . \'
</div>
</div>
<div class="small_sub">
\' . str_replace( \' \', \'\', get_field(\'sub_heading\' ) ) . \'
</div>
</div>
</a>\';
echo \'</div>\';
}
}
这将使您基本了解分类法归档页面的外观