Поддержка Проблемы и решения Для каждой странички — свой sidebar

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Atrax

    (@atrax)

    Ethical engineer

    Можно. Убираете из page.php вызов <?php get_sidebar() ?> и вместо него вписываете что-то вроде этого:

    <?php
    if (is_page(1)) include "sidebar1.php"
    elseif (is_page(2)) include "sidebar2.php"
    elseif (is_page(3)) include "sidebar3.php"
    else include "sidebar.php"
    ?>

    Если, конечно, мы с вами понимаем под «страницей» одно и то же…

    Или (для 2.7) get_sidebar(get_the_ID()). Тогда WP будет искать шаблоны sidebar-1.php, sidebar-2.php и т.д., в соответствии с ID записи. Если не найдет, загрузит sidebar.php.

    Первые два способа более правильные, но вот еще третий) Можно в функциях темы создать три сайдбара (отдельно для страниц, записей и главной):

    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Home Sidebar',
    'before_widget' => '<div class="block">',
    'after_widget' => '</div><div class="blockfooter"></div>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
    ));
    ?>
    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Post Sidebar',
    'before_widget' => '<div class="block">',
    'after_widget' => '</div><div class="blockfooter"></div>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
    ));
    ?>
    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Page Sidebar',
    'before_widget' => '<div class="block">',
    'after_widget' => '</div><div class="blockfooter"></div>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
    ));
    ?>

    Далее создать для каждого сайдбара свой PHP фаил
    sidebar-page.php
    sidebar-single.php
    sidebar.php
    и выводить в них виджеты. Этот способ использован в теме Revolution Chrome Jason Schuller

    Благодарю, пробую…

    Кстати разработал еще 1 способ, схожий с последним, но удобнее.

    Создал новый сайдбар как php файл, но он не появляется в админке в разделе виджеты справа.

    Может его еще надо где-то прописать?

    Напишу, как сделал я (для меня наиболее удобно) при этом использовалось два сайдбара.
    файл functions.php

    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Index Sidebar 1'));
    ?>
    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Index Sidebar 2'));
    ?>
    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Single Sidebar 1'));
    ?>
    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Single Sidebar 2'));
    ?>
    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Page Sidebar 1'));
    ?>
    <?php
    if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Page Sidebar 2'));
    ?>

    файл sidebar1.php

    <div class="side1">
     <ul>
    
    <?php if (!is_single() & !is_page()) : ?>
    <?php dynamic_sidebar(1) ?>
    <?php endif; ?> 
    
    <?php if (is_single()) : ?>
    <?php dynamic_sidebar(3) ?>
    <?php endif; ?>
    
    <?php if (is_page()) : ?>
    <?php dynamic_sidebar(5) ?>
    <?php endif; ?> 
    
     </ul>
    		</div>

    файл sidebar2.php

    <div class="side2">
    
    <?php if (!is_single() & !is_page()) : ?>
    <?php dynamic_sidebar(2) ?>
    <?php endif; ?> 
    
    <?php if (is_single()) : ?>
    <?php dynamic_sidebar(4) ?>
    <?php endif; ?>
    
    <?php if (is_page()) : ?>
    <?php dynamic_sidebar(6) ?>
    <?php endif; ?> 
    
    		</ul>
    		</div>

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Для каждой странички — свой sidebar» закрыта для новых ответов.