Динамические Боковые Панели На Нескольких Подстраницах
Я создаю сайт на 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") );
}
?>
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);
}
?>
Я не знаю, почему кто-то проверяет, существует ли dynamic_sidebar
. Сейчас он существует уже 9 крупных релизов. Я действительно надеюсь, что вы не развиваетесь для версии 2.1 или ниже. Попробуйте это:
if( is_page('approach') )
dynamic_sidebar(1);
elseif( is_page('research') )
dynamic_sidebar(2);
Если вы знаете конкретную страницу, которую хотите использовать, не беспокойтесь об этом подстраничном мусоре. Кроме того, эта функция проверяет только то, находитесь ли вы на подстранице в целом, но она не сообщит вам, находитесь ли вы на определенной подстранице.
Вы можете просто использовать расширение "Логика виджетов", чтобы вам не нужно было записывать поддержку пользовательских виджетов на боковой панели в фактический шаблон.