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


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

 1
Author: Drai, 2011-09-23

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));
 2
Author: Brooke., 2011-09-23 06:24:49

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

Боковые панели регистрации:

// 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, используйте условный код, который я первоначально предложил.

 3
Author: Chip Bennett, 2011-09-24 23:44:11

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

if(is_front_page() || is_home())

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

if(is_singular('posttype'))

Вот и все! Надеюсь, это поможет!

 1
Author: Rutwick Gangurde, 2011-09-24 04:53:01