Intereting Posts
Сумасшедший вопрос – обновление идентификатора сообщения Разработка на localhost удаляет "index.php" Перемещение WordPress из корня в подпапку Как скрыть элемент из меню для выведенных из системы пользователей (без плагина) Разбиение на страницы для query_posts (); Запросить пользователей для загрузки аватара при регистрации как визуализировать виджетов панели управления в wordpress admin Как изменить формулировку в wp-admin back-end? Отображать дату и информацию об авторе Меню списка HTML в меню WordPress Как я могу динамически извлекать имя таксономии пользовательского назначения из текущего сообщения? Установите значение по умолчанию «Link CSS Class» в редакторе дополнительных медиа-админов Штрих-коды стиля в Visual Editor Создание определенного размера миниатюры на лету? Как отобразить некоторые выбранные метаданные пользователя на определенной странице с помощью короткого кода?

Отображать пользовательские типы сообщений в wp_list_pages

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

У меня есть следующие настраиваемые типы сообщений: Events, Blog & News – все это страницы внуков News & Events, которые являются дочерней страницей раздела About:

  • Около
    • Новости и события
      • Блог
      • Мероприятия
      • Новости

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

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

Как отобразить иерархию структуры страницы на боковой панели на странице архива?

Мой код боковой панели выглядит так:

<aside class="default-sidebar"> <?php if ( 0 == $post->post_parent ) { ?> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <?php } else { $parents = get_post_ancestors( $post->ID ); $parent_title = apply_filters( "the_title", get_the_title( end ( $parents ) ) ); $parent_url = apply_filters( "the_permalink", get_the_permalink( end ( $parents ) ) ); ?> <h4><a href="<?php echo $parent_url; ?>"><?php echo $parent_title; ?></a></h4> <?php } ?> <button id="default-sidebar-toggle--js" class="default-sidebar-toggle">Pages in this section</button> <div class="default-sidebar-toggle-menu" id="default-sidebar-toggle-menu--js"> <?php if(!$post->post_parent){ $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0"); } else { if($post->ancestors) { $ancestors = end($post->ancestors); $children = wp_list_pages("title_li=&child_of=".$ancestors."&echo=0"); } } if ($children) { ?> <ul><?php echo $children; ?></ul> <?php } ?> </div> 

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

Solutions Collecting From Web of "Отображать пользовательские типы сообщений в wp_list_pages"

Чтобы упростить вещи, сначала сделайте свои архивы актуальными Архивы – не Страницы. Это поможет вам позже перечислять правильный контент.

 unregister_post_type('blog'); unregister_post_type('event'); unregister_post_type('news'); 

Отмена регистрации типа сообщения не приведет к удалению какого-либо контента, он просто гарантирует, что при их повторной регистрации настройки вступят в силу.

Подстройте свои вызовы register_post_type которые должны выглядеть примерно так:

 register_post_type('blog', array( ... a bunch of settings ... ) ); 

и настроить или добавить has_archive и rewrite . Измените часть «новости и события» на все, что происходит с вашей страницей новостей и событий:

 register_post_type('blog', array( ... a bunch of settings ..., 'has_archive' => 'news-and-events/blog', 'rewrite' => array('slug' => 'news-and-events/blog' ) ); 

(делать то же самое для всех трех типов сообщений, заменяя «блог» для текущего типа сообщения)

На этом этапе вам нужно будет удалить страницы, поэтому WordPress не путается, показывать ли страницу или архив. Вы также должны посетить страницу Настройки> Постоянная ссылка в wp-admin. Вам не нужно изменять какие-либо настройки; просто посещение этой страницы заставит WP обновить постоянные ссылки и обеспечить доступ к новым Архивам.

Затем создайте или отредактируйте archive.php в своей теме. (Если вы еще не используете дочернюю тему или настраиваемую тему, остановите и создайте дочернюю тему, чтобы при обновлении родительской темы вы не потеряли свои правки.) Теперь вы можете добавить условие, чтобы всякий раз, когда вы находятся в блоге, событии или в архиве новостей, вы видите эту боковую панель.

 // Check the main query to see if this is one of the archives we're targeting. $current_post_type = $wp_query->query['post_type']; // If so: if($current_post_type == 'blog' || $current_post_type == 'event' || $current_post_type == 'news') { // Display the sidebar. (edit 'name-of-your-sidebar') if(!function_exists('dynamic_sidebar') || !dynamic_sidebar('name-of-your-sidebar')): endif; } // Otherwise, do nothing here. Or, insert a different sidebar that will apply to all other archives, such as Post Categories. 

Похоже, что у вас нет боковой панели, установленной как динамическая виджетная боковая панель. Таким образом, вы можете либо заменить вызов «dynamic_sidebar» выше на жестко закодированную боковую панель, либо превратить свой код листинга в виджет. Я бы рекомендовал этот подход, так как тогда вы сможете более легко контролировать, где он появляется на сайте.