dashaluna
  • 0
Учитель

Запутался в функции wp_list_pages() — как отобразить выбранные верхние страницы со всеми их подстраницами

  • 0

Я немного запутался в wp_list_pages() функциях.

Допустим, у меня есть 3 страницы верхнего уровня (без родителя), и у каждой из них есть несколько подстраниц:

  • страница 1 [подстраницы: 1.1, 1.2, 1.3];
  • страница 2 [подстраницы: 2.1, 2.2, 2.3];
  • стр. 3 [подстраницы: 3.1, 3.2]

Я пытаюсь отобразить страницы 2 и 3 верхнего уровня со всеми их подстраницами:

wp_list_pages( 'sort_column=menu_order&depth=0&title_li=&include=2,3' );

Я также пытался указать глубину как depth = 2:

wp_list_pages( 'sort_column=menu_order&depth=2&title_li=&include=2,3' );

Однако страницы верхнего уровня 2 и 3 отображаются без подстраниц. Я не уверен, правильно ли я понял описание функции.

Как мне добиться такой функциональности, когда подстраницы можно добавлять/удалять в любое время.

Большое спасибо, Даша

Share
  1. Когда вы используете include, вы явно указываете, какие страницы возвращать в результате, поэтому вы в основном ограничиваете результат этими двумя страницами.

    • 0
  2. Когда вы используете include параметр wp_list_pages, вы в основном указываете ему включать в список только эти определенные страницы.

    вы должны использовать exclude_tree вместо этого, при использовании этого параметра он будет исключать родительскую и все дочерние страницы этого родителя.

    так что-то вроде:

    $top_pages_to_exclude = '1'; // the top page to be excluded ID, you can specify more then one '1,2,23'
    
    $args = array(
        'sort_column' => 'menu_order',
        'depth' => 2,
        'title_li' => '',
        'exclude_tree' => $top_pages_to_exclude
    );
    wp_list_pages( $args );
    
    • 0
  3. Спасибо, что @Bainternet указали мне на exclude_tree, хотя в итоге я использовал немного другой код.

    Было важно иметь возможность добавлять страницы верхнего уровня, которые не должны отображаться в меню (например, для улучшенного плагина Include Page. При использовании exclude_tree мне нужно было бы обновлять код каждый раз, когда добавляется новая страница верхнего уровня)..

    Вместо этого у меня есть массив всех страниц верхнего уровня, которые должны отображаться в меню. Затем я собираю все их дочерние страницы и использую wp_list_pages для отображения только отдельные страницы.

    Вот код:

    <?php //main nav: use wp_list_pages to display cirtain parents pages and all thier descendant pages
    $parents = array(2,3);
    $children = array();
    foreach($parents as $parent) {
        $child_pages = get_pages( "child_of=$parent" );
        if($child_pages){
            foreach($child_pages as $child_page){
                $children[] = $child_page->ID;
            }
        }
    }
    //merge $parents and $children
    $menu_pages = array_merge((array)$parents, (array)$children);
    $menu_pages_str = implode(",", $menu_pages); 
    ?>
    
    <ul id="main-nav">
        <?php wp_list_pages( "sort_column=menu_order&title_li=&include=$menu_pages_str" ); ?>
    </ul>
    

    Кроме того, взгляните на родительскую страницу Списка кодексов и все дочерние страницы для получения дополнительных примеров.

    • 0

Оставить ответ

You must login to add an answer.