web-dev-qa-db-ja.com

複数のサブページの動的サイドバー

WordPressでサイトを構築しています。複数のサブページがあり、その多くは異なるサイドバーを必要とします。それで、私はウィジェット化されたテーマを持っています、そしてまた私はいくつかのサイドバーウィジェットを作成しました。

異なるページに異なるサイドバーを表示するための条件付きステートメントを書きました。ただし、条件付きステートメントにかかわらず、ウィジェット化された1つのサイドバーがほぼすべてのページに表示されます。

目的のページに表示されているサイドバーはここで見ることができます: http://www.africanhealthleadership.org/about/approach/

別のサイドバーを表示する必要があるサブページは、Knowledge Resources> Researchの下にあります。

コードは以下の通りです。私は全体の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") );
    }
?>
1
Jeff Tancil

より簡単でエレガント(メンテナンス性)

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

dynamic_sidebarが存在するかどうかを誰かが確認する理由がわかりません。現在9つのメジャーリリースがあります。私は本当にあなたが2.1以下のために開発していないことを願っています。これを試して:

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

あなたが使いたい特定のページを知っているならば、そのサブページのがらくたを気にしないでください。その上、この関数はあなたが一般的にサブページにいるかどうかをチェックするだけですが、特定のサブページにいるかどうかはわかりません。

4
John P Bloch

あなたはただ "Widget Logic"拡張を使うことができるので、サイドバーのカスタムウィジェットのためのサポートを実際のテンプレートに書く必要はありません。

1
rasjani