измените боковую панель или просто виджеты для 2 отдельных сообщений определенного типа
Я хотел бы показать другую боковую панель для 2 конкретных сообщений (один и тот же пользовательский тип сообщения). Я понимаю, как это сделать, используя отдельные шаблоны для разных страниц, но я хочу, чтобы все это происходило в single-posttype.php страница. Или я думаю об этом неправильно? Моя конечная цель - показать различные текстовые виджеты на боковой панели в определенных сообщениях.
3 answers
Я думаю, что Логика виджета - это то, что вы ищете. Он добавляет поле к каждому виджету, чтобы вы могли указать, какая публикация получит какие виджеты. Он использует стандартные Условные теги , что упрощает его использование. Вы просто хотели бы сделать что-то вроде
is_single( 'Slug1-or-ID1' ) || is_single( 'Slug2-or-ID2' )
Вы также можете попробовать метод типа записи , чтобы показать только определенный тип записи:
//not tested but something like
global $post; return ('book' == get_post_type($post));
Отдельным подходом было бы зарегистрировать несколько боковых панелей, а затем вызвать каждую из них условно. например,
Боковые панели регистрации:
// Registers Primary Widget Area
register_sidebar(
array (
'name' => 'Sidebar',
'id' => 'sidebar',
'description' => __'Primary sidebar widget area',
'before_widget' => '<div class="widget">',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>',
)
);
// Registers Primary Widget Area
register_sidebar(
array (
'name' => '{Post Type} Sidebar',
'id' => 'sidebar-{post-type}',
'description' => __'{Post Type} sidebar widget area',
'before_widget' => '<div class="widget">',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>',
)
);
(Примечание: замените {post-type}
фактическим именем/слагом вашего CPT, в зависимости от обстоятельств.)
Затем в файле шаблона:
$sidebar_id = ( 'custom-post-type-slug' == get_post_type() ? 'sidebar-{post-type}' : 'sidebar' );
dynamic_sidebar ( $sidebar_id );
Таким образом, вам не нужно будет создавать отдельные файлы шаблонов для вашего CPT; однако в Dashboard -> Appearance -> Widgets
появятся две отдельные области виджетов, которые вам придется заполнить отдельно.
РЕДАКТИРОВАТЬ
Как вы отображаете свои CPTS?
Если вы используете archive-{post-type}.php
и single-{post-type}.php
, то вы можете просто вызвать dynamic_sidebar( 'sidebar-{post-type}' )
(или как вы его назвали при регистрации) в этих файлах шаблонов.
В противном случае, если вы используете обычные archive.php
и single.php
для отображения ваших CPTS, используйте условный код, который я первоначально предложил.
Для этого вам не нужен плагин! В одном из основных файлов определен фильтр под названием "sidebars_widgets", который позволит вам достичь этого очень легко! Я написал простой учебник о том, как это сделать. Показывать/скрывать виджеты на определенных страницах . Проверьте пример там, найдите строку:
if(is_front_page() || is_home())
И замените его на
if(is_singular('posttype'))
Вот и все! Надеюсь, это поможет!