it-swarm.dev

Dynamické postranní panely na více podstránek

Stavím web ve WordPressu. Má více podstránek, z nichž mnohé vyžadují různé postranní panely. Mám tedy widgetized téma a také jsem vytvořil několik widgetů sidebar.

Napsal jsem podmíněné prohlášení pro zobrazení různých postranních panelů na různých stránkách. Nicméně, jeden widgetized sidebar se zobrazí na téměř všech stránkách i přes podmíněné prohlášení.

Postranní panel, který se zobrazuje na požadované stránce, naleznete zde: http://www.africanhealthleadership.org/about/approach/

Podstránka, která by měla mít jiný postranní panel, je v části Prostředky znalostí> Výzkum

Kód je následující. Jsem celkem PHP spazz, takže jsem asi udělal něco hloupého. Zkoušel jsem jednoduché citace kolem dynamic_sidebar (2), ale to nefungovalo.

Děkuji za pomoc.

<?php 
     if ( is_subpage('approach') ) {
     if (!function_exists ( dynamic_sidebar(1) ) ) ; 
}
    elseif ( is_subpage('research')) {
    if (!function_exists( dynamic_sidebar(2)) || !dynamic_sidebar( "Sidebar2") );
    }
?>
1
Jeff Tancil

Snadnější a elegantní (vyšší údržba):

<?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
kaiser

Nevím, proč někdo kontroluje, zda dynamic_sidebar existuje. Je to už asi 9 velkých vydání. Opravdu doufám, že nebudete vyvíjet 2,1 nebo nižší. Zkuste to:

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

Pokud znáte konkrétní stránku, kterou chcete použít, neobtěžujte se s nevyžádanou stránkou. Kromě toho tato funkce pouze kontroluje, zda jste na podstránce obecně, ale neřekne vám, zda jste na konkrétní podstránce.

4
John P Bloch

Dalo by se použít pouze "Widget Logic" rozšíření, takže nepotřebujete podporu zápisu pro vlastní widgety v postranním panelu do skutečné šablony.

1
rasjani