WordPressでダイナミックサイドバー使ってサイドバーの切り替え


ウィジェットのサイドバーを作る

functions.phpのサイドバー記述をコピーして名前やIDを書き換え

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>',
    ) )

この箇所を探してコピーしてこのコードの直下に複製して、nameとidの部分を変更する。このnameはウィジェットのサイドバー一覧に表示されます。idはsidebar-xxx.phpを作るときに必要になる。

前に書いたこの記事に詳細があります。
【WordPress】カテゴリ-毎にサイドバーを切り替える STEP1:サイドバーウィジェットを追加する | 緑ナ日々

sidebar-xxx.phpを作る

sidebar.phpをコピーしてsidebar-xxx.phpを作る。xxxの部分は自由ですがあとで使います。sidebar-xxx.phpを開きコードの中から

<div id="secondary" class="widget-area" role="complementary">
            <?php if ( ! dynamic_sidebar( 'sidebar-1' ) ) : ?>

この部分を探してsidebar-1を先ほど作ったサイドバーのidに置き換える。

サイドバーの読み込み部分を変更する

category.phpやindex.phpのサイドバー読み込み部分に条件分岐を加えて作成したsidebar-xxx.phpを読み込むようにする。

どのファイルでも

<?php get_sidebar() ?>

という表記があるのでこの部分に条件分岐を加えます。

今回はcategory.phpをこんな感じにしました。処理的にはアーカイブページを開くときにカテゴリーがdevelopだったら指定したサイドバーファイルを読み込み、そうでなければ普通のサイドバーファイルを読み込んでね。という感じ。

<?php if(is_category('develop')): ?>
    <?php get_sidebar('xxx') ?>
<?php else: ?>
    <?php get_sidebar() ?>
<?php endif ?>

まとめ

  • ダイナミックサイドバーの記述をfunctions.phpに追記
  • sidebar-xxxファイルを作り、ファイル内で読み込むダイナミックサイドバーを指定する
  • サイドバー読み込む部分に分岐を仕掛けて読み込みたいsidebar-xxx.phpを指定する

編集後記

この手順でやったのにもかかわらずうまくいかない状態が続いてて一つ一つ状況を追っかけて行くとどうやらsidebar-xxxのファイルが読み込めてない。このファイルはさくらのサーバ管理ツールから作ったのだけどどうもその時の挙動がおかしかったのでそのせいかもしれない。ローカルで作ったものをアップしたら普通に動いた。

サーバ環境でのテストはやっぱ面倒くさいっすね。みんなトラブルシュートとかどうしてるんだろ。

参考ページ

WordPress のページによってサイドバーを切り替える方法 | ウェブル

ウィジェットスペースを作ってみる

WordPress › フォーラム » カテゴリに応じて、サイドバーを切り替えたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です