こんにちは
現状、ページによる出し分けはできているのですが、
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 );
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 );
すみませんが私に読解力がないようなので他の方のアドバイスをお待ちください。
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' );
ishitakaさん、ありがとうございます。
IDを追って、コードを変更となると……。
頻繁に変更を加える箇所でもないので、
とりあえず、今まで通りやっていこうと思います。