Exécutez add_action hook si condition
Est-il possible de courir add_actionsous certaines conditions?
Par exemple, disons que je voulais faire écho "Hello" dans l'en-tête de la page d'accueil et ensuite utiliser la même fonction, mais faire écho "Hello" dans le pied de page de la page d'archive.
function say_hello() {
echo '<p>Hello!</p>';
}
// Echo in wp_head on the front page
if ( is_front_page() ) {
add_action('wp_head', 'say_hello');
}
// Echo in wp_footer on the archive
if ( is_archive() ) {
add_action('wp_footer', 'say_hello');
}
Ce qui précède ne fonctionne pas, des idées?
Réponses
Je suppose que ce code est exécuté directement à partir du functions.php de votre plugin, ce qui signifie que vous évaluez is_front_page()et is_archive()que vous chargez le plugin. C'est trop tôt - c'est avant qu'un état suffisant ait été initialisé pour savoir sur quelle page vous vous trouvez.
Pour résoudre ce problème, vous devez soit:
- déplacez la logique dans vos fonctions say_hello et vérifiez is_front_page ou is_archive au moment où vous affichez l'en-tête ou le pied de page:
function say_hello_in_header() {
// Echo in wp_head on the front page
if ( is_front_page() ) {
echo '<p>Hello!</p>';
}
}
add_action( 'wp_head', 'say_hello_in_header' );
function say_hello_in_footer() {
// Echo in wp_footer on the archive
if ( is_archive() ) {
echo '<p>Hello!</p>';
}
}
add_action( 'wp_footer', 'say_hello_in_footer' );
- ou choisissez une action à accrocher après que tout l'état a été configuré mais avant que l'en-tête et le pied de page aient été rendus, par exemple wp_enqueue_scripts, et effectuez les tests et les actions d'en-tête et de pied de page:
function enqueue_say_hellos() {
// Echo in wp_head on the front page
if ( is_front_page() ) {
add_action( 'wp_head', 'say_hello' );
}
// Echo in wp_footer on the archive
if ( is_archive() ) {
add_action( 'wp_footer', 'say_hello' );
}
}
add_action( 'wp_enqueue_scripts', 'enqueue_say_hellos' );
Cela dit, veuillez noter que wp_head n'est pas le bon endroit pour ajouter du HTML à la page, car il est exécuté à partir de la balise <head> de la page et non de la balise <body>. Tout contenu que vous y ajoutez apparaîtra au mauvais endroit, voire pas du tout. Si vous souhaitez modifier l'en-tête de votre page, vous devrez modifier votre modèle ou trouver un autre mécanisme.