WordPress — Как в дочерний список страниц дублировать родительскую страницу?
Пните, пожалуйста, в верном направлении.
Должно быть так - родительская страница и первый элемент списка дочерних одна и та же страница:
Использовал wp_list_pages и walker:
$args = array( 'post_type' => 'produkciya', 'title_li' => '', 'sort_column' => 'post_date', 'echo' => 0, 'walker' => new Custom_Walker_Page(), 'parent_id' => 0 ); echo '<ul>' . wp_list_pages($args) . '</ul>'; |
$args = array( 'post_type' => 'produkciya', 'title_li' => '', 'sort_column' => 'post_date', 'echo' => 0, 'walker' => new Custom_Walker_Page(), 'parent_id' => 0 ); echo '<ul>' . wp_list_pages($args) . '</ul>';
class Custom_Walker_Page extends Walker_Page { public function start_lvl(&$output, $depth = 0, $args = array()) { $output .= '<ul class="children">'; } public function end_lvl(&$output, $depth = 0, $args = array()) { $output .= '</ul>'; } public function start_el(&$output, $page, $depth = 0, $args = array(), $current_page = 0) { if ($depth === 0 && $args['parent_id'] == $page->post_parent) { $output .= '<li>' . carbon_get_post_meta($page->ID, 'products_title') . '</li>'; } parent::start_el($output, $page, $depth, $args, $current_page); } } |
class Custom_Walker_Page extends Walker_Page { public function start_lvl(&$output, $depth = 0, $args = array()) { $output .= '<ul class="children">'; } public function end_lvl(&$output, $depth = 0, $args = array()) { $output .= '</ul>'; } public function start_el(&$output, $page, $depth = 0, $args = array(), $current_page = 0) { if ($depth === 0 && $args['parent_id'] == $page->post_parent) { $output .= '<li>' . carbon_get_post_meta($page->ID, 'products_title') . '</li>'; } parent::start_el($output, $page, $depth, $args, $current_page); } }
Сейчас родительская дублируется, но она за пределами дочернего списка
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Дублировать родительскую страницу в список дочерних можно, но сначала стоит понять, зачем. Если задача — показать в меню пункт «Все материалы раздела» рядом с дочерними страницами, лучше не создавать физический дубль страницы, а добавить родителя в вывод программно.
Пример: выводим родительскую страницу первой, затем её дочерние:
$parent_id = get_the_ID(); $items = [ get_post($parent_id), ]; $children = get_pages([ 'child_of' => $parent_id, 'parent' => $parent_id, 'sort_column' => 'menu_order,post_title', 'sort_order' => 'ASC', ]); $items = array_merge($items, $children); echo '<ul class="section-pages">'; foreach ($items as $page) { printf( '<li><a href="%s">%s</a></li>', esc_url(get_permalink($page->ID)), esc_html(get_the_title($page->ID)) ); } echo '</ul>';
Если речь про меню WordPress, проще добавить родительскую страницу вручную в меню. Если речь про автоматический блок в шаблоне, код выше безопаснее, чем создавать копию записи в базе.
Физический дубль страницы почти всегда плох для SEO: появляется второй URL с тем же контентом, canonical может поехать, внутренние ссылки начнут расходиться.