自分のサイトの1ページにのみウィジェットを表示したいのですが、できないのですが。
私のすべてのサイトページに追加する必要がありますか。
ウィジェットをどこに表示するかによって異なります。
ウィジェットエリア(サイドバー)の登録から始めましょう:
add_action( 'wp_loaded', 'wpse_76959_register_widget_area' );
function wpse_76959_register_widget_area()
{
register_sidebar(
array (
'name' => __(
'Widgets on page Sample Page',
'theme_textdomain'
),
'description' => __(
'Will be used on a page with a slug "sample-page" only.',
'theme_textdomain'
),
'id' => 'sample-only',
'before_widget' => '<div id="sample-only-widget">',
'after_widget' => '</div>',
'before_title' => '<h2>',
'after_title' => '</h2>',
)
);
}
これはとても簡単です。いくつかのカスタムマークアップを使って新しいウィジェット領域を登録します。
今、私たちはそれをどこかに見せなければなりません。 page.php
テンプレートにカスタムアクションを追加することができます。
do_action( 'show_sample_widget' );
あるいは、既存のアクションを使用することもできます。これはウィジェットが利用可能な場所を制限します。たとえば、ループ内で初めてthe_post()
を呼び出したときに、アクションloop_start
が呼び出されます。ウィジェットをページコンテンツの一番上に設定したい場合は、そのフックを使用します。
add_action( 'loop_start', 'wpse_76959_render_widget' );
function wpse_76959_render_widget()
{
is_page( 'sample-page' ) && dynamic_sidebar( 'sample-only' );
remove_action( current_filter(), __FUNCTION__ );
}
カスタムアクションの場合は代わりに使用します。
add_action( 'show_sample_widget', 'wpse_76959_render_widget' );
特定の条件に基づいてウィジェットを表示できるようにするプラグインがいくつかあります。
is_page('about')
別の解決策は、直接ページ編集画面から、ページごとにウィジェットのカスタムセットを定義することを可能にする以下のプラグインによって与えられます。
あなたがあなたのテーマのテンプレートファイルを編集するのに慣れているなら:
場所を探す
dynamic_sidebar('side_bar_name');
が呼び出され、その前後のどちらかに、あるいはあなたのサイトのどこでも使用できます。
$pageTitle = get_the_title($post->ID);
$targetPage = 'the title of the page you want to target goes here';
if($pageTitle == $targetTitle){
the_widget( 'the_widget_unique_id_aka_name', $instance, $args);
}
//the_widget() calls a specific widget and displays it
もっときれいにしたいのなら:functions.phpに次のような関数を作成してください。
function call_my_widget( $post ){
$pageTitle = get_the_title($post-ID);
$targetPage = 'the title of the page you want to target goes here';
if($pageTitle == $targetTitle){
the_widget( 'the_widget_unique_id_aka_name', $instance, $args);
}
}
次のようにして関数を呼び出します。
call_my_widget( $post );
これは、ループ内または$post
グローバル変数が存在する場所で呼び出す必要があります。
それからあなたのターゲットページだけにあなたのターゲットウィジェットを表示するためにあなたのテンプレートファイル(おそらくpage.php)の中でその関数を呼び出してください。
あなたはwidget_display_callback
を使うことができます: https://developer.wordpress.org/reference/hooks/widget_display_callback/ そして単に以下のコードのページIDを変えることができます。
function custom_display_callback( $instance, $widget, $args ){
if( is_page( 10 ) ){
return false;
}
return $instance;
}
add_filter( 'widget_display_callback', 'custom_display_callback', 50, 3 );
これが役に立つことを願っています。乾杯!