• 解決済 ioxrxogi

    (@ioxrxogi)


    サイドバー1、サイトバー2と複数のサイドバーをページに設置して、
    そのサイドバーに同じウィジェットを設置したとして、
    ページにより表示分けをしたいと思っているのですが、可能でしょうか。

    現状、ページによる出し分けはできているのですが、
    サイドバーによる出し分けの条件分岐がわかりません。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • こんにちは

    現状、ページによる出し分けはできているのですが、

    widget_display_callback フィルターフックを使用しているのでしょうか?
    widget_display_callback の第3引数に、サイドバー(register_sidebar)の引数が渡されるので、これで判別できるのではないでしょうか。

    function my_widget_display_callback( $instance, $widge, $args ) {
    	if ( $args['id'] === 'sidebar-1' ) {
    		echo 'サイドバー1';
    	}
    	return $instance;
    }
    add_filter( 'widget_display_callback', 'my_widget_display_callback', 10, 3 );
    トピック投稿者 ioxrxogi

    (@ioxrxogi)

    ishitakaさん、ありがとうございます。

    そのコードだと、サイドバー1に設定したウィジェット全てに設定されてしまうようです。
    それとも、$widgeで出し分けられるのでしょうか。
    すいません。だとすると$widgeの使い方がわかりません。

    説明が足りなかったみたいなのですが、たとえば、
    サイドバーを
    名前:サイドバー右、ID:sidebar-1(1)、
    名前:サイドバー左、ID:sidebar-2(2)として設定しています。
    そこへ、ウィジェットの「カスタムHTML」にショートコードを使って「タグクラウド」(T)を貼っています。
    そのコードは、ポストタイプによって出しわけをしています。

    if( is_post_type_archive( 'shop' ) || is_singular( 'shop' ) ) {
    	echo '';
    } else { 
    	//タグクラウド
    }

    これは、思った通りにいったのですが、以下のような場合どうすればいいか悩んでいます。

    (1)(2)とも(T)を貼っているとして、
    Aページに(1)(2)を設定した場合、
    (2)には表示して、(1)には表示しないようにしたいのです。

    うまく説明できませんが、
    要するに、サイドバーによってウィジェットを出し分けるにはどうすればいいのでしょうか。

    経緯として、
    もともとサイドバーは3つあり、ポストタイプによる出しわけで良かったのですが、
    共通する部分が多いものをまとめようと思って試行錯誤しています。

    いまいち理解できていないのですが前回のレスでいいように思えるのですが・・・。

    function my_widget_display_callback( $instance, $widget, $args ) {
    	if ( is_single( Aページ ) && $args['id'] === 'sidebar-1' ) {
    		if ( $widget->id_base === 'custom_html' ) {
    			return false;
    		}
    	}
    	return $instance;
    }
    add_filter( 'widget_display_callback', 'my_widget_display_callback', 10, 3 );

    すみませんが私に読解力がないようなので他の方のアドバイスをお待ちください。

    トピック投稿者 ioxrxogi

    (@ioxrxogi)

    ishitakaさん、ありがとうございます。

    すいません。
    わたしがサイドバーとウィジェットの関係を理解していないのかもしれません。

    たとえば、
    サイドバーに「カスタムHTML」のウィジェットを3つ登録した場合、
    その3つをどう区別すればいいのでしょう。

    なるほど・・・ウィジェットの判別ですね。
    では、ウィジェット ID で判別するのはどうでしょうか。

    function my_widget_display_callback( $instance, $widget, $args ) {
    	if ( is_single( Aページ ) && $args['id'] === 'sidebar-1' ) {
    		if ( $widget->id === 'ウィジェット ID' ) {
    			return false;
    		}
    	}
    	return $instance;
    }
    add_filter( 'widget_display_callback', 'my_widget_display_callback', 10, 3 );
    

    ウィジェット ID を確認するには、HTML のコードを見なければいけません。
    なんかスマートな方法ではないような気がしますがどうでしょうか。

    下記のコードは、ウィジェット ID をウィジェットの編集画面に表示します。
    HTML のコードを追わなくてもいいので、ちょっとは楽になるかも。

    function my_in_widget_form( $widget ) {
    	if ( $widget->number != '__i__' ) {
    		echo '<p>ウィジェット ID: ' . $widget->id. '</p>';
    	}
    }
    add_action( 'in_widget_form', 'my_in_widget_form' );
    • この返信は7年、 6ヶ月前にishitakaが編集しました。
    • この返信は7年、 6ヶ月前にishitakaが編集しました。
    トピック投稿者 ioxrxogi

    (@ioxrxogi)

    ishitakaさん、ありがとうございます。

    IDを追って、コードを変更となると……。

    頻繁に変更を加える箇所でもないので、
    とりあえず、今まで通りやっていこうと思います。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「サイドバーの判定はできるのか?」には新たに返信することはできません。