it-swarm.com.de

Dynamische Seitenleisten auf mehreren Unterseiten

Ich baue eine Site in WordPress. Es hat mehrere Unterseiten, von denen viele unterschiedliche Seitenleisten erfordern. Daher habe ich ein Widget-Design und einige Sidebar-Widgets erstellt.

Ich habe eine bedingte Anweisung geschrieben, um verschiedene Seitenleisten auf verschiedenen Seiten anzuzeigen. Eine Widget-Seitenleiste wird jedoch trotz der bedingten Anweisung auf fast allen Seiten angezeigt.

Die Seitenleiste, die auf der gewünschten Seite angezeigt wird, ist hier zu sehen: http://www.africanhealthleadership.org/about/approach/

Die Unterseite, die eine andere Seitenleiste haben sollte, befindet sich unter Knowledge Resources> Research

Der Code lautet wie folgt. Ich bin ein totaler PHP Spazz, also habe ich wahrscheinlich etwas Dummes gemacht. Ich habe einfache Anführungszeichen um dynamic_sidebar (2) versucht, aber das hat nicht funktioniert.

Vielen Dank für jede Hilfe.

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

Einfacher und eleganter (höhere Wartbarkeit):

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

Ich weiß nicht, warum jemand prüft, ob dynamic_sidebar existiert. Es gibt es schon seit 9 Hauptversionen. Ich hoffe wirklich, dass Sie nicht für 2.1 oder niedriger entwickeln. Versuche dies:

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

Wenn Sie die bestimmte Seite kennen, die Sie verwenden möchten, kümmern Sie sich nicht um diesen Unterseitenmüll. Außerdem prüft diese Funktion nur, ob Sie sich im Allgemeinen auf einer Unterseite befinden, sagt Ihnen jedoch nicht, ob Sie sich auf einer bestimmten Unterseite befinden.

4
John P Bloch

Sie können einfach die Erweiterung "Widget Logic" verwenden, damit Sie keine Unterstützung für benutzerdefinierte Widgets in der Seitenleiste in die eigentliche Vorlage schreiben müssen.

1
rasjani