Список дочерних страниц, исключая текущую страницу

Вопрос или проблема

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

Как это исправить?

$current_post_id = $post->ID;
if(wp_list_pages("title_li=&child_of=2143&exclude=".$current_post_id."")):
    if($title)
        echo $before_title . $title . $after_title;
        wp_list_pages("title_li=&child_of=2143&exclude=".$current_post_id."");
endif;

На мой взгляд, это синтаксическая ошибка. Попробуйте:

wp_list_pages("title_li=&child_of=2143&exclude=$current_post_id")

ИЛИ

wp_list_pages("title_li=&child_of=2143&exclude=".$current_post_id)

Также я порекомендую передавать параметры как массив вместо строки для лучшей отладки.

wp_list_pages( array(
    'child_of'    => 2143,
    'exclude'  => array( $current_post_id ),
); 

Убедитесь, что $current_post_id возвращает правильное значение.

Как насчет использования

$args = array(
    'post_parent' => 2143,
    'post_type'   => 'any', 
    'numberposts' => -1,
    'post_status' => 'any' 
);
$children = get_children( $args );

https://codex.wordpress.org/Function_Reference/get_children

Это всегда работает для меня:

$current_post_id = get_the_ID();
$child_pages = wp_list_pages( array(
    'title_li' => '',
    'sort_column' => 'post_date',
    'sort_order' => 'desc',
    'echo' => 0,    
    'exclude'  => ($current_post_id)
    )
);

Я знаю, что это немного запоздалый ответ, но надеюсь, он будет полезен кому-то

    $parent_id = wp_get_post_parent_id( $post->ID );

    wp_list_pages( array(
        'title_li' => '',
        'child_of'    => $parent_id,
        'depth'     => 1,
        'exclude'  => $post->ID
        )
    ); 

Ответ или решение

Для решения задачи по отображению дочерних страниц родительской страницы в WordPress с исключением текущей страницы, необходимо учитывать несколько ключевых аспектов. Базовая логика заключается в использовании функции wp_list_pages или get_children, а также в правильной передаче параметров и их формировании.

Основное решение

  1. Проверка текущего ID поста:
    Сначала необходимо получить ID текущей страницы. Это можно сделать с помощью функции get_the_ID():

    $current_post_id = get_the_ID();
  2. Использование wp_list_pages с правильными параметрами:
    Для того чтобы отобразить дочерние страницы родительской страницы (например, с ID 2143) и исключить текущую страницу, можно использовать следующий код:

    wp_list_pages( array(
       'title_li' => '',
       'child_of' => 2143,
       'exclude' => $current_post_id,
       'echo' => 1
    ));

    Здесь:

    • 'title_li' => '' отключает заголовок списка.
    • 'child_of' => 2143 указывает, что нужно отобразить дочерние страницы страницы с ID 2143.
    • 'exclude' => $current_post_id задает исключение для текущей страницы.
  3. Проверка синтаксиса:
    Следует также убедиться, что используемый синтаксис корректен. В примерах, содержащихся в вопросе, наблюдаются некоторые незначительные ошибки. Корректная передача параметров в массиве обеспечит их правильную интерпретацию.

Альтернативный подход с get_children

В качестве альтернативного решения можно использовать функцию get_children, которая позволяет получить дочерние страницы в виде массива объектов. Пример кода:

$parent_id = 2143; // ID родительской страницы
$args = array(
    'post_parent' => $parent_id,
    'post_type'   => 'any',
    'numberposts' => -1,
    'post_status' => 'publish'
);
$children = get_children($args);

// Фильтрация текущей страницы из массива дочерних страниц
$filtered_children = array_filter($children, function($child) use ($current_post_id) {
    return $child->ID !== $current_post_id;
});

// Вывод дочерних страниц
foreach ($filtered_children as $child) {
    echo '<li>' . esc_html($child->post_title) . '</li>';
}

Заключение

При выполнении вышеуказанных шагов вы сможете успешно отображать дочерние страницы родительской страницы с исключением текущей страницы. Важно тщательно проверять синтаксис и тестировать функциональность, чтобы убедиться в корректной работе кода. Использование массивов для передачи параметров вместо строк позволяет упростить отладку и улучшить читаемость кода.

Оцените материал
Добавить комментарий

Капча загружается...