在Wordpress嵌套循环中重置帖子数据

时间:2014-08-09 02:03:30

标签: nested-loops wordpress

我非常感谢任何可以对此有所了解的人 - 我研究了文档,我不明白为什么这不起作用。

我正在尝试创建一个如下所示的导航列表:

<ul>
  <li> COUNTRY
    <ul>
      <li>CITY</li>
      <li>CITY</li>
      <li>CITY</li>
    </ul>
    <ul>
      <li>TOWN</li>
      <li>TOWN</li>
      <li>TOWN</li>
    </ul>
  </li>
 </ul>

它需要3个循环:乡村循环,然后是城市循环和城镇循环(列出国家内的城镇)。

我正在使用以下代码:

<ul>

<?php
    # GET Countries
     $countryArgs = array(
       'category_name' => 'country',
       'posts_per_page' => -1,
       'meta_key' => 'country-menu-order',
       'orderby' => 'meta_value_num',
       'order' => 'ASC'
     );
    $sidebar_nav_loop = new WP_Query($countryArgs);

    if( $sidebar_nav_loop->have_posts() ):

        while( $sidebar_nav_loop->have_posts() ): $sidebar_nav_loop->the_post();

        ?>

             <li class="<?php echo basename(get_permalink()); ?>"> <a href="<?php echo get_permalink(); ?>"> <?php the_title(); ?> </a>

             <?php
             # GET RELATED Cities
             $cityArgs = array(
                            'post_type'         => 'post',
                            'posts_per_page'    => -1,
                            'meta_key'          => 'city-group',
                            'orderby'           => 'meta_value_num',
                            'order'             => 'ASC',
                            'meta_query'        => array(
                                array(
                                    'key'       => 'city-country',
                                    'value'     => '"' . get_the_ID() . '"',
                                    'compare'   => 'LIKE'
                                )
                            )
                        );
            $city_loop = new WP_Query($cityArgs);

            if( $city_loop->have_posts() ):

            ?>

                <ul>
                <li><a href="<?php the_permalink(); ?>" class="sub"><?php the_title(); ?></a></li>

                <?php

                    while( $city_loop->have_posts() ): $city_loop->the_post(); ?>
                        <li>
                          <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        </li>
                    <?php
                    endwhile;

                 echo "</ul>";

             endif;
             wp_reset_postdata();

            ?>

            <?php
             # GET RELATED towns
             $townArgs = array(
                            'post_type' => 'post',
                            'posts_per_page' => -1,
                            'meta_key'       => 'town-group',
                            'orderby'        => 'meta_value_num',
                            'order'          => 'ASC',
                            'meta_query' => array(
                                array(
                                    'key' => 'town-country',
                                    'value' => '"' . get_the_ID() . '"',
                                    'compare' => 'LIKE'
                                )
                            )
                        );
            $town_loop = new WP_Query($townArgs);

            if( $town_loop->have_posts() ):

            ?>
            <ul>
            <li><a href="<?php the_permalink(); ?>" class="sub"><?php the_title(); ?></a></li>
            <?php
            while( $town_loop->have_posts() ): $town_loop->the_post(); ?>
                <li>
                  <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                </li>
            <?php
             endwhile;

             echo "</ul>";

             endif;
             wp_reset_postdata();

            ?>

            </li>

            <?php
      endwhile;
      endif;
      wp_reset_postdata();
?>

</ul>

我可以让国家和城市工作,或乡村和城镇,但我不能得到这三个!据我所知,我已经遵循了文档并重置了查询,因此它们不应该发生冲突。

非常感谢您的任何帮助!

1 个答案:

答案 0 :(得分:0)

我怀疑您的问题是使用wp_reset_postdata(),并尝试使用它来第二次获取国家/地区ID。 wp_reset_postdata()将发布数据设置为MAIN查询。您可能已经将其解释为您的主要查询(即国家/地区),但事实并非如此。你实际上有多个嵌套......

主要查询 - &gt;国家/地区查询 - &gt;城市查询和城镇查询

试试这个:

在第一次使用之后,将变量设置为countryId。

$countryId = get_the_ID();

然后,在cityArgs和townArgs中使用变量。

最后,在国家/地区循环完成后,只使用wp_reset_postdata ONCE ....