Esegui add_action hook if condition
È 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
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:
- 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' );
- 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.