Динамические Боковые Панели На Нескольких Подстраницах


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

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

Боковую панель, которая появляется на нужной странице, можно увидеть здесь: http://www.africanhealthleadership.org/about/approach/

Подстраница, которая должна иметь другую боковую панель, находится в разделе Ресурсы знаний> Исследования

Код выглядит следующим образом. Я полный фанат PHP, так что, скорее всего, я сделал что-то глупое. Я пробовал одинарные кавычки вокруг dynamic_sidebar(2), но это не сработало.

Спасибо за любую помощь.

<?php 
     if ( is_subpage('approach') ) {
     if (!function_exists ( dynamic_sidebar(1) ) ) ; 
}
    elseif ( is_subpage('research')) {
    if (!function_exists( dynamic_sidebar(2)) || !dynamic_sidebar( "Sidebar2") );
    }
?>
Author: John P Bloch, 2010-09-30

3 answers

Более простой и элегантный (более высокая ремонтопригодность):

<?php 
// Your sidebar should have the wp_meta action hook
wp_meta();

// in ex. your functions.php
function my_sidebar_content() {
    // "About" Page
    if ( is_page('about') ) {
        // If some widget is added via Admin > Design > Widgets
        if ( is_active_sidebar( 'widgets-sidebar-default' ) ) {
            // Display Widgets
            dynamic_sidebar( 'widgets-sidebar-default' );
        }
        // Default Content before Widgets were added
        else {
            _e('default static content', TEXTDOMAIN);
        }
    }
    // "Links" Page
    elseif ( is_page('links') ) {
        if ( is_active_sidebar( 'widgets-sidebar-links' ) ) {
            dynamic_sidebar( 'widgets-sidebar-links' );
        }
        else {
            _e('default static content', TEXTDOMAIN);
        }
    }
}
add_action( 'wp_meta', 'my_sidebar_content', 10 );

# ===================================================
// OR:
wp_meta();

// functions.php
function load_my_sidebars() {
    // "About" Page
    if ( is_page('about') ) {
        get_template_part( 'sidebar_content', 'default' );
    }
    // "Links" Page
    elseif ( is_page('links') ) {
        get_template_part( 'sidebar_content', 'links' );
    }
}
add_action( 'wp_meta', 'load_my_sidebars', 10 );

// in sidebar_content-default.php
    // If some widget is added via Admin > Design > Widgets
    // You can add any static content right here before the widgets
    if ( is_active_sidebar( 'widgets-sidebar-default' ) ) {
        // Display Widgets
        dynamic_sidebar( 'widgets-sidebar-default' );
    }
    // Default Content before Widgets were added
    else {
        _e('default static content', TEXTDOMAIN);
    }
    // You can add any static content right here after the widgets

// in sidebar_content-links.php
    if ( is_active_sidebar( 'widgets-sidebar-links' ) ) {
        dynamic_sidebar( 'widgets-sidebar-links' );
    }
    else {
        _e('default static content', TEXTDOMAIN);
    }
?>
 1
Author: kaiser, 2011-01-27 19:05:39

Я не знаю, почему кто-то проверяет, существует ли dynamic_sidebar. Сейчас он существует уже 9 крупных релизов. Я действительно надеюсь, что вы не развиваетесь для версии 2.1 или ниже. Попробуйте это:

if( is_page('approach') )
  dynamic_sidebar(1);
elseif( is_page('research') )
  dynamic_sidebar(2);

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

 4
Author: John P Bloch, 2010-10-01 14:57:52

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

 1
Author: rasjani, 2011-05-03 06:18:35