Je voudrais montrer un widget dans une seule page de mon site, car je peux voir que ce n'est pas possible, non?
Dois-je ajouter cela pour toutes les pages de mon site ou non?
Cela dépend de l'endroit où vous souhaitez afficher le widget.
Commençons par l’enregistrement de la zone de widget (barre latérale):
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>',
)
);
}
C'est assez simple. Nous enregistrons une nouvelle zone de widget avec un balisage personnalisé.
Maintenant, nous devons le montrer quelque part. Nous pourrions ajouter une action personnalisée dans notre modèle page.php
:
do_action( 'show_sample_widget' );
Ou nous pourrions utiliser une action existante, cela limiterait les endroits où le widget est disponible. Par exemple, l'action loop_start
est appelée la première fois que nous appelons the_post()
dans une boucle. Si nous voulons placer le widget en haut du contenu de la page, nous utilisons ce crochet:
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__ );
}
Pour une action personnalisée, nous utiliserons plutôt:
add_action( 'show_sample_widget', 'wpse_76959_render_widget' );
Il existe plusieurs plugins permettant d'afficher des widgets en fonction de conditions spécifiques:
is_page('about')
Une autre solution est fournie par le plugin suivant, qui vous permet de définir un ensemble personnalisé de widgets page par page, directement à partir de l'écran de la page d'édition:
Si vous êtes à l'aise pour éditer les fichiers de modèles de votre thème:
Trouver où
dynamic_sidebar('side_bar_name');
est appelé, et avant ou après, ou pratiquement n'importe où sur votre site, utilisez:
$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
Si vous voulez être plus clair à ce sujet: Créez une fonction dans functions.php qui ressemblerait à ceci:
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);
}
}
appeler la fonction avec:
call_my_widget( $post );
cela doit être appelé dans la boucle ou lorsque la variable globale $post
est existante.
Appelez ensuite cette fonction dans votre fichier de modèle (page.php peut-être?) Pour afficher vos widgets cibles uniquement sur votre page cible.
Vous pouvez utiliser widget_display_callback
: https://developer.wordpress.org/reference/hooks/widget_display_callback/ et changer simplement l'id de la page dans le code ci-dessous.
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 );
J'espère que ça aide. À votre santé!