web-dev-qa-db-ja.com

Wp_loadedが管理者によってのみ開始されるのはいつですか、またはユーザーがサイトに入ったときにのみ開始されるのはいつですか。

wp_loadedはいつ開始されますか?

Imは、プラグインDB用の大きなファイルをダウンロードする機能を追加しようとしています。サイトが完全にロードされた後、user/admin/unknownユーザーがフロントエンドに入るたびに実行する必要があります。サイトのスピードとユーザーエクスペリエンス.

私はこのスクリプトを使います。

// 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' );
2
DrMosko

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_loadedinit の後、 admin_init の前)で起動します。

フロントエンド

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

管理者

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

2
jgraup

wp_loadedは、ユーザーとページに関係なくフロントエンドとバックエンドを実行します。ページが要求されるたびにwp_loadedが実行されます。

通常、wp_loadedが実行されるまでに、Wordpressはロードを完了し、WordPressが完全にロードされた後に使用できる最初のフックにもなります。この時点までにユーザーは既に検証/認証されています( ユーザーはinitで認証されています。これはフロントエンドとバックエンド で行われます)ので、データはすでに利用可能です。

フロントエンドとバックエンドの両方のアクションについて アクションフック実行シーケンス を調べて、実行する必要がある特定のアプリケーションに最適なフックを決定します。 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
    }
});
1
Pieter Goosen

wp_loadedは、コアの初期化が完了した後、出力が出力される前に発生しています。この段階でユーザー認証も行われます。

一般に、実際の出力が行われる前にcoreによって開始されたグローバルのいずれかを変更する必要がある場合にのみ、それをフックするか、それ以前のフックをフックする必要があります。あなたが出力を変更することだけに興味があるならば、このフックは早すぎます、そして、後で引き起こされるより専門化されたフックを見つけたほうがいいです。 adminの場合はadmin_init、フロントエンドの場合はwordpressが使用するテンプレートを決定したときに起動されるtemplate_redirect、または(ほぼ)フロントエンド出力の一部として起動される最初のフックとなるwp_headが可能です。

1
Mark Kaplun