所以你有很多东西是对的,也有一些是错的,所以我会逐行检查
First:
wp_reset_query();
此函数在
query_posts
打电话,你不应该使用其中任何一个。可悲的是,很多教程作者都是用这个,而不是他们打算用的,
wp_reset_postdata
, 因为它在内部调用该函数。
为了节省时间,这是一个结构合理的WP_Query
其自身清理如下所示:
$args = array();
$q = new WP_Query( $args );
if ( $q->have_posts() ) { // if posts were found
while( $q->have_posts() { // for each post
$q->the_post(); // set the current post
the_title(); // display its title
the_content(); // display its content
}
// after the loop, reset the current post back to before the loop
wp_reset_postdata();
} else {
// no posts were found
}
请注意
wp_reset_postdata
在
while
循环,但在
if
陈述这样,只有在有工作要清理时,才会重置postdata。
Second:
您的查询参数很接近,但不完全正确:
$args = array(
\'post_type\' => \'blogs\',
\'posts_per_page\' => 2,
\'tax_query\' => array(
array(
\'taxonomy\' => \'show-blogs\',
\'field\' => $news,
\'terms\' => $custom_term->slug,
\'posts_per_page\' => 2,
),
),
);
$loop = new WP_Query( $args );
备注:
field
确定您正在搜索的内容。又名带E的术语ID 5或带有slug test
, 等等,它的可能值数量有限。默认值为term_id
, 所以你应该删除这个terms
是的,但是您可以通过传递术语ID(即\'terms\' => $custom_term->term_id,
, 这甚至可能快一点。因此,始终首选术语ID而不是术语slug或名称,因为slug/名称可以编辑,但ID始终保持不变posts_per_page
不属于tax_query
Third:
你的代码正在按你的意愿拉2个帖子,它只是做了多次而已。它不是一个行为不正常的查询,而是多个查询执行相同的操作,但针对不同的术语。
$custom_terms = get_terms(\'show-blogs\');
foreach ( $custom_terms as $custom_term ) {
这么说吧
$custom_terms
包含
5
条款。这是循环的5次迭代,每个循环中查询2篇文章,因此2篇文章x 5次迭代=10篇文章。
我们可以通过修改
$custom_terms = get_terms(\'show-blogs\');
foreach ( $custom_terms as $custom_term ) {
?><h3>Show Blog: <?php echo esc_html( $custom_term->name ); ?></h3><?php
现在,我们应该将每个术语视为标题,然后是两篇文章。
Notable mentions:
<祝贺您使用
esc_url
, 逃跑是一种被低估的安全措施,它可以为保护一个网站创造奇迹。Escape late Escape经常使用一些CSS网格可以使您的表布局更简单/更易于管理
}
等,并将其缩进,并坚持一种样式,例如。
while () {}
而不是
while(): endwhile;
, 它避免了一整类的错误和bug,而且阅读和键入更加方便