Список боковой панели: если текущая страница является дочерней страницей самого глубокого уровня, отобразить родственные страницы. Если нет, отобразить дочерние страницы

Я делаю боковую панель, которая будет отображать родственные страницы, если текущая страница является дочерним элементом самого глубокого уровня, и только дочерние страницы, если это не так. Насколько я понял, я не смог понять логику, чтобы завершить это. Любые идеи? Заранее спасибо.

global $post; 
    if ( is_page() && $post->post_parent )
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
    else
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
    if ( $childpages ) {
        $interior_sidebar = '<ul class = "child-pages">' . $childpages . '</ul>';
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
282
3

Ответы 3

Используйте wp_list_pages () со своими параметрами, чтобы получить дочерние элементы текущего сообщения. Если он возвращается пустым, отобразить wp_list_pages () родительского элемента текущего сообщения; если не пусто, отобразить то, что было возвращено.

Ты на правильном пути.

global $post небезопасно использовать (это может быть сообщение Кроме как страницы, которую вы просматриваете), особенно на боковой панели - я бы рекомендовал сделать что-то вроде get_queried_item ().

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

// safer method to get the page you are viewing
$post = get_queried_object();
// will be TRUE if there's any child pages, FALSE if not
$has_children = (0 != get_pages( [ 'child_of' => $post->ID ] ) );
// set to prevent notices
$child_pages = FALSE;

if ( is_page( $post->ID ) && $post->post_parent ) {
    $args = [
        'sort_column' => 'menu_order',
        'title_li'    => '',
        'echo'        => 0,
        // this is a ternary operation, that assigns $post->ID if $has_children, or $post_parent if not
        'child_of'    => ( $has_children ) ? $post->ID : $post->post_parent
    ];

    $childpages = wp_list_pages( $args );
}

if ( $childpages ) {
    $interior_sidebar = '<ul class = "child-pages">' . $childpages . '</ul>';
}

ПРИМЕЧАНИЕ: я использовал сокращенную версию для объявлений массивов (например, [ 'child_of' => $post->ID ] вместо array( 'child_of' => $post->ID ) - это работает для версий PHP 5.4+ - если вы используете более старую версию PHP, обновите ее - она ​​больше не поддерживается.

Спасибо! После изменения get_queried_item на get_queried_object это работало для страниц, которые не являются дочерними элементами самого глубокого уровня. Тем не менее, мне все еще нужно показывать родственные страницы в списке на страницах, которые являются дочерними элементами самого глубокого уровня. Вы знаете, как этого добиться?

thenomadicmann 14.05.2018 20:48

Приведенный выше код должен делать то, что вы просили. Какой список появляется, когда вы находитесь на самом глубоком уровне? (Когда вы говорите «самый глубокий уровень», вы имеете в виду, что детей больше нет, верно?). ОБРАТИТЕ ВНИМАНИЕ, что предоставленный вами код показывает ТОЛЬКО что-либо, если есть «родительские страницы» - поэтому, если вы хотите, чтобы это ТАКЖЕ для элементов навигации «верхнего уровня», вам нужно уточнить это, чтобы я мог настроить.

random_user_name 14.05.2018 21:17

Решено с помощью:

function wpb_list_child_pages() {
    global $post;
    $childpages = wp_list_pages(array(
        'child_of'    => $post->ID,
        'depth'       => 1,
        'echo'        => '0',
        'sort_column' => 'menu_order',
        'title_li'    => ''
    ));

    if ( $childpages ) {
        $string =$childpages;
    } else {
        $childpages = wp_list_pages(array(
            'child_of'  => $post->post_parent,
            'depth'     => 1,
            'exclude'   => $post->ID,
            'title_li'    => ''
        ));
        $string = $childpages;
    }

    echo $string; }

Затем я просто вызвал функцию в своем шаблоне: <ul class = "child-pages"><?php wpb_list_child_pages(); ?></ul>

Другие вопросы по теме