web-dev-qa-db-ja.com

特定のウィジェットを1ページだけに追加する方法

自分のサイトの1ページにのみウィジェットを表示したいのですが、できないのですが。

私のすべてのサイトページに追加する必要がありますか。

6
itsme

ウィジェットをどこに表示するかによって異なります。

ウィジェットエリア(サイドバー)の登録から始めましょう:

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

これはとても簡単です。いくつかのカスタムマークアップを使って新しいウィジェット領域を登録します。

enter image description here

今、私たちはそれをどこかに見せなければなりません。 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' );
7
fuxia

特定の条件に基づいてウィジェットを表示できるようにするプラグインがいくつかあります。

別の解決策は、直接ページ編集画面から、ページごとにウィジェットのカスタムセットを定義することを可能にする以下のプラグインによって与えられます。

3
marcochiesi

あなたがあなたのテーマのテンプレートファイルを編集するのに慣れているなら:

場所を探す

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)の中でその関数を呼び出してください。

1
Vigs

あなたは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 );

これが役に立つことを願っています。乾杯!

0