Exécutez add_action hook si condition

Sep 11 2020

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

1 Rup Sep 10 2020 at 23:39

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:

  1. 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' );
  1. 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.