Intereting Posts
Показывать поля ACF только на определенной странице в бэкэнд WooCommerce remove_action и add_action Помощь Определить источник кэширования Пользовательский WP_List_Table в подзаголовок API Как отобразить пользовательскую таксономию пользовательского типа сообщения Импорт сообщений с старого веб-сайта в новый конфликтный идентификатор сообщения? add_theme_support ('custom-header') не добавляет параметр для настройки Как я могу получить значение из массива файлов cookie, когда я нажимаю кнопку? Функция условия для родительской категории? Отображать шаблон другой категории, если выбрано настраиваемое поле Функция отображения случайных сообщений из категории Случайный и ошибочный перенос WordPress Только показать автору свои пользовательские типы сообщений сортировать дочерние страницы в admin Настройка многостраничных страниц WordPress с пользовательскими постоянными ссылками

Изменить родительское имя с помощью wp_list_pages?

Я использую следующую строку в коде, который выводит подстраницы и родителя. Этот код выводит имя родительской страницы. Я хотел бы заменить это словом «Обзор».

Как достичь этого в wp_list_pages с минимальным количеством кода? Благодаря!

$children = wp_list_pages("title_li=yo&include=".$post->post_parent."&echo=0"); // list the parent page 

Полный код:

 <?php if ( is_page() ) { $parent = get_post($post->post_parent); $parent_title = get_the_title($parent); $grandparent = $parent->post_parent; $grandparent_title = get_the_title($grandparent); $current_page_parent = ( $post->post_parent ? $post->post_parent : $post->ID ); // is the homepage the granparent? = third level page if ($grandparent == is_page('0')) { $children = wp_list_pages("title_li=&include=".$post->post_parent."&echo=0"); // list the parent page $children .= wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0"); // append the list of children pages to the same $children variable if ($children) { ?> <ul class="submenu"> <?php echo $children; /*print list of pages*/ ?> </ul> <?php } // is the homepage the parent? = second level page } elseif ($post->post_parent ==is_page('0')) { $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0'); if ($children) { ?> <ul><li class="current_page_item"><a href="<?php echo get_permalink( $parentid ) ?>">Overview</a></li><?php echo $children; ?></ul> <?php } else {// your else stuff } } } ?> 

Конечно, вы могли бы использовать некоторые preg_replace() чтобы решить эту проблему, но вот небольшая (непроверенная) идея с использованием фильтра the_title :

 add_filter( 'the_title', 'wpse_title' ); $children = wp_list_pages("title_li=&include=".$post->post_parent."&echo=0"); 

где наш обратный вызов фильтра:

 function wpse_title( $title ) { remove_filter( current_filter(), __FUNCTION__ ); return __( 'Overview' ); } 

Примечание 1:

Я думаю, вам стоит подумать о замене wp_list_pages() генерации единственной родительской ссылки и вместо этого использовать get_permalink( $parent_id ) или get_page_link( $parent_id ) из идентификатора родительской страницы. Тогда вы можете легко управлять именем ссылки.

  <li> <a href="<?php echo get_permalink( $parent_id ); ?>">Overview</a> </li> 

Вы уже используете это для одного из уровней, так почему бы и другим?

Примечание 2:

Вы также можете использовать get_post_ancestors() чтобы помочь вам получить текущую позицию уровня дерева.

Например:

 $ancestors_ids = get_post_ancestors( get_the_ID() ); $level = count( $ancestors_ids ) ; 

Затем вы можете получить родительский идентификатор текущей страницы с помощью:

 $parent_id = ( $level > 0 ) ? array_shift( $ancestors_ids ) : 0; 

Вот пример того, как выглядит случай $level = 2 :

 <ul class="submenu"> <li> <a href="<?php echo get_permalink( $parent_id ); ?>">Overview</a> </li> <?php echo wp_list_pages("title_li=&child_of=".$parent_id."&echo=0&depth=1"); ?> </ul> 

Возможно, тогда ваш $level = 1 мог бы быть:

 <ul class="submenu"> <li> <a href="<?php echo get_permalink( $parent_id ); ?>">Overview</a> </li> <?php echo wp_list_pages("title_li=&child_of=".get_the_ID()."&echo=0&depth=1"); ?> </ul> 

и т.д ..

Попробуйте эти фрагменты кода один раз:

 $args = array('post_type' => 'page', 'parent' => 0); $parent_pages = get_pages($args); if( $parent_pages ){ echo '<ul>' . "\n"; foreach( $parent_pages as $page){ $children = wp_list_pages("title_li=&child_of=".$page->ID."&echo=0"); if( $children ) { echo '<li><a href="'. get_page_link( $page->ID ) .'">Overview</a></li>' . "\n" ; echo '<ul>' . "\n"; echo $children; echo '</ul>' . "\n"; }else{ echo '<li><a href="'. get_page_link( $page->ID ) .'">' . $page->post_title . '</a></li>' . "\n" ; } } echo '</ul>' . "\n"; } 

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