Вопрос или проблема
Я пытаюсь отобразить дочерние страницы родительской страницы, это работает. Но когда я попытался исключить текущую страницу из списка, где отображаются дочерние страницы, это не работает.
Как это исправить?
$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 );
Это всегда работает для меня:
$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
, а также в правильной передаче параметров и их формировании.
Основное решение
-
Проверка текущего ID поста:
Сначала необходимо получить ID текущей страницы. Это можно сделать с помощью функцииget_the_ID()
:$current_post_id = get_the_ID();
-
Использование
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
задает исключение для текущей страницы.
-
Проверка синтаксиса:
Следует также убедиться, что используемый синтаксис корректен. В примерах, содержащихся в вопросе, наблюдаются некоторые незначительные ошибки. Корректная передача параметров в массиве обеспечит их правильную интерпретацию.
Альтернативный подход с 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>';
}
Заключение
При выполнении вышеуказанных шагов вы сможете успешно отображать дочерние страницы родительской страницы с исключением текущей страницы. Важно тщательно проверять синтаксис и тестировать функциональность, чтобы убедиться в корректной работе кода. Использование массивов для передачи параметров вместо строк позволяет упростить отладку и улучшить читаемость кода.