一页中有多个 Wordpress 循环,产生相同的数据
Posted
技术标签:
【中文标题】一页中有多个 Wordpress 循环,产生相同的数据【英文标题】:Mutliple Wordpress loops in one page, produces same data 【发布时间】:2019-01-02 07:50:29 【问题描述】:我在header.php
文件中使用多个循环时遇到问题。问题是所有部分都显示最终循环的结果,而不是它们自己的结果。这是我的代码:
<div class="catagory active face">
<?php /*-- Body --*/
$args01 = array('post_type' => 'services','category' => 'face',);
$loop01 = new WP_Query( $args01 );
if ( $loop01->have_posts() ) :
while ( $loop01->have_posts() ) : $loop01->the_post();
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif;
?>
</div>
<div class="catagory hide breast">
<?php /*-- Body --*/
$args02 = array('post_type' => 'services','category' => 'breast',);
$loop02 = new WP_Query( $args02 );
if ( $loop02->have_posts() ) :
while ( $loop02->have_posts() ) : $loop02->the_post();
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif;
?>
</div>
<div class="catagory hide body">
<?php /*-- Body --*/
$args03 = array('post_type' => 'services','category' => 'body',);
$loop03 = new WP_Query( $args03 );
if ( $loop03->have_posts() ) :
while ( $loop03->have_posts() ) : $loop03->the_post();
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif;
?>
</div>
关于为什么前两个循环显示第三个循环结果的任何想法?我在这里错过了什么?
【问题讨论】:
希望您使用自定义分类法作为类别 - 我可以知道分类法名称吗? 虽然您显示的代码应该可以工作,但如果没有看到您指示的“部分循环”代码始终显示与上面最后一个循环相同的内容(假设您的意思是 @ 987654323@代码)。请注意,您不需要在上面的代码中为 args / 循环使用唯一名称,事实上,如果您重新使用它们,它会节省一些内存(只需调用它$args
,并简单地分配新数组每次都为其提供参数。只需将其称为 $loop
,并将其分配给新的 WP_Query
每次)。
嗨@cale_b 是的,我会这样做的。最初就是这样,但我认为这是错误,所有变量都相同。但事实并非如此。
能否添加部分无法正常工作的代码,以便排除故障?
【参考方案1】:
请使用以下代码
<div class="catagory active face">
<?php
$args01 = array('post_type' => 'services',
'tax_query' => array(
array(
'taxonomy' => 'your_taxonomy_name',
'field' => 'slug',
'terms' => 'face'
)));
$loop01 = new WP_Query( $args01 );
if ( $loop01->have_posts() ) :
while ( $loop01->have_posts() ) : $loop01->the_post();
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif; ?>
</div>
<div class="catagory hide breast">
<?php
$args02 = array('post_type' => 'services',
'tax_query' => array(
array(
'taxonomy' => 'your_taxonomy_name',
'field' => 'slug',
'terms' => 'breast'
)));
$loop02 = new WP_Query( $args02 );
if ( $loop02->have_posts() ) :
while ( $loop02->have_posts() ) : $loop02->the_post();
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif; ?>
</div>
<div class="catagory hide body">
<?php
$args03 = array('post_type' => 'services',
'tax_query' => array(
array(
'taxonomy' => 'your_taxonomy_name',
'field' => 'slug',
'terms' => 'body'
)));
$loop03 = new WP_Query( $args03 );
if ( $loop03->have_posts() ) :
while ( $loop03->have_posts() ) : $loop03->the_post();
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif; ?>
</div>
希望它会有所帮助。
【讨论】:
只有代码的答案不是很有用,尤其是当它是这么大的代码块,而您没有对代码进行注释时。你改变了什么?为什么它应该起作用? 我已经测试过了,然后我发布了这个答案,因为它按照提问者想要的方式工作 嗨@raju_eww 我使用了您建议的代码并创建了一个名为“服务”的分类并将其附加到“服务”类别,但它似乎没有提取任何数据。 :( 如果您将自定义分类法命名为services
,它将与您的 post_type 冲突,因此请使用您当前的分类法 slug 不要添加我的自定义分类法服务
为了测试目的,我创建了分类法 services
但在我的情况下 post_type
名称不同【参考方案2】:
希望您使用自定义分类法作为类别,因此您需要使用“分类法”查询。使用下面的代码并根据需要循环。
<?php
$tax01 = array('taxonomy' => 'service_category','terms' =>5); // replace taxonmy name & id here
$args01 = array('post_type' => 'services','tax_query' => array($tax01));
$loop01 = new WP_Query( $args01 );
if ( $loop01->have_posts() ) :
while ( $loop01->have_posts() ) : $loop01->the_post();
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile;
endif;
wp_reset_query();
?>
【讨论】:
我没有使用“服务”进行分类设置。但我正在使用自定义帖子类型 UI 插件,我可以添加它吗?在将其创建为分类时,我应该采取哪些流程/步骤? 我建议使用分类法,因为如果您从插件的“内置分类法”部分选择“类别”,则会共享 WordPress 默认帖子“类别”。您可以按照docs.buddyforms.com/article/… 中的说明轻松添加分类。随意更改上述代码中的“分类名称”。【参考方案3】:试试这个代码
<div class="catagory active face">
<?php /*-- Body --*/
$do_not_duplicate = array();
$args01 = array('post_type' => 'services','category' => 'face',);
$loop01 = new WP_Query( $args01 );
if ( $loop01->have_posts() ) :
while ( $loop01->have_posts() ) : $loop01->the_post();
$do_not_duplicate[] = $post->ID;
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif;
?>
</div>
<div class="catagory hide breast">
<?php /*-- Body --*/
$args02 = array('post_type' => 'services','category' => 'breast',);
$loop02 = new WP_Query( $args02 );
if ( $loop02->have_posts() ) :
while ( $loop02->have_posts() ) : $loop02->the_post();
$do_not_duplicate[] = $post->ID;
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif;
?>
</div>
<div class="catagory hide body">
<?php /*-- Body --*/
$args03 = array('post_type' => 'services','category' => 'body',);
$loop03 = new WP_Query( $args03 );
if ( $loop03->have_posts() ) :
while ( $loop03->have_posts() ) : $loop03->the_post();
$do_not_duplicate[] = $post->ID;
echo '<p><a class="text-white" href="'.get_permalink().'">'.get_the_title().'</a></p>';
endwhile; wp_reset_postdata();
endif;
?>
</div>
【讨论】:
我试过了,但不幸的是结果是一样的。不过谢谢你的建议! 只有代码的答案不是很有用,尤其是当它是这么大的代码块,并且您没有对代码进行注释时。你改变了什么?为什么它应该起作用?【参考方案4】:我认为你应该在所有循环中将wp_reset_postdata();
移动到之后 endif;
【讨论】:
试过了,不幸的是还是一样的结果。 :(以上是关于一页中有多个 Wordpress 循环,产生相同的数据的主要内容,如果未能解决你的问题,请参考以下文章