Get_Pages-显示子页,然后显示孙页

时间:2013-09-07 作者:Simon Cooper

我有一个这样的页面结构。

    Portfolio
    - Residential
    - - Resident 1
    - - Resident 2
    - - Resident 3
    - Commercial
    - - Commercial 1
    - - Commercial 2
    - - Commercial 3
孙辈页面居民1-商业3有帖子缩略图

我有一个投资组合页面的模板,我想在其中显示“住宅”和“商业”页面及其子页面,如下图所示。

    <div class="grid">
      <h2>Residential</h2>
      <ul>
        <li>  Resident 1 post_thumbnail </li>
        <li>  Resident 2 post_thumbnail </li>
        <li>  Resident 3 post_thumbnail </li>
      </ul>
    </div>
    <div class="grid">
      <h2>Commercial</h2>
      <ul>
        <li>  Commercial 1 post_thumbnail </li>
        <li>  Commercial 2 post_thumbnail </li>
        <li>  Commercial 3 post_thumbnail </li>
      </ul>
    </div>
我正在使用get\\u页面,并创建了“住宅”和“商业”分区

    <?php

        $portfolio_sections = array(
            \'post_type\'     => \'page\',
            \'child_of\'      => $post->ID,
            \'sort_column\' => \'menu_order\',
            \'sort_order\'    => \'ASC\',
            \'parent\'            => $post->ID
        );

        $sections = get_pages($portfolio_sections);

        foreach($sections as $section){

        ?>

        <div class="grid">
            <h2><?php echo $section->post_title; ?></h2>

              //Create Child pages

        </div><!--.grid-->

        <?php   
        }
    ?>
我的问题是在“ul”列表中创建子页面

我尝试使用第二个foreach循环,但这不起作用,我不知道这是否是正确的方法

    <?php

        $portfolio_sections = array(
            \'post_type\'     => \'page\',
            \'child_of\'      => $post->ID,
            \'sort_column\' => \'menu_order\',
            \'sort_order\'    => \'ASC\',
            \'parent\'            => $post->ID
        );

        $sections = get_pages($portfolio_sections);

        foreach($sections as $section){

        ?>

        <div class="grid">
            <h2><?php echo $section->post_title; ?></h2>
            <ul class="imageGrid">
                <?php
                    $portfolio_pages = array(
                        \'post_type\'     => \'page\',
                        \'child_of\'      => $section->ID,
                        \'sort_column\' => \'menu_order\',
                        \'sort_order\'    => \'ASC\',
                        \'parent\'            => $section->ID
                    );

                    $pages = get_pages($portfolio_pages);

                    foreach($pages as $page){
                        ?>
                            <li><a href="<?php echo get_the_permalink($page->ID);?>"><?php echo get_the_post_thumbnail($page->ID, "thumbnail"); ?><span><?php echo get_the_title($page->ID);?></span></a></li>
                        <?php
                    }
                ?>
            </ul>
        </div><!--.grid-->

        <?php   
        }
    ?>
---更新----

我想要的结构。每个ul列表周围的div

    <div class="grid">
      <h2>Residential</h2>
      <ul>
        <li>  Resident 1 post_thumbnail </li>
        <li>  Resident 2 post_thumbnail </li>
        <li>  Resident 3 post_thumbnail </li>
      </ul>
    </div>
    <div class="grid">
      <h2>Commercial</h2>
      <ul>
        <li>  Commercial 1 post_thumbnail </li>
        <li>  Commercial 2 post_thumbnail </li>
        <li>  Commercial 3 post_thumbnail </li>
      </ul>
    </div>
代码中的结构是一个围绕div的结构。

    <div class="grid">
      <h2>Residential</h2>
      <ul>
        <li>  Resident 1 post_thumbnail </li>
        <li>  Resident 2 post_thumbnail </li>
        <li>  Resident 3 post_thumbnail </li>
      </ul>
      <h2>Commercial</h2>
      <ul>
        <li>  Commercial 1 post_thumbnail </li>
        <li>  Commercial 2 post_thumbnail </li>
        <li>  Commercial 3 post_thumbnail </li>
      </ul>
    </div>

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

您不需要2个查询,只需使用一些逻辑和2个foreach循环:

$portfolioID = $post->ID;

$portfolio_sections = array(
  \'post_type\' => \'page\',
  \'child_of\' => $portfolioID,
  \'sort_column\' => \'menu_order\',
  \'sort_order\' => \'ASC\',
);

$sections = get_pages($portfolio_sections);

$hierachical = array();

if ( ! empty($sections) ) {
  foreach ( $sections as $section ) {
    if ( $section->post_parent == $portfolioID ) {
      if ( ! isset( $hierachical[$section->ID]) ) $hierachical[$section->ID] = array();  
      $hierachical[$section->ID][\'child\'] = $section;
      $hierachical[$section->ID][\'grandchildes\'] = array();
    } else {
      if ( ! isset( $hierachical[$section->post_parent]) ) $hierachical[$section->post_parent] = array();
      $hierachical[$section->post_parent][\'grandchildes\'][] = $section;
    }
  }
  foreach ( $hierachical as $id => $hierachical_data ) {
    if ( ! isset($hierachical_data[\'child\']) || ! is_object($hierachical_data[\'child\']) ) continue;
    echo \'<div class="grid">\';
    echo \'<h2>\' . get_the_title($hierachical_data[\'child\']->ID) . \'</h2>\';
    echo \'<ul>\';
    if ( isset($hierachical_data[\'grandchildes\']) && ! empty($hierachical_data[\'grandchildes\']) ) {
      foreach ( $hierachical_data[\'grandchildes\'] as $grandchild ) {
        if ( has_post_thumbnail($grandchild->ID)) {
          echo \'<li><a href="\' . get_permalink( $grandchild->ID ) . \'" title="\' . esc_attr( $grandchild->post_title ) . \'">\';
          echo get_the_post_thumbnail($grandchild->ID);
          echo \'</a></li>\';
        }
      }
    }
    echo \'</ul>\';
    echo \'</div>\';
  }
}
代码untested 但应该有效。

结束

相关推荐