2013-04-23 3 views
0

У меня есть следующая структура страницы:Wordpress - скрыть детско подстраниц в wp_list страниц

  • Главная страница (ID 5)
    • Subpage страница 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

0

Вы можете попробовать использовать этот Hierarchical Pages Widget. Я не уверен, поддерживает ли он именно то, что вы хотите, но я использовал его в одном из моих проектов, и он отлично работал.

Этот виджет будет:

Сделать рушится иерархические страниц/категорию/таксономических списков: топ уровня; предки, дети и/или братья и сестры из текущего

Смежные вопросы