何时仅以管理员身份或仅在用户进入站点时启动wp_loaded,或同时启动两者?

时间:2016-01-14 作者:DrMosko

什么时候是wp_loaded 已启动?

我正在尝试添加为插件数据库下载一个大文件的功能,我需要在站点完全加载后,每当用户/管理员/未知用户进入前端时执行该功能,以便不会对站点速度和用户体验造成任何延迟。

我使用以下脚本:

// 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\' );
}
我只能使用它,它将与管理员一起工作,并且当用户进入网站时?:

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

3 个回复
最合适的回答,由SO网友:jgraup 整理而成

wp_loaded 为站点的前端和管理部分激发。

一旦WordPress、所有插件和主题完全加载并实例化,就会触发此操作挂钩。

既然您正在检查插件更新,那么最好admin_init 而不是wp_loaded -- 假设你想知道user 已登录并查看admin 场地的剖面图。

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\');
如果要在前端为所有用户运行

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\');
就我的测试而言,wp_loaded 之后发生火灾init 但之前admin_init.

前端

[ul>

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

    [ul>

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

  • SO网友:Pieter Goosen

    wp_loaded 运行前端和后端,而不考虑用户和页面。每当请求页面时wp_loaded 将运行。

    通常,在wp_loaded 执行,Wordpress加载完毕,它也是Wordpress完全加载后可用的第一个挂钩。用户已通过验证/身份验证(用户已在上通过身份验证init, 此时,前端和后端都会发生这种情况,因此数据已经可用。

    你应该看看action hook execution sequence 对于前端和后端操作,确定哪个钩子最适合您需要运行的特定应用程序。请注意,某些操作如initwp_loaded 在前端和后端执行,因此您需要执行is_admin() 根据您的需要,检查以专门针对前端或后端。

    很抱歉,我不能说得更具体,但您的问题缺乏非常具体的信息,但一般来说,您会执行以下操作wp_loaded 仅在前端

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

    SO网友:Mark Kaplun

    wp_loaded 在核心初始化完成后和发出任何输出之前触发。用户身份验证也在这一阶段完成。

    通常,只有在实际输出完成之前需要更改由core启动的任何全局变量时,才需要钩住它或更早的钩子。如果您只对更改输出感兴趣,那么这个钩子太早了,您最好找到一个更专门的钩子,稍后再触发。对于管理员,它可以是admin_init 而对于前端,它可以template_redirect 当wordpress决定使用哪个模板或wp_head 这(几乎)是作为前端输出本身的一部分触发的第一个挂钩。

    相关推荐

    WordPress存储库禁止我在非WordPress文件中调用wp-load.php

    我制作了一个Wordpress插件,它是一种下载管理器。我有一个外部文件下载。负责下载的php。此文件不在Wordpress环境中,因此我必须调用:$wp_root = dirname(dirname(dirname(dirname(__FILE__)))); require_once $wp_root.\'/wp-load.php\'; 我可以使用$wpdb进行sql查询。注意:此文件必须是外部文件,因为我使用函数“headers()”强制下载。header(\"Pragma: pub