web-dev-qa-db-fra.com

Quand wp_loaded est-il lancé uniquement avec admin ou uniquement lorsque l'utilisateur entre sur le site ou les deux?

Quand wp_loaded est-il lancé?

J'essaie d'ajouter une fonction qui télécharge un gros fichier pour la base de données du plugin, et j'ai besoin qu'elle soit exécutée chaque fois que l'utilisateur/admin/utilisateur inconnu se trouve dans l'interface, une fois le site entièrement chargé, afin d'éviter tout délai la vitesse du site et l'expérience utilisateur.

J'utilise ce 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' );
}

Puis-je seulement utiliser ceci et cela fonctionnera avec admin et quand l'utilisateur entrera sur le site? :

function wp_plugin_update() {
        include( plugin_dir_path( __FILE__ ) . 'wp-plugin-update.php');
        }
add_action( 'wp_loaded', 'wp_plugin_update' );
2
DrMosko

wp_loaded se déclenche pour les sections front-end et admin du site.

Ce crochet d'action est activé une fois que WordPress, tous les plugins et le thème sont entièrement chargés et instanciés.

Puisque vous recherchez des mises à jour de plugins, il peut être préférable de vous connecter à admin_init au lieu de wp_loaded - en supposant que vous souhaitiez savoir si un user est connecté et en train de consulter le admin section du site.

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');

Dans le cas où vous voulez exécuter sur le front-end pour tous les utilisateurs

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 ce qui concerne mes tests, wp_loaded est déclenché après init mais avant admin_init .

L'extrémité avant

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

Admin

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

  

2
jgraup

wp_loaded exécute les services frontaux et principaux quels que soient l'utilisateur et la page. À chaque fois qu'une page est demandée, wp_loaded sera exécuté.

En règle générale, au moment où wp_loaded est exécuté, le chargement de Wordpress est terminé. Il s'agit également du premier raccordement disponible à utiliser après le chargement complet de WordPress. Les utilisateurs ont déjà été validés/authentifiés ( les utilisateurs étaient déjà authentifiés le init, cela se produit à l’avant et à l’arrière ), de sorte que les données sont déjà disponibles.

Vous devez examiner la séquence d'exécution des actions pour les actions front-end et back-end et déterminer quel point sera le mieux adapté à l'application à exécuter. Notez que certaines actions telles que init et wp_loaded sont exécutées à la fois sur le front-end et le back-end. Vous devez donc effectuer la vérification is_admin() pour cibler spécifiquement le front-end ou le back-end en fonction de vos besoins.

Désolé que je ne puisse pas être plus spécifique, mais votre question manque d'informations très spécifiques, mais en général, vous feriez quelque chose comme ce qui suit sur wp_loaded sur le système frontal uniquement.

add_action( 'wp_loaded', function ()
{
    if ( !is_admin() ) { // Only target the front end
        // Do what you need to do
    }
});
1
Pieter Goosen

wp_loaded est déclenché après l’initialisation du noyau et avant l’émission d’une sortie. L'authentification de l'utilisateur est également effectuée à ce stade.

En général, vous aurez besoin de vous y accrocher, ou d’anciens, uniquement si vous devez modifier l’un des globals initiés par core avant toute sortie réelle. Si vous ne souhaitez modifier que la sortie, ce hook est trop tôt et vous feriez mieux de trouver un hook plus spécialisé qui sera déclenché plus tard. Pour admin, il peut s'agir de admin_init, tandis que pour front-end, il peut s'agir de template_redirect qui est déclenché lorsque wordpress décide quel modèle utiliser ou de wp_head qui est (presque) le premier hook déclenché dans le cadre de la sortie frontale elle-même.

1
Mark Kaplun