是否使用循环来显示父页面下的所有级别的子页面?半路上

时间:2011-03-31 作者:dains

我需要使循环在父级的所有子级、每个子级的所有子级等中运行。我需要循环而不是像wp\\U list\\U pages这样的列表标记的原因是,我可以使用wp模板标记和函数显示与页面相关的任何信息。这是一种showcase风格的显示,它具有层次结构的内容,并且可以重新排列,因此页面>帖子可用于此用途。

我已经得到了一个循环来显示当前页面的子项,一个内部循环来显示子项,但这只是一个暴力原型,我需要将其提升到下一个级别。

我想我需要做的是使用1个以post\\u parent开头的循环(这样它就会显示子页面),但插入一个函数将post ID更改为找到的每个子页面,这样循环会继续向下钻取,直到用完为止,然后退出1级,转到下一个可用ID,等等。

我的问题是,我不是一个足够的WP程序员(或真正的程序员)来实现这一点。如果全部都在代码中,我打赌我可以解决,但WP显然有隐藏的函数,与have\\u post和the\\u post一起循环使用可用的post ID,这让我无法理解如何集成所需的内容。

这就是我目前的处境。任何帮助都将不胜感激!

<?php   
$args = array(
\'posts_per_page\' => -1,
\'post_parent\' => $post->ID,
\'post_type\' => \'page\',
\'post_status\' => \'\',
\'orderby\' => \'title\',
\'order\' => \'ASC\',);

query_posts($args); ?>

<?php if(have_posts()) : while (have_posts()) : the_post(); ?>

<a href="<?php the_permalink();?>"><?php the_title();?>:</a>

<?php     $inner_query = new WP_Query("post_type=page&posts_per_page=-1&post_parent={$id}&order_by=title&order=ASC"); ?>

<?php while ($inner_query->have_posts()) : $inner_query->the_post(); ?>

<a href="<?php the_permalink();?>"><?php the_title();?>:</a>

<?php endwhile; // end inner loop ?>
<?php endwhile; //end outer loop ?>     
<?php endif; // end outer if have_posts?>

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

听起来你在寻找一个递归函数,即一个调用自身的函数。以下是如何完成的大致概述:

function wpse13669_show_all_children( $post_id, $current_level ) {
    $children = get_posts( array(
        \'post_type\' =>\'page\',
        \'posts_per_page\' =>-1,
        \'post_parent\' => $post_id,
        \'order_by\' => \'title\',
        \'order\' => \'ASC\' ) );
    if ( empty($children) ) return;

    echo \'<ul class="children level-\'.$current_level.\'-children">\';

    foreach ($children as $child) {

        /* Here would be the point where you
            do whatever you want to display the 
            posts. The variable $current_level can
            be used if you want to style different 
            levels in the hierarchy differently */

            echo \'<li>\';

        echo \'<a href="\'.get_permalink($child->ID).\'">\';
        echo apply_filters( \'the_title\', $child->post_title );
        echo \'</a>\';

        // now call the same function for child of this child
        wpse13669_show_all_children( $child->ID, $current_level+1 );

            echo \'</li>\';

        }

    echo \'</ul>\';

    }
注意:编辑我的代码以显示嵌套<ul> 列出听起来像是您在寻找的内容。如果您想了解WordPress是如何在内部执行类似操作的(比这复杂得多,但如果您需要在代码中执行任何真正自定义的操作,则值得一试),您应该查看源代码class-wp-walker.php file,其中Walker类处理整个WP中的所有各种嵌套列表(菜单、注释、页面列表等)

如果您使用所需的输出结构定义该函数,并仅从循环中调用它,那么它应该满足您的要求。我在里面放了一个$current\\u level变量,这样您就可以轻松地设置不同于孙子的孩子的样式,等等。

(在主回路内)

wpse13669_show_all_children( $post->ID, 1 );

结束

相关推荐

Read more on pages WordPress

我知道这个话题已经在论坛上了,但解决方案对我来说根本不起作用。我有一些页面,我想使用“阅读更多”拆分内容。因此,我通过添加全局$more; and $more = 0; the_content(); 虽然每次单击“阅读更多”链接时都没有发生任何事情,但我的浏览器中显示以下结果,但一切看起来都正常:http://www.mysite/#more-15有人能帮我吗?非常感谢