Esegui add_action hook if condition

Sep 11 2020

È possibile correre add_actionin determinate condizioni?

Ad esempio, diciamo che volevo echo "Hello" nell'intestazione della prima pagina e quindi utilizzare la stessa funzione, ma echo "Hello" nel piè di pagina della pagina di archivio.

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

Quanto sopra non funziona, qualche idea?

Risposte

1 Rup Sep 10 2020 at 23:39

Immagino che questo codice venga eseguito direttamente dal functions.php del tuo plugin, il che significa che stai valutando is_front_page()e is_archive()mentre carichi il plugin. È troppo presto, prima che sia stato inizializzato uno stato sufficiente per sapere in quale pagina ti trovi.

Per risolvere questo problema, devi:

  1. sposta la logica nelle funzioni say_hello e controlla is_front_page o is_archive nel punto in cui stai eseguendo il rendering dell'intestazione o del piè di pagina:
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. oppure scegli un'azione da agganciare dopo che tutto lo stato è stato impostato ma prima che l'intestazione e il piè di pagina siano stati renderizzati, ad esempio wp_enqueue_scripts, ed esegui i test e le azioni di intestazione e piè di pagina lì:
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' );

Detto questo, tieni presente che wp_head non è il posto corretto per aggiungere HTML alla pagina, poiché viene eseguito dal tag <head> della pagina e non dal tag <body>. Qualsiasi contenuto aggiunto lì apparirà nel posto sbagliato, se non del tutto. Se vuoi modificare l'intestazione sulla tua pagina dovrai modificare il tuo modello o trovare qualche altro meccanismo.