Php 第二个WordPress循环失败
我有两个循环在我的页面上运行,一个用于从特定类别获取一组帖子,然后进一步从自定义帖子类型获取帖子,但由于某种原因,如果我同时输出这两个帖子,第二个循环不会显示,如果我注释掉第一个,第二个循环会显示吗 我有点不明白为什么 第一个循环已更新Php 第二个WordPress循环失败,php,wordpress,Php,Wordpress,我有两个循环在我的页面上运行,一个用于从特定类别获取一组帖子,然后进一步从自定义帖子类型获取帖子,但由于某种原因,如果我同时输出这两个帖子,第二个循环不会显示,如果我注释掉第一个,第二个循环会显示吗 我有点不明白为什么 第一个循环已更新 <?php $post_query = new WP_Query(array( 'category_name' => 'email-content')); if ( $post_query->have_posts() ) {
<?php
$post_query = new WP_Query(array( 'category_name' => 'email-content'));
if ( $post_query->have_posts() ) {
echo '<div class="tabs tabs_default">';
echo '<ul class="horizontal">';
while ( $post_query->have_posts() ) {
$post_query->the_post();
$title = strtolower(get_the_title());
$title = str_replace(' ', '-', $title);
echo'<li><a href="#'.$title.'">'.get_the_title().'</a></li>';
}
echo '</ul>';
while ( $post_query->have_posts() ) {
$post_query->the_post();
$title = strtolower(get_the_title());
$title = str_replace(' ', '-', $title);
echo '<div id="'.$title.'">';
echo '<div><button class="copy" id="'.$title.'" data-clipboard-text="'.get_the_content().'" title="Copy">Copy</button></div>';
echo '<div>'.get_the_content().'</div>';
echo '</div>';
}
$post_query->reset_postdata();
}
?>
第二个循环已更新
<?php
$post_query = new WP_Query(array( 'category_name' => 'email-content'));
if ( $post_query->have_posts() ) {
echo '<div class="tabs tabs_default">';
echo '<ul class="horizontal">';
while ( $post_query->have_posts() ) {
$post_query->the_post();
$title = strtolower(get_the_title());
$title = str_replace(' ', '-', $title);
echo'<li><a href="#'.$title.'">'.get_the_title().'</a></li>';
}
echo '</ul>';
while ( $post_query->have_posts() ) {
$post_query->the_post();
$title = strtolower(get_the_title());
$title = str_replace(' ', '-', $title);
echo '<div id="'.$title.'">';
echo '<div><button class="copy" id="'.$title.'" data-clipboard-text="'.get_the_content().'" title="Copy">Copy</button></div>';
echo '<div>'.get_the_content().'</div>';
echo '</div>';
}
$post_query->reset_postdata();
}
?>
我不需要其中一个循环,所以我进一步细化了代码,但第二个循环的输出仍然没有成功
<?php
$featureThumb = new WP_Query( array(
'post_type' => 'resources',
'meta_key' => 'file_upload',
'posts_per_page' => -1
));
while ($featureThumb->have_posts()) : $featureThumb->the_post();
echo '<div>';
if (has_post_thumbnail($post->ID)) {
$thumb = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'homepage-thumb-thumb' );
echo '<img src="' . $thumb[0] . '" width="200" height="200" />' ;
};
echo '<p><a href="'. get_field('file_upload') .'" target="_blank" download>Click here to download as PDF</a></p>';
endwhile;
unset($featureThumb);
}
?>
您必须使用
wp\u reset\u query()代码>也位于第一个循环的末尾。因此,第一个循环应该是:
<?php
$post_query = new WP_Query(array( 'category_name' => 'email-content'));
if ( $post_query->have_posts() ) {
echo '<div class="tabs tabs_default">';
echo '<ul class="horizontal">';
while ( $post_query->have_posts() ) {
$post_query->the_post();
$title = strtolower(get_the_title());
$title = str_replace(' ', '-', $title);
echo'<li><a href="#'.$title.'">'.get_the_title().'</a></li>';
}
echo '</ul>';
while ( $post_query->have_posts() ) {
$post_query->the_post();
$title = strtolower(get_the_title());
$title = str_replace(' ', '-', $title);
echo '<div id="'.$title.'">';
echo '<div><button class="copy" id="'.$title.'" data-clipboard-text="'.get_the_content().'" title="Copy">Copy</button></div>';
echo '<div>'.get_the_content().'</div>';
echo '</div>';
}
wp_reset_query();
}
?>
您似乎有三个查询和四个循环,而不是两个
另外,在未设置($featuratumb)之后还有一个额外的}
应该删除的代码>
您在问题中提出的三个问题是:
$post\u query
,$loop
和$featuratumb
。最后一个循环是不正确的。它使用第二个的对象。使用$featuratumb
在循环中的第三个查询$loop
处进行更改
在前两次查询之后,您需要使用wp\u reset\u postdata()
,而不是像某人建议的那样使用wp\u reset\u query()
,这两种方法都应该有效
wp\u reset\u query()
确保主查询已重置为原始主查询,而另一方面wp\u reset\u postdata()
确保全局$post
已还原为主查询中的当前post
更新:
如果不起作用,如果未定义全局$post
对象,请尝试:
$post_query->reset_postdata()代码>
$loop->reset_postdata()代码>
更新2:
您的第一个查询和循环应该如下所示:
谢谢您的回复,我原以为会是这样,但它不是重置,我已经尝试了您的代码,以防我可能遗漏了一些东西,但第二个循环仍然失败。也许您还需要调整第三个循环,因为您执行了$featuratumb=new WP\u Query(…)
,然后执行($loop->have_posts()):$loop->the_post();
。您将实例保存在$featuratumb
中,而不是$loop
。我建议您无论如何都要离开wp\u reset\u query()
函数。很抱歉我有点困惑,您建议我修改什么,所以更改$loop
变量名的w名称?是的,在第三个循环中,您应该使用while($featuretumb->have_posts()):$featuretumb->the_post()
。因此,我已经更新了它,如果我注释掉第一个循环,它仍然会显示,如果我再次返回第一个循环,它将如何失败。您的第二个查询是$featuratumb
,但您将在$loop
上循环。此外,请调用wp\u reset\u postdata()
在每个循环之后;这将重置全局$post
变量。@Dre那么我的代码是不是有点混乱?我在这里对它有点困惑。所以我在第一个post循环之后执行wp\u reset\u postdata
,然后我将$loop
更改为$featuratumb
?@Dre我已经更新了我的qu为了反映我们的讨论-当第二个循环仍然无法输出时,我做得对吗?我已经把它缩小到第一个post循环有问题的地方,因为当我切换它们时,它们都显示出来了,但我不确定它们有什么不同?你不应该删除第一个“wp_reset_postdata()”吗您只需在不再需要$post_查询对象后运行此函数。您正在运行第二个while循环,但查询已被重置。非常感谢您花时间解释这两个重置,因为我不知道这一点。那么我是否需要在每个循环后重置?在每个循环后,但不需要在最后一个循环后重置,因为没有必要把它放在那里。所以我在每个while循环后放置了一个reset,但是第一个循环仍然显示,但是第二个循环仍然没有显示?我更新了我的问题以反映我们的讨论-我做得对吗,因为第二个循环仍然无法输出wp_reset_postdata
被wp_reset_query
函数调用,所以它是一样的更好的是,第二个也会重置查询