Intereting Posts
Пользовательский тип post rewrite и wp_pagenavi мешают друг другу qTranslate 2.5.28 и WordPress 3.3.1 вопросы Отображать внутренние страницы, такие как сообщения. Сброс формы сообщения администратора при сбое проверки JS Как получить дату создания публикации? Добавление meta_key через pre_get_posts приводит к исчезновению навигации Ссылка на значения метаданных третьей стороны WordPress get_the_content получает дочерний элемент как значение p Странное поведение paginate_links. Ссылка на первую страницу всегда на той странице, на которой я нахожусь, все остальные ссылки верны Короткое кодирование с Divs WordPress Query Crashes Browser Визуальный редактор не работает для пользователя на нескольких компьютерах Как показать базу изображений по категории Проверка неполадок, если пользовательское окно проверки woocommerce пусто или нет Раздел «Только члены» сайта WordPress – самостоятельная регистрация и отсутствие доступа к бэкэнд

Не показывать родительскую страницу, если нет подстраниц

Это код из кода, наиболее часто используемого для меню боковой панели. Он отображает дочерние страницы предка верхнего уровня и самого предка.

В этом коде есть одна вещь, которую я хотел бы изменить – я не хочу, чтобы на экране появился предок верхнего уровня, если у него нет детей! Не имеет смысла иметь одно меню ссылок, которое указывает на себя.

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

В functions.php

// Sub-pages menu if(!function_exists('get_post_top_ancestor_id')){ /** * Gets the id of the topmost ancestor of the current page. Returns the current * page's id if there is no parent. * * @uses object $post * @return int */ function get_post_top_ancestor_id(){ global $post; if($post->post_parent){ $ancestors = array_reverse(get_post_ancestors($post->ID)); return $ancestors[0]; } return $post->ID; }} 

Вызов:

 <ul class="subpages"> <?php wp_list_pages( array('title_li'=>'','include'=>get_post_top_ancestor_id()) ); ?> <?php wp_list_pages( array('title_li'=>'','depth'=>1,'child_of'=>get_post_top_ancestor_id()) ); ?> </ul> 

Этот код проверяет, есть ли у страницы дети, мне любопытно, может ли это быть объединено с приведенными выше кодами для создания правильного кода:

 $children = get_pages('child_of='.$post->ID);?> if( count( $children ) != 0 ) { show list as normal } else { show "no parent" text } 

Solutions Collecting From Web of "Не показывать родительскую страницу, если нет подстраниц"

Лично я считаю, что это самое аккуратное, наименее интенсивное (запрос к базе данных):

 <?php $parentid = $post->post_parent ? @ array_pop( get_post_ancestors( $post ) ) : $post->ID; $children = wp_list_pages( array( 'child_of' => $parentid, 'title_li' => '', 'echo' => false, ) ); if ( $children ) : ?> <ul class="subpages"> <li><a href="<?php echo get_permalink( $parentid ) ?>"><?php echo get_the_title( $parentid ) ?></a></li> <?php echo $children ?> </ul> <?php else : ?> Nothing! <?php endif ?> 

Это может быть не совсем то, что вы ищете, но я использую подход Франкенштейна, он выполняет свою работу:

Во-первых, давайте проверим, нужно ли даже показывать подстраницы, это будет гарантировать, что эта страница имеет детей или является дочерним, а мы не на странице 404 – если это правда, мы получим идентификатор предка (родителя), а затем запустите WP_List_Pages дважды, чтобы показать родительский и дочерний объекты в одном списке.

 <?php if((hasChildren($post->ID) || $post->post_parent) && !is_404()) : $ancestorID = getAncestorID(); ?> <ul class="subpages"> <?php wp_list_pages(array('title_li' => '', 'include' => $parentID, 'echo' => 1)); ?> <?php wp_list_pages(array('title_li' => '', 'child_of' => $parentID, 'echo' => 1)); ?> </ul> <?php endif; ?> 

В свой файл functions.php

 /** Function to get Ancestor ID **/ function getAncestorID(){ global $post; $id = $post->ID; if ($post->post_parent){ $ancestors=get_post_ancestors($post->ID); $root=count($ancestors)-1; $id = $ancestors[$root]; } else if(is_singular('post') || is_archive() || (is_home() && !is_front_page())){ $id = get_option('page_for_posts'); } return $id; } /** Check if page Has Children **/ function hasChildren($pid) { $children = get_pages('child_of='.$pid); if($children) return true; else return false; }