Come controllare se siamo nell'admin o nel frontend?
Come si può verificare se siamo nell'area amministrativa o nel frontend?
Voglio utilizzare add_action non nel backend, ma solo nel frontend.
// Verifica se NON siamo nell'area amministrativa
if ( !is_admin() ) {
add_action( 'your_hook', 'your_function' );
}
// OPPURE verifica se siamo nel frontend
if ( !is_admin() && !wp_doing_ajax() ) {
add_action( 'your_hook', 'your_function' );
}

Dai un'occhiata al is_admin()
tag condizionale:
function wpse106895_dummy_func() {
if ( ! is_admin() ) {
// fai quello che devi fare
}
}
add_action( 'some-hook', 'wpse106895_dummy_func' );
is_admin()
restituisce true, se l'URL a cui si accede è nella dashboard / wp-admin. Quindi la sua negazione (tramite l'operatore not) è true quando ci si trova nel frontend.
Aggiornamento, vedi i commenti qui sotto:
function wpse106895_dummy_func() {
// fai quello che devi fare
}
if ( ! is_admin() ) add_action( 'some-hook', 'wpse106895_dummy_func' );
ti farà risparmiare overhead.

if ( is_admin() ) add_action()
. Non riempire l'array del filtro con valori che non ti serviranno mai.

Spesso verifico(avo) all'interno della callback - dopotutto, pensavo, le istruzioni non verranno mai interpretate se la condizione non è soddisfatta. Non ho mai considerato l'overhead nell'array del filtro. Mai.

! is_admin()
restituisce vero anche su wp-admin
e wp-login.php
, quindi non è un controllo per il frontend

Tieni presente che is_admin
non controllerà le chiamate cron e ajax. Quindi, se hai davvero bisogno solo del frontend, questo potrebbe non essere sufficiente.

Per seguire quanto menzionato da @janw, un controllo vero per il frontend sarebbe questo ( ! is_admin() || wp_doing_ajax() ) && ! wp_doing_cron()

Backend e frontend nel web moderno sono più uno stato mentale che un effettivo schema di URL o codice distinti. Se una pagina specifica rientri nel backend o nel frontend può cambiare in base al tipo di utente che sta accedendo alla pagina.
Nel contesto di WordPress, la domanda potrebbe essere riformulata come "Voglio aggiungere un'azione quando il tema sta generando HTML" (il che potrebbe o meno coprire tutta la generazione del frontend nel tuo caso specifico), e per questo, l'hook migliore da utilizzare è template_redirect
che viene attivato proprio prima che WordPress decida quale template del tema utilizzare per generare l'HTML.

Sfortunatamente la funzione is_admin()
non funziona correttamente se devi verificare in Widget::widget()
se il codice viene recuperato nel front-end o nella pagina di amministrazione.
Per questo motivo c'è un problema nel distinguere la visualizzazione di ciò che il widget mostra sul blog e ciò che viene visualizzato nella sottopagina widget.php
del pannello di amministrazione. Nella pagina dashboard widgets.php
, l'anteprima del widget è un output dal tag HTML <iframe>
, quindi is_admin()
non è una buona soluzione in questo caso.
Poiché non esiste una funzione is_front_end()
in WordPress, una soluzione interessante è creare una funzione che verifichi se le funzioni get_header()
e get_footer()
sono state attivate durante la richiesta corrente. Una funzione semplice.
<?php
function is_front_end() {
if ( did_action( 'get_header' ) || did_action( 'get_footer' ) )
return true;
}
?>
Ispirazione grazie alla risposta di @TheDeadMedic:
