2013-04-23 108 views
0

我有以下的页面结构:WordPress的 - 隐藏子页面的儿童在wp_list页

  • 主页(ID 5)
    • 子页面1
      • 儿童页
      • 儿童页
    • 子页面2
      • 儿童页
      • 儿童页

我用我的显示工具栏菜单下面的代码:只

<?php wp_list_pages('child_of=5&title_li=&link_before=<span>&link_after=</span>'); ?> 

此代码显示一个列表。我需要显示

  • 当主网页上,只显示子页面
  • 当在子页面,显示子页面和子页面目前我在
  • 的子页面的时候,孩子页面上,显示我目前所在的父子页面的显示子页面和子页面

任何想法如何做到这一点? 感谢您的帮助

回答

0

兄弟姐妹我找到了一个工作代码,就像一个魅力对我来说:

/** 
* Create HTML list of pages. 
* 
* @package Razorback 
* @subpackage Walker 
* @author Michael Fields <[email protected]> 
* @copyright Copyright (c) 2010, Michael Fields 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
* 
* @uses Walker_Page 
* 
* @since 2010-05-28 
* @alter 2010-10-09 
*/ 
class Razorback_Walker_Page_Selective_Children extends Walker_Page { 
    /** 
    * Walk the Page Tree. 
    * 
    * @global stdClass WordPress post object. 
    * @uses Walker_Page::$db_fields 
    * @uses Walker_Page::display_element() 
    * 
    * @since 2010-05-28 
    * @alter 2010-10-09 
    */ 
    function walk($elements, $max_depth) { 
     global $post; 
     $args = array_slice(func_get_args(), 2); 
     $output = ''; 

     /* invalid parameter */ 
     if ($max_depth < -1) { 
      return $output; 
     } 

     /* Nothing to walk */ 
     if (empty($elements)) { 
      return $output; 
     } 

     /* Set up variables. */ 
     $top_level_elements = array(); 
     $children_elements = array(); 
     $parent_field = $this->db_fields['parent']; 
     $child_of = (isset($args[0]['child_of'])) ? (int) $args[0]['child_of'] : 0; 

     /* Loop elements */ 
     foreach ((array) $elements as $e) { 
      $parent_id = $e->$parent_field; 
      if (isset($parent_id)) { 
       /* Top level pages. */ 
       if($child_of === $parent_id) { 
        $top_level_elements[] = $e; 
       } 
       /* Only display children of the current hierarchy. */ 
       else if (
        (isset($post->ID) && $parent_id == $post->ID) || 
        (isset($post->post_parent) && $parent_id == $post->post_parent) || 
        (isset($post->ancestors) && in_array($parent_id, (array) $post->ancestors)) 
       ) { 
        $children_elements[ $e->$parent_field ][] = $e; 
       } 
      } 
     } 

     /* Define output. */ 
     foreach ($top_level_elements as $e) { 
      $this->display_element($e, $children_elements, $max_depth, 0, $args, $output); 
     } 
     return $output; 
    } 
} 
1

使用深度处理,你想让它显示什么

<?php wp_list_pages('child_of=5&depth=1&title_li=&link_before=<span>&link_after=</span>'); ?> 

参考:http://codex.wordpress.org/Function_Reference/wp_list_pages

默认值为0(显示所有页面,包括所有子页) 。

0 (default) Displays pages at any depth and arranges them hierarchically in nested lists 
    -1 Displays pages at any depth and arranges them in a single, flat list 
    1 Displays top-level Pages only 
    2, 3 … Displays Pages to the given depth 
+0

谢谢,但深度不容许我有选择地显示在子页面,它显示它们全部,对吗?我的意思是,当我在子页面上显示子页面并且只显示子页面的子页面时,我将无法执行' – user1049961 2013-04-24 05:51:52

0

你可以尝试使用此Hierarchical Pages Widget。我不确定它是否支持你想要的,但是我在我的一个项目中使用了它,它运行得很好。

这个小工具将:

制作倒塌分层页/分类/分类列表:顶级 水平;祖先,孩子,和/或电流