一页中有多个 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 循环,产生相同的数据的主要内容,如果未能解决你的问题,请参考以下文章

一页中的多个 Summernote 所见即所得编辑器具有相同的占位符

Google Adwords 一页中有多个脚本

引导表中的表多重排序不适用于一页中的多个表

一页中的多个模式

如何在一页中编辑多个用户信息?

word怎么一页中画多个表格