WordPress — Как в дочерний список страниц дублировать родительскую страницу?

Ссылка скопирована
1 ответ

Пните, пожалуйста, в верном направлении.
Должно быть так - родительская страница и первый элемент списка дочерних одна и та же страница:

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); } }

Сейчас родительская дублируется, но она за пределами дочернего списка

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

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

Пример: выводим родительскую страницу первой, затем её дочерние:

$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>';

$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 может поехать, внутренние ссылки начнут расходиться.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно