Разные боковые панели для разных страниц в Wordpress

Я пытаюсь создать тему на WordPress (версия 3.3.2), но у меня есть несколько проблем с отображением на боковой панели другого набора виджетов на определенных страницах.

Я пробовал несколько онлайн-руководств и, в частности, этот http://www.rvoodoo.com/projects/wordpress/wordpress-tip-разные-боковыепанели-на-разных-страницах/ но, к сожалению, боковая панель не меняется, когда я перехожу на другую страницу

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

<?php register_sidebar( //register sidebar
    array(
        'name' => 'Right-side',
        'before_widget' => '<div class="rightwidget">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="widgettitle">',
        'after_title' => '</h3>',
        ));


        register_sidebar( //register second sidebar
    array(
        'name' => 'Second-right',
        'before_widget' => '<div class="rightwidget">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="widgettitle">',
        'after_title' => '</h3>',
        ));

?>

После этого я создал файлы sidebar.php и sidebar-second.php, чтобы иметь возможность их вызывать.

сайдбар.php

<div id="sidebar">
    <?php if (!function_exists('dynamic_sidebar') || !dynamic_sidebar('Right-side')) : ?>
        <h3 class="widget-title">No widget added</h3>
        <p> Please add some widgets</p>

    <?php endif; ?>
    </div><!--ends sidebar-->

сайдбар-второй.php

 <div id="sidebar">
    <?php if (!function_exists('dynamic_sidebar') || !dynamic_sidebar('Second-right')) : ?>
        <h3 class="widget-title">No widget added</h3>
        <p> Please add some widgets</p>

    <?php endif; ?>
    </div><!--ends sidebar-->

И затем я добавил заменить мой оператор <?php get_sidebar() ; ?> следующим условным

<?php if( is_page('225') ) : ?>
<?php dynamic_sidebar('second'); ?>
<?php else : ?>
<?php get_sidebar() ; ?>
<?php endif ; ?>

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


person Harry    schedule 15.06.2012    source источник
comment
Я только что понял, что ваш код пытается найти страницу с slug 225, а не с идентификатором 225. Попробуйте удалить кавычки примерно с 225 и посмотрите, сработает ли это.   -  person Andrew    schedule 15.06.2012
comment
Я только что попробовал это, и результат все тот же.   -  person Harry    schedule 16.06.2012
comment
Вы сделали некоторую отладку, чтобы убедиться, что вы находитесь на странице, о которой вы думаете? Например, <?php echo $post->ID ?> и убедитесь, что выводит 225?   -  person Andrew    schedule 16.06.2012
comment
Я только что запустил код и заметил, что он выводит число для каждого сообщения в блоге, а не 225, как указано в адресной строке. Я также заметил, что боковая панель меняется, когда она применяется к другим страницам, но не к этой. Обратите внимание, что рассматриваемая страница является страницей моего блога.   -  person Harry    schedule 16.06.2012
comment
Вы имеете в виду, что это страница каталога блога, такая как index.php или archive.php? Или это конкретный пост в блоге?   -  person Andrew    schedule 16.06.2012
comment
Кажется, я запустил код в цикле, поэтому он дает мне идентификатор для каждого сообщения в блоге. Я только что попробовал код вне цикла, и вместо этого он печатает 1.   -  person Harry    schedule 16.06.2012
comment
Да, это страница каталога блога (index.php).   -  person Harry    schedule 16.06.2012
comment
Хорошо. Если вам нужна альтернативная боковая панель ТОЛЬКО на странице индекса блога, тогда вы можете отказаться от предложения if и вызвать get_sidebar('second') непосредственно на странице индекса при условии, что у вас есть отдельные файлы single.php и/или page.php для отображения сообщений и страниц< /я>   -  person Andrew    schedule 16.06.2012
comment
Это сработало!!!! Спасибо! другие страницы теперь имеют другую боковую панель. Я действительно ценю это. Любые идеи относительно того, почему другой метод не работал?   -  person Harry    schedule 16.06.2012
comment
Без проблем. Я столкнулся с той же проблемой не так давно. Если я смог помочь, пожалуйста, проголосуйте или примите мой ответ. Удачи!   -  person Andrew    schedule 16.06.2012


Ответы (3)


Похоже, вы используете <?php dynamic_sidebar('second'); ?> вместо <?php get-sidebar('second'); ?>

Что делает get_sidebar('foo'), так это ищет файл с именем 'sidebar-foo.php' в корневом каталоге вашей темы и включает его. dynamic_sidebar('bar'), с другой стороны, ищет боковую панель, зарегистрированную с помощью:

<?php register_sidebar( array( 'name' => 'bar' ... ) ) ?>

Надеюсь это поможет!

person Andrew    schedule 15.06.2012
comment
Спасибо за совет. Я только что изменил <?php dynamic_sidebar('second') ; ?> на <?php get_sidebar('second') ; ?>, но это все равно не работает. - person Harry; 15.06.2012

Почему бы вам не использовать плагин пользовательской боковой панели?

Он действительно прост в использовании и не требует никакого кодирования.

person Manuel    schedule 15.06.2012

У вас есть две боковые панели. когда вы хотите использовать второй файл боковой панели на определенной странице вместо вызова

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

ПЫТАТЬСЯ

<?php get_sidebar('sidebar-second.php') ; ?>

это должно помочь

person Ashiquzzaman Kiron    schedule 27.06.2015
comment
пытался отформатировать код, не совсем уверен, что это то, что вы намеревались, пожалуйста, просмотрите - и при необходимости исправьте - редактирование :-) - person kleopatra; 27.06.2015