在设置第一个条目的样式时拉出页面(子项/孙项)的多个循环

时间:2012-02-22 作者:Just Johnny

这要么是我精心安排成一个复杂问题的非常简单的事情,要么是一个非常复杂的问题。

我决定使用页面来显示信息。如果我转到一个名为Houston的页面,我想看到Houston的子页面,还有这些子页面的子页面。我想这些样式在块格式类似于“杂志”网站。我想我真的很接近,但这只是逃避我。如果我的描述不符合要求,这里有一张我正在努力完成的图表。

enter image description here

我正在使用的代码。。。

<?php
$my_query = new WP_Query(
    array(
        \'sort_column\'  => \'menu_order, post_title\',
        \'depth\' => 2,
        \'showposts\' => 30,
        \'post_parent\' => $post->ID,
        \'post_type\' => \'page\'
    )
); ?>
<?php $count = 0; ?>  
<?php while ($my_query->have_posts()) : $my_query->the_post(); $do_not_duplicate = $post->ID; ?>
<?php $count++; ?>  

<?php if ($count == 1) : ?>  
    <div id="top">
      <div class="first">&nbsp;</div>
      <!-- end details -->
          <h2 class="clear"><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h2>
      <p class="clear"><?php the_content(\'read more...\'); ?></p>
    </div>
    <hr/>
<?php elseif ($count == 4) : ?>  
    <div class="middle">
      <h3><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h3>
      <p class="clear"><?php the_content(\'read more...\'); ?></p>
    </div>
<?php else : ?>  
    <div class="last">
      <h3><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h3>
      <p class="clear"><?php the_content(\'read more...\'); ?></p>
    </div>
<?php endif; ?>
这是在吸引休斯顿的孩子,而不是孙子。这是造型的第一个孩子,但。。。我只想给孩子起个名字,然后给第一个孙子起个名字。我想我要找的是多重循环?我是不是在为这条路的失败做准备?

2 个回复
SO网友:Bainternet

您的代码有太多错误,启动WP\\U查询时没有\'sort_column\' , 或\'depth\' 参数。使用$do_not_duplicate = $post->ID; 什么都不做,还有其他一些事情。

您需要的是获取子项(仅ID,无需获取post对象,因为您不使用除标题和premlink之外的任何字段),对它们进行循环,并为每个子项获取子项(意味着主页孙子)并对其进行循环。

类似这样:

<?php   
//store page
$temp = $post;
//get children
$children = get_posts(array(
    \'orderby\'  => \'menu_order\',
    \'post_per_page\' => 30, 
    \'post_parent\' => $post->ID, 
    \'post_type\' => \'page\',
    \'fields\' => \'ids\')
);
//children loop
foreach ($children as $child) {
    $do_not_duplicate[] = $child;
    ?>
    <div id="child">
        <h2 class="clear"><a href="<?php echo get_permalink($child); ?>" ><?php echo get_the_title($child); ?></a></h2>
    </div> <?php
    //get grandchildren
    $grandchildren = get_posts(array(
        \'orderby\'  => \'menu_order\',
        \'post_per_page\' => 3, 
        \'post_parent\' => $child, 
        \'post_type\' => \'page\',
        \'fields\' => \'ids\')
    );
    $count = 0;
    //grandchildren loop
    foreach($grandchildren as $granchild){
        setup_postdata($granchild);
        $count++;
        if ($count == 0){ ?>
            <div id="top">
                <div class="first">&nbsp;</div>
                <h3 class="clear"><a href="<?php the_permalink($granchild); ?>" ><?php the_title($granchild); ?></a></h3>
                <?php echo get_the_post_thumbnail($granchild->ID, \'thumbnail\'); ?>
                <p class="clear"><?php the_content(\'read more...\'); ?></p>
            </div> <?php 
        }elseif ($count == 1){ ?>  
            <div class="middle">
                <h3><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h3>
                <p class="clear"><?php the_content(\'read more...\'); ?></p>
            </div> <?php
        }else { ?>  
            <div class="last">
                <h3><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h3>
                <p class="clear"><?php the_content(\'read more...\'); ?></p>
            </div><?php
        }
    }
}
//restore page
$post = $temp;

SO网友:mor7ifer

像这样的方法应该会奏效:

$args = array(
    \'sort_column\' => \'menu_order, post_title\',
    \'child_of\'    => $post->ID,
    \'parent\'      => $post->ID,
    \'hierarchial\' => 0,
);
$children = get_pages( $args );

foreach( $children as $child ) {
    $child_args = array(
        \'sort_column\' => \'menu_order, post_title\',
        \'child_of\'    => $child->ID,
        \'parent\'      => $child->ID,
        \'hierarchial\' => 0,
        \'number\'      => 3
    );

    $grandchildren = get_pages( $child_args );

    setup_postdata( $child );
    ?>
    <h1><?php the_title(); ?></h1>
    <?php
    $first = true;
    foreach( $grandchildren as $gchild ) {
        setup_postdata( $gchild ); ?>
        <?php if( $first === true ) : ?>
            <div class="first">
                <!-- do your output -->
        <?php else : ?>
            <div class="middle">
                <!-- do your output -->
        <?php endif; ?>
            </div>
        <?php
        if( $first === true )
            $first = false;
    }
}
注意:这完全没有经过测试。我是根据抄本上的get_pages(), 因此,你可能不得不摆弄这些,才能只返回一个级别的帖子。

结束