Ich möchte ein Widget nur auf einer Seite meiner Website anzeigen, da ich sehe, dass dies nicht möglich ist, oder?
Soll ich das für alle meine Seiten hinzufügen oder nicht?
Es hängt davon ab, wo Sie das Widget anzeigen möchten.
Beginnen wir mit der Registrierung des Widget-Bereichs (Seitenleiste):
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>',
)
);
}
Das ist ganz einfach. Wir registrieren einen neuen Widget-Bereich mit benutzerdefiniertem Markup.
Jetzt müssen wir es irgendwo zeigen. Wir könnten eine benutzerdefinierte Aktion in unsere page.php
-Vorlage einfügen:
do_action( 'show_sample_widget' );
Oder wir könnten eine vorhandene Aktion verwenden, um die Orte einzuschränken, an denen das Widget verfügbar ist. Zum Beispiel wird die Aktion loop_start
aufgerufen, wenn wir the_post()
zum ersten Mal in einer Schleife aufrufen. Wenn wir das Widget oben auf den Seiteninhalt setzen möchten, verwenden wir diesen Hook:
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__ );
}
Für eine benutzerdefinierte Aktion verwenden wir stattdessen:
add_action( 'show_sample_widget', 'wpse_76959_render_widget' );
Es gibt verschiedene Plugins, mit denen Widgets basierend auf bestimmten Bedingungen angezeigt werden können:
is_page('about')
Eine alternative Lösung bietet das folgende Plugin, mit dem Sie einen benutzerdefinierten Satz von Widgets auf Seitenbasis direkt über den Bildschirm "Seite bearbeiten" definieren können:
Wenn Sie die Vorlagendateien für Ihr Thema bearbeiten möchten, gehen Sie wie folgt vor:
Finde wo
dynamic_sidebar('side_bar_name');
wird aufgerufen und entweder davor oder danach oder an einer anderen Stelle auf Ihrer Website verwendet:
$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
Wenn Sie diesbezüglich sauberer sein möchten: Erstellen Sie in functions.php eine Funktion, die wie folgt aussieht:
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);
}
}
rufen Sie die Funktion auf mit:
call_my_widget( $post );
dies muss in der Schleife oder dort aufgerufen werden, wo die globale Variable $post
existiert.
Rufen Sie dann diese Funktion in Ihrer Vorlagendatei (page.php vielleicht?) Auf, um Ihre Ziel-Widgets nur auf Ihrer Zielseite anzuzeigen.
Sie können widget_display_callback
: https://developer.wordpress.org/reference/hooks/widget_display_callback/ verwenden und einfach die Seiten-ID im folgenden Code ändern.
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 );
Ich hoffe das hilft. Prost!