¿Cuál es la condición para verificar si estamos en el admin o en el frontend?
¿Cuál es la condición para verificar si estamos en el admin o en el frontend?
Quiero usar add_action no en el backend, sino solamente en el frontend.

Echa un vistazo a la is_admin()
etiqueta condicional:
function wpse106895_dummy_func() {
if ( ! is_admin() ) {
// haz lo que necesites
}
}
add_action( 'some-hook', 'wpse106895_dummy_func' );
is_admin()
devuelve verdadero si la URL que se está accediendo está en el panel de administración / wp-admin. Por lo tanto, su negación (a través del operador NOT) es verdadera cuando se está en el frontend.
Actualización, ver comentarios a continuación:
function wpse106895_dummy_func() {
// haz lo que necesites
}
if ( ! is_admin() ) add_action( 'some-hook', 'wpse106895_dummy_func' );
te ahorrará sobrecarga.

if ( is_admin() ) add_action()
. No llenes el array de filtros con valores que nunca necesitarás.

A menudo verificaba dentro del callback - después de todo, pensaba, las declaraciones nunca se interpretarán si no se cumple la condición. Nunca consideré la sobrecarga en el array de filtros. Nunca.

! is_admin()
devuelve verdadero también en wp-admin
y wp-login.php
, por lo que no es una verificación para el frontend

Ten en cuenta que is_admin
no verificará las llamadas cron y ajax. Así que si realmente necesitas solo el frontend, esto podría no ser suficiente.

Para continuar con lo mencionado por @janw, una verificación verdadera del frontend se vería así ( ! is_admin() || wp_doing_ajax() ) && ! wp_doing_cron()

El backend y el frontend en la web moderna son más un estado mental que un patrón de URL o código distinto. Si una página específica se considera backend o frontend puede cambiar según el tipo de usuario que acceda a ella.
En el contexto de WordPress, la pregunta podría reformularse como "Quiero agregar una acción cuando el tema está generando HTML" (lo cual podría o no cubrir toda la generación del frontend en tu caso específico), y para esto, el mejor hook a usar es template_redirect
que se ejecuta justo antes de que WordPress decida qué plantilla del tema usar para generar el HTML.

Desafortunadamente, la función is_admin()
no funciona correctamente si necesitas verificar en Widget::widget()
si el código se está ejecutando en el front-end o en la página de administración.
Debido a esto, existe un problema para distinguir entre la vista de lo que muestra el widget en el blog y lo que se muestra en la subpágina widget.php
del panel de administración. En la página widgets.php
del escritorio, la vista previa del widget es una salida de la etiqueta HTML <iframe>
, por lo que is_admin()
no es una buena solución en este caso.
Como no existe una función is_front_end()
en WordPress, una solución interesante es crear una función que verifique si las funciones get_header()
y get_footer()
se han ejecutado durante la solicitud actual. Una función sencilla.
<?php
function is_front_end() {
if ( did_action( 'get_header' ) || did_action( 'get_footer' ) )
return true;
}
?>
Inspiración gracias a la respuesta de @TheDeadMedic:
