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

Я хотел бы показать другую боковую панель для двух конкретных сообщений (такой же тип пользовательских сообщений). Я понимаю, как это сделать, используя отдельные шаблоны для разных страниц, но я хочу, чтобы все это происходило на странице single-posttype.php. Или я думаю об этом неправильно? Моя конечная цель – показать различные текстовые виджеты в боковой панели на определенных сообщениях.

Я думаю, что Widget Logic – это то, что вы ищете. Он добавляет поле каждому виджету, чтобы вы могли указать, какое сообщение получит какие виджеты. Он использует стандартные условные теги, упрощающие его использование. Вы просто хотите сделать что-то вроде

is_single( 'Slug1-or-ID1' ) || is_single( 'Slug2-or-ID2' ) 

Вы также можете попробовать метод типа post, чтобы показать только определенный тип сообщения:

 //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} на фактическое имя / slug вашего CPT, если это необходимо.)

Затем в файле шаблона:

 $sidebar_id = ( 'custom-post-type-slug' == get_post_type() ? 'sidebar-{post-type}' : 'sidebar' ); dynamic_sidebar ( $sidebar_id ); 

Таким образом, вам не нужно создавать отдельные файлы шаблонов для вашего CPT; однако на Dashboard -> Appearance -> Widgets будут отображаться две отдельные области Dashboard -> Appearance -> Widgets , которые вам придется заполнять отдельно.

РЕДАКТИРОВАТЬ

Как вы показываете свои CPT?

Если вы используете archive-{post-type}.php и single-{post-type}.php , вы можете просто вызвать dynamic_sidebar( 'sidebar-{post-type}' ) (или как вы его назвали, когда вы зарегистрировали его) в этих файлах шаблонов.

В противном случае, если вы используете обычные single.php archive.php и single.php для отображения своих CPT, используйте исходный код, который я изначально предложил.

Для этого вам не нужен плагин! В одном из основных файлов есть фильтр под названием «sidebars_widgets», который позволит вам добиться этого очень легко! Я написал простой учебник о том, как это сделать. Показать / скрыть виджетов на определенных страницах . Проверьте пример там, найдите строку:

 if(is_front_page() || is_home()) 

и замените его на

 if(is_singular('posttype')) 

Это оно! Надеюсь, поможет!