Intereting Posts
удалять данные user_meta из базы данных для всех пользователей Как добавить (css) класс в пользовательскую ссылку, чтобы сделать его current_page_item Подписи для групп Больше полей, а не только отдельные поля Вставка выше шаблона комментария Перенаправление URL поддомена WordPress с использованием плагина qTranslate-X Что было бы командой PHP для удаления всех сообщений из категории X за последний месяц? Как присоединиться к запросу $ wpdb с метафорой пользователя, используя значение по умолчанию, если оно не существует? Как сделать только одну из моих страниц страницей блога? Как изменить тексты комментариев с определенным комментарием_ID – Вставить комментарий могу ли я заказать по одному настраиваемому полю и meta_query другой в том же запросе Metabox для отображения / хранения определенного типа тега post WordPress – регистрация боковой панели и добавление кнопки непосредственно после .textwidget Как получить URL-адрес для короткого кода? Что такое «основной запрос»? Запустить плагин снова после завершения ajax-вызова

Глубина пачки WordPress

В настоящее время я использую приведенный ниже код для отображения моих панировочных сухарей. Который работает отлично до определенного момента. Я хочу:

Главная> Уровень 1> Уровень 2> Уровень 3

Я получаю:

Главная> Уровень 1> Уровень 3

Он отображает одного родителя, так что, если ваша самая глубокая ссылка – это уровень 2, вы не можете сказать разницу. Но вы знаете, для сложных сайтов этого недостаточно.

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

Код:

function themename_breadcrumb() { global $post; echo '<ul class="breadcrumbs">'; if (!is_home()) { echo '<li><a href="'; echo get_option('home'); echo '">'; echo 'Home'; echo "</a></li>"; if (is_category() || is_single()) { echo '<li>'; the_category(' </li><li> '); if (is_single()) { echo "</li><li>"; the_title(); echo '</li>'; } } elseif (is_page()) { if($post->post_parent){ $anc = get_post_ancestors( $post->ID ); $anc_link = get_page_link( $post->post_parent ); foreach ( $anc as $ancestor ) { $output = "<li><a href=" . $anc_link . ">" . get_the_title( $ancestor ) . "</a>"; } echo $output; echo '</li><li> '; echo the_title(); echo '</li>'; } else { echo '</li><li> '; echo the_title(); echo '</li>'; } } } elseif (is_tag()) {single_tag_title();} elseif (is_day()) {echo"<li>Archive for "; the_time('F jS, Y'); echo'</li>';} elseif (is_month()) {echo"<li>Archive for "; the_time('F, Y'); echo'</li>';} elseif (is_year()) {echo"<li>Archive for "; the_time('Y'); echo'</li>';} elseif (is_author()) {echo"<li>Author Archive"; echo'</li>';} elseif (isset($_GET['paged']) && !empty($_GET['paged'])) {echo "<li>Blog Archives"; echo'</li>';} elseif (is_search()) {echo"<li>Search Results"; echo'</li>';} echo '</ul>'; } 

Solutions Collecting From Web of "Глубина пачки WordPress"

Делать то же самое более кратким образом:

 function breadcrump_page( $post ) { $format = '<a href="%s" title="%s">%s</a> &gt;'; $anc = array_map( 'get_post', array_reverse( (array) get_post_ancestors( $post ) ) ); $links = array_map( 'get_permalink', $anc ); foreach ( $anc as $i => $apost ) { $title = apply_filters( 'the_title', $apost->post_title ); printf( $format, $links[$i], esc_attr($title), esc_html($title) ); } echo apply_filters( 'the_title', $post->post_title ); } global $post; if ( $post->post_parent ) breadcrump_page( $post ); 

WordPress имеет основную функцию get_post_ancestors которая возвращает все идентификаторы родительских элементов для иерархической записи. Я назвал это, отменил порядок, потому что они возвращаются из прямого родителя к первому предку и, наконец, получают все объекты post и все постоянные ссылки с помощью пары array_map .

Выполнение этого – это всего лишь вопрос склеивать все части и выводить их.

Для иерархической навигации на странице, вот что я делаю:

 // Define Parent Page Hierarchy Crumbs for Child Pages elseif ( ! is_front_page() && is_page() && $post->post_parent ) { $parent_id = $post->post_parent; $breadcrumbs = array(); while ( $parent_id ) { $page = get_page($parent_id); $breadcrumbs[] = '<a href="' . get_permalink($page->ID) . '">' . get_the_title($page->ID) . '</a>'; $parent_id = $page->post_parent; } $breadcrumbs = array_reverse( $breadcrumbs ); foreach ( $breadcrumbs as $crumb ) { $hierarchy .= $delimiter . $crumb; } $hierarchy = $hierarchy . $delimiter; // Note: get_the_title() is filtered to output a // default title if none is specified $currentLocation = get_the_title(); } 

Обратите внимание, что раньше я определял $delimiter в функции. Мясо того, что вы ищете, здесь.

Сначала введите идентификатор родительской страницы текущей страницы:

 $parent_id = $post->post_parent; 

Затем настройте массив для хранения иерархических ссылок на родительские страницы:

 $breadcrumbs = array(); 

Затем прокрутите каждую родительскую страницу до тех пор, пока ее не будет больше, и добавьте построенные ссылки в массив:

 // Start looping while ( $parent_id ) { // Get the page object $page = get_page($parent_id); // Build the HTML link $breadcrumbs[] = '<a href="' . get_permalink($page->ID) . '">' . get_the_title($page->ID) . '</a>'; // Set the parent ID to the next parent, // to continue the loop. // Eventually, this will return 0, // at which time, the looping will end $parent_id = $page->post_parent; } 

Наконец, поместите HTML-ссылки в правильном порядке:

 $breadcrumbs = array_reverse( $breadcrumbs ); 

Теперь вы можете делать все, что хотите, с массивом $breadcrumbs .