¿Cuándo se inicia wp_loaded solo con admin o solo cuando el usuario ingresa al sitio o ambos?

2

¿Cuándo se inicia wp_loaded ?

Estoy intentando agregar una función que descarga un archivo grande para la base de datos de plugin, y necesito que se ejecute cada vez que un usuario / administrador / usuario desconocido se ponga en la interfaz, después de que el sitio esté completamente cargado, de modo que no esté cualquier retraso con la velocidad del sitio y la experiencia del usuario.

Yo uso este script:

// add update check when admin login
if (is_admin()) {
    function wp_plugin_update() {
            include( plugin_dir_path( __FILE__ ) . 'wp-plugin-update.php');
    }
    add_action( 'admin_init', 'wp_shabbat_update' );
}
// add update check when user enter the site after footer loaded
if (!(is_admin() )) {
    function wp_plugin_update() {
        include( plugin_dir_path( __FILE__ ) . 'wp-plugin-update.php');
        }
    add_action( 'wp_loaded', 'wp_plugin_update' );
}

¿Puedo usar esto solo y funcionará con el administrador y cuando el usuario ingrese al sitio? :

function wp_plugin_update() {
        include( plugin_dir_path( __FILE__ ) . 'wp-plugin-update.php');
        }
add_action( 'wp_loaded', 'wp_plugin_update' );
    
pregunta DrMosko 14.01.2016 - 06:15

3 respuestas

2

wp_loaded se activa tanto para el frente como para la sección de administración del sitio.

  

Este enlace de acción se activa una vez que WordPress, todos los complementos y el tema están completamente cargados e instanciados.

Debido a que está verificando las actualizaciones de los complementos, podría ser mejor engancharse en admin_init en lugar de wp_loaded - asumiendo que quiere saber si a user está conectado y está viendo la sección admin del sitio.

function wpse_20160114_admin_init_update_plugin() {

    // don't run on ajax calls
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
       return;
    }

    // only administrators can trigger this event
    if(is_user_logged_in() && current_user_can('manage_options')) 
    {
        @include(plugin_dir_path(__FILE__) . 'wp-plugin-update.php');
    }
}

add_action('admin_init', 'wpse_20160114_admin_init_update_plugin');

En el caso de que desee ejecutar en el front-end para todos los usuarios

function wpse_20160114_update_plugin() {

    // don't run on ajax calls
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    // only run on front-end
    if( is_admin() ) {
        return;
    }

    include(plugin_dir_path(__FILE__) . 'wp-plugin-update.php');
}

add_action('wp_loaded', 'wpse_20160114_update_plugin');

En lo que respecta a mis pruebas, wp_loaded se dispara después de que init pero antes de admin_init .

Front-End

  • [ init ]
  • [ widgets_init ]
  • [ wp_loaded ]

Admin

  • [ init ]
  • [ widgets_init ]
  • [ wp_loaded ]
  • [ admin_menu ]
  • [ admin_init ]

enlace

    
respondido por el jgraup 14.01.2016 - 06:30
1

wp_loaded ejecuta front-end y back-end independientemente del usuario y la página. Cada vez que se solicite una página, se ejecutará wp_loaded .

Por lo general, cuando se ejecuta wp_loaded , Wordpress termina de cargarse y también es el primer enlace disponible para usar después de que WordPress esté completamente cargado. Los usuarios ya han sido validados / autenticados ( los usuarios ya se autenticaron en init , esto sucede en el front end y el back end ) en este momento, por lo que los datos ya están disponibles.

Debería consultar la secuencia de ejecución del enganche de acción para las acciones del extremo frontal y posterior y determinar qué gancho será mejor para la aplicación específica que necesita para ejecutar. Tenga en cuenta que ciertas acciones como init y wp_loaded se ejecutan tanto en el extremo delantero como en el extremo trasero, por lo que deberá realizar la verificación is_admin() para apuntar específicamente al extremo delantero o al extremo trasero según sus necesidades.

Lo siento, no puedo ser más específico, pero a tu pregunta le falta información muy específica, pero en general harías algo como lo siguiente en wp_loaded en el extremo frontal solo

add_action( 'wp_loaded', function ()
{
    if ( !is_admin() ) { // Only target the front end
        // Do what you need to do
    }
});
    
respondido por el Pieter Goosen 14.01.2016 - 11:25
1

wp_loaded se dispara después de que se realiza la inicialización del núcleo y antes de que se emita cualquier salida. La autenticación del usuario también se realiza en esta etapa.

En general, deberá engancharlo, o los ganchos anteriores, solo si necesita cambiar cualquiera de las globales iniciadas por el núcleo antes de que se realice cualquier salida real. Si solo está interesado en cambiar la salida, este enganche es demasiado temprano y es mejor que encuentre un enganche más especializado que se active más adelante. Para admin puede ser admin_init mientras que para front-end puede ser template_redirect que se activa cuando wordpress decide qué plantilla usar o wp_head que es (casi) el primer enlace que se activa como parte de la parte frontal salida final en sí.

    
respondido por el Mark Kaplun 14.01.2016 - 12:08

Lea otras preguntas en las etiquetas