Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 第二个WordPress循环失败_Php_Wordpress - Fatal编程技术网

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
函数调用,所以它是一样的更好的是,第二个也会重置查询