Intereting Posts
Определение «текущей_страницы» в пользовательских меню WordPress Загрузка файла wordpress с помощью ajax, когда сайт является ajaxyfi Как отобразить большинство Посмотреть сообщение в файле шаблона? Выборочно применяя действие на основе роли Как отображать данные из пользовательской таблицы в базе данных WordPress? Автоматическое изменение размера при записи с помощью редактора пользовательских сообщений WP WordPress 3.9 не использует пользовательский шаблон При каких обстоятельствах файл .maintenance не удаляется? Как удалить все сообщения, категории и теги из базы данных WordPress Как сделать страницу непознаваемой в поиске в блоге? Использование лицензированного MIT лицензированного niftyPlayer в WordPress Hosted Plugin (Premium и бесплатные версии) Обновить версию jquery Как добавить вкладки на страницу post.php для моего пользовательского сообщения изменение результата поиска только из выдержки до полного содержимого Как перенаправить 'url файла' в 'post url', то есть в attachment.php

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

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

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

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

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