Check if page has subpages

时间:2011-11-08 作者:Philip

我正试着用wp_list_pages() 必须是这样:

Main Page  
  -Subpage1  
  -Subpage2  
我检查页面是否有子页面,当我在父页面时,我可以看到这两个子页面,但当我访问其中一个子页面时,我什么都看不到。那么,我可以做些什么来检查页面是否有子页面,以获得子页面中相同的页面列表?

如何使用:在函数中,我检查页面是否有\\u子页面,

function has_subpage (){
global $post;
$pages = get_pages("sort_column=menu_order&depth=1&child_of={$post->ID}");
if ($pages) return TRUE;
}
在我的模板中,我调用菜单(子页面列表),

<?php if (is_page() && has_subpage()) { ?>

    <?php
      if($post->post_parent) {
      $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0$sort_column=menu_order");
      $title_heading = get_the_title($post->post_parent);
      }

      else {
      $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
      $title_heading = get_the_title($post->ID);
      }
      if ($children) { ?>

      <?php echo $children; ?>

    <?php } ?>

<?php } ?>
问题出在has\\u subpage()函数中,因为如果我不使用它,我会得到正确的页面,也许我这里遗漏了什么?

非常感谢!

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

您必须将父页id传递给wp_list_pages 函数而不是全局$post->ID 在您的子页面中。

function wpse33151_getSubpages() {      
    global $post;

    $parents = get_post_ancestors($post->post_id);
    krsort($parents);
    $parents = array_merge(array(), $parents);

    if (is_home() || is_single()) {
        $id = get_option(\'page_for_posts\');
        $parent = get_post_ancestors($id);
        $id = $parent[0];
    } elseif($parents) {
        $id = $parents[0];
    } else {
        $id = $post->ID;
    }

    $children = wp_list_pages(\'title_li=&child_of=\' . $id . \'&echo=0\');
    $out = null;

    if ($children) {
        $out = \'<div id="subpages" class="widget-container">\';
        $out .= \'<h3 class="widget-title"><a href="\' . get_permalink($id) . \'">\' . get_the_title($id) . \'</a></h3>\';
        $out .= \'<ul>\';
        $out .= $children;
        $out .= \'</ul>\';
        $out .= \'</div>\';
    }

    return $out;
}

结束

相关推荐

WP_LINK_PAGES输出出现两次

我认为这与所问的问题完全不同here.我正在使用过滤器挂钩向主题添加分页。输出显示在内容的开头和结尾,而不仅仅是结尾。我的函数,在模板的函数中。php文件:add_filter(\'the_content\',\'pagination_after_post\',1); /** * Adds pagination after the post * * @uses is_single() */ function pagination_after