wordpress3.5のテンプレート修正、追加に関しての質問です。

テンプレートによって違うサイドバーを表示させる事を想定しています。
例えるとカテゴリーページはsidebar.php、固定ページはsidebar1.php、アーカイブページはsidebar2.phoみたいなイメージです。sidebar.phpは管理画面の「外観」→「ウィジット」から設定できますが複数sidebar.phpを作成する場合、どのような手順で作成するのでしょうか。その作業方法を教えてください。

回答の条件
  • URL必須
  • 1人5回まで
  • 13歳以上
  • 登録:2013/03/07 15:46:59
  • 終了:2013/03/09 20:52:29

ベストアンサー

id:rouge_2008 No.1

rouge_2008回答回数594ベストアンサー獲得回数3512013/03/07 22:18:22

ポイント180pt

・サイドバー(※ウィジェットエリア)を作成します。
Twenty Elevenの「functions.php」の384行目以降に次の記述がありますので、関数「twentyeleven_widgets_init()」内に続けて記述してみてください。(※オリジナルテーマの場合は、参考にして作成してください。)

/**
 * Register our sidebars and widgetized areas. Also register the default Epherma widget.
 *
 * @since Twenty Eleven 1.0
 */
function twentyeleven_widgets_init() {

	register_widget( 'Twenty_Eleven_Ephemera_Widget' );

	register_sidebar( array(
		'name' => __( 'Main Sidebar', 'twentyeleven' ),
		'id' => 'sidebar-1',
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget' => "</aside>",
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );

/* ~ 略 ~ */

	register_sidebar( array(
		'name' => __( 'Footer Area Three', 'twentyeleven' ),
		'id' => 'sidebar-5',
		'description' => __( 'An optional widget area for your site footer', 'twentyeleven' ),
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget' => "</aside>",
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );

	// カテゴリーページ用サイドバーの追加
	register_sidebar( array(
		'name' => 'Category Main Sidebar', // 適当な名前
		'id' => 'sidebar-6', // 固有のID
		'description' => 'An optional widget area for your category pages sidebar',
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget' => "</aside>",
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );

	// 固定ページ用サイドバーの追加
	register_sidebar( array(
		'name' => 'Pages Main Sidebar', // 適当な名前
		'id' => 'sidebar-7', // 固有のID
		'description' => 'An optional widget area for your pages sidebar',
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget' => "</aside>",
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );

	// アーカイブ用サイドバーの追加
	register_sidebar( array(
		'name' => 'Archives Main Sidebar', // 適当な名前
		'id' => 'sidebar-8', // 固有のID
		'description' => 'An optional widget area for your archives sidebar',
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget' => "</aside>",
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );
}
add_action( 'widgets_init', 'twentyeleven_widgets_init' );


・関数リファレンス/register sidebar
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_sidebar


・各種ページ用のテンプレートを編集して、任意のサイドバーを表示するようにします。

カテゴリーページ「category.php」のサイドバーを読み込む位置に次の記述を追加します。(※「sidebar.php」という事ですから、引数を指定する必要はありません。)

get_sidebar();

・「sidebar.php」に次の記述を追加して、登録済みのサイドバーを表示するようにします。

		<!-- サイドバーを囲む要素のIDは任意で指定してください。この例ではTwenty Elevenから引用しています。 -->
		<div id="secondary" class="widget-area">
			<?php if ( ! dynamic_sidebar( 'sidebar-6' ) ) : ?>

			<!-- ここに記述する内容は、サイドバーが利用されていない場合に表示されます。 -->

			<?php endif; // end sidebar widget area ?>
		</div><!-- #secondary .widget-area -->

※「dynamic_sidebar()」には、表示するサイドバー(※「register_sidebar()」で登録済み)の名前または固有のIDを指定します。(ここでは、カテゴリーページ用のサイドバーのIDの「sidebar-6」としてあります。)


次に固定ページ「page.php」のサイドバーを読み込む位置に次の記述を追加します。(※「sidebar1.php」という事ですが、WordPressの仕様で「sidebar-引数に指定した名前.php」となっていますから、ファイル名は「sidebar-1.php」になります。引数には「1」を指定します。)

get_sidebar( '1' );

※上記と同じようにアーカイブページ「archive.php」にも追加します。
※各種ページで読み込むテンプレートファイルは、次のページも参照しておくといいです。
http://wpdocs.sourceforge.jp/テンプレート階層

※サイドバーのテンプレートファイル「sidebar-1.php」「sidebar-2.php」についても、「sidebar.php」と同じように作成します。


※次のように「is_active_sidebar('サイドバーの名前または固有のID')」を使用すると、指定したサイドバーが利用されているかどうか判定して、利用している時のみ表示する事ができますので、利用されていない時に任意のサイドバーを囲む要素ごと非表示にできます。(※Twenty Elevenの「sidebar-footer.php」参照)

	<?php if ( is_active_sidebar( 'sidebar-3' ) ) : ?>
	<div id="first" class="widget-area" role="complementary">
		<?php dynamic_sidebar( 'sidebar-3' ); ?>
	</div><!-- #first .widget-area -->
	<?php endif; ?>



・関数リファレンス/get_sidebar
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_sidebar

説明
現在のテーマディレクトリの sidebar.php テンプレートファイルを読み込みます。名前 ($name) を指定すると、指定したサイドバー sidebar-{name}.php を読み込みます。
sidebar.php ファイルがテーマに含まれていない場合は、デフォルトテーマの wp-includes/theme-compat/sidebar.php を読み込みます。

使い方

<?php get_sidebar( $name ); ?>

パラメータ
$name
(文字列) (オプション) sidebar-name.php を読み込む
初期値: なし


・関数リファレンス/dynamic sidebar
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/dynamic_sidebar

id:mkusume

いつも詳細な解説ありがとうございます。確認してみます。

2013/03/08 11:42:03
id:mkusume

確認しました。実現しました。本当にありがとうございます。

2013/03/09 20:51:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません