Care este condiția pentru a verifica dacă suntem în admin sau frontend?
Care este condiția pentru a verifica dacă suntem în admin sau frontend?
Vreau să folosesc add_action nu în backend, ci doar în frontend.
if ( !is_admin() ) {
add_action( 'hook_name', 'function_name' );
}

Aruncă o privire la is_admin()
eticheta condițională:
function wpse106895_dummy_func() {
if ( ! is_admin() ) {
// fă ceea ce ai de făcut
}
}
add_action( 'some-hook', 'wpse106895_dummy_func' );
is_admin()
returnează true, dacă URL-ul accesat se află în panoul de administrare / wp-admin. Prin urmare, negația sa (prin operatorul not) este true când suntem în frontend.
Actualizare, vezi comentariile de mai jos:
function wpse106895_dummy_func() {
// fă ceea ce ai de făcut
}
if ( ! is_admin() ) add_action( 'some-hook', 'wpse106895_dummy_func' );
va reduce overhead-ul.

if ( is_admin() ) add_action()
. Nu umpleți array-ul de filtre cu valori de care nu aveți niciodată nevoie.

Deseori verific(am) în interiorul callback-ului - la urma urmei, am considerat că instrucțiunile nu vor fi niciodată interpretate dacă condiția nu este îndeplinită. Supraîncărcarea în array-ul de filtre nu am luat-o în considerare niciodată.

! is_admin()
returnează true și pe wp-admin
și wp-login.php
, deci nu este o verificare pentru frontend

Ține minte că is_admin
nu va verifica apelurile cron și ajax. Deci dacă ai nevoie cu adevărat doar de frontend, acest lucru poate să nu fie suficient.

Pentru a continua cum a menționat @janw, o verificare adevărată a frontend-ului ar arăta astfel: ( ! is_admin() || wp_doing_ajax() ) && ! wp_doing_cron()

Backend-ul și frontend-ul în mediul web modern sunt mai degrabă o stare mentală decât un model distinct de URL-uri sau cod. Dacă o anumită pagină este considerată backend sau frontend poate varia în funcție de tipul de utilizator care accesează pagina.
În contextul WordPress, întrebarea poate fi reformulată ca "Vreau să adaug o acțiune atunci când tema generează HTML" (ceea ce poate sau nu acoperi toată generarea de frontend în cazul tău specific), iar pentru aceasta, cel mai bun hook de utilizat este template_redirect
, care este declanșat chiar înainte ca WordPress să decidă ce șablon al temei să folosească pentru a genera HTML-ul.

Din păcate, funcția is_admin()
nu funcționează corect atunci când trebuie să verifici în Widget::widget()
dacă codul este afișat pe front-end sau pe pagina de administrare.
Din această cauză, există o problemă în a distinge între ceea ce afișează widget-ul pe blog și ceea ce apare pe subpagina widget.php
din panoul de administrare. Pe pagina widgets.php
din dashboard, previzualizarea widget-ului este generată prin intermediul tag-ului HTML <iframe>
, astfel is_admin()
nu este o soluție bună în acest caz.
Deoarece nu există o funcție is_front_end()
în WordPress, o soluție interesantă este să creăm o funcție care verifică dacă funcțiile get_header()
și get_footer()
au fost apelate în timpul cererii curente. Funcție simplă.
<?php
function is_front_end() {
if ( did_action( 'get_header' ) || did_action( 'get_footer' ) )
return true;
}
?>
Inspirație mulțumită răspunsului lui @TheDeadMedic:
