Отображение определенных динамических виджетов боковой панели на определенной странице


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

Я пытаюсь отобразить другую боковую панель на одной конкретной странице, чем на остальной части сайта. То, что я сделал бы год назад, это создайте шаблон страницы для этой страницы и создайте новый файл боковой панели, а затем включите файл боковой панели в шаблон страницы. Я обнаружил, что это не работает. Главными виновниками, которых я вижу, являются loop.php & loop-page.php, которых не было в урезанной теме, которую я обычно использовал при создании сайта давным-давно. Однако, похоже, что тот, кто держал эту штуку в руках до меня, скопировал тему "двадцать десять" и внес в нее изменения под новым именем.

Я зарегистрировал новый динамическая боковая панель в теме functions.php, и я могу видеть ее в разделе Виджеты панели мониторинга и добавлять в нее виджеты.

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

1.) Присвоил странице пользовательский шаблон template_news.php и разместил следующее, где должна называться боковая панель:

include ('sidebar-news.php');

Файл sidebar-news.php, содержащий код, который я скопировал из sidebar.php с идентификатором боковой панели "Новости", который я перечислил в functions.php:

<?php if ( is_active_sidebar( 'sidebar-news' ) ) : ?>

<div id="secondary" class="widget-area" role="complementary">
    <ul class="xoxo">
        <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
</div>

<?php endif; ?>

Шаблон страницы применяется к правильной странице.

2.) Вошел в page.php и изменился:

<?php get_sidebar(); ?>

Кому:

<?php 

if(is_page('18')) {
   include ('sidebar-news.php');
}
else {              
   get_sidebar(); 
} ?>

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

3.) Пробовал предыдущий в loop-page.php

4.) Поместил следующий условный оператор в sidebar.php:

<?php
if ( is_active_sidebar( 'sidebar-news' ) && is_page('18') ) : ?>
    <div id="sidebarnews" class="widget-area" role="complementary">
    <ul class="xoxo">
    <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
    </div>
<?php endif; ?>

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

Я обнаружил, что значение по умолчанию'sidebar.php `вызывается и отображается на странице, однако, несмотря на то, что мой условный оператор с идентификатором страницы присутствует, он не отображает пользовательские виджеты боковой панели.

Я также не могу найти, как на странице вызывается боковая панель по умолчанию, потому что полное удаление get_sidebar(); в моем пользовательском шаблоне template_news.php , page.php , или loop-page.php, похоже, ничего не делает.

Пожалуйста, кто-нибудь может рассказать мне, как добавить эту боковую панель на страницу.

Author: MikeSchinkel, 2011-09-16

2 answers

Я думаю, что вам может понадобиться просто запустить register_sidebar() в 'widgets_init' крючке. В теме TwentyTen есть примеры для register_sidebar() в файле functions.php, но вот как это может выглядеть:

add_action( 'widgets_init', 'twentyten_widgets_init' );
function twentyten_widgets_init() {
  register_sidebar( array(
    'name' => __( 'News Sidebar', 'yoursite' ),
    'id' => 'sidebar-news',
    'description' => __( 'The News Sidebar Area', 'yoursite' ),
    'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
    'after_widget' => '</li>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
  ));

  /*
   * THE REST OF THE SIDEBAR REGISTRATION CODE FROM twentyten_widgets_init() GOES HERE
   */
}

Кроме того, в вашем шаблоне страницы template_news.php используйте следующий код для вызова боковой панели, которая загрузит файл sidebar-news.php, созданный вами выше:

<?php get_sidebar( 'news' ); ?> 

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

 2
Author: MikeSchinkel, 2011-09-16 06:47:58

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

Отображать виджеты

Просто скройте виджеты на указанных страницах. Добавляет флажки для каждого виджета, чтобы показывать или скрывать его на каждой странице сайта.

Логика виджета

Логика виджетов позволяет управлять отображением виджетов на страницах с помощью условных тегов WP. Он также добавляет "widget_content" фильтр.

 1
Author: Sébastien Méric, 2013-04-16 21:49:31