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' );
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
の前)で起動します。
フロントエンド
init
]widgets_init
]wp_loaded
]管理者
init
]widgets_init
]wp_loaded
]admin_menu
]admin_init
]wp_loaded
は、ユーザーとページに関係なくフロントエンドとバックエンドを実行します。ページが要求されるたびにwp_loaded
が実行されます。
通常、wp_loaded
が実行されるまでに、Wordpressはロードを完了し、WordPressが完全にロードされた後に使用できる最初のフックにもなります。この時点までにユーザーは既に検証/認証されています( ユーザーはinit
で認証されています。これはフロントエンドとバックエンド で行われます)ので、データはすでに利用可能です。
フロントエンドとバックエンドの両方のアクションについて アクションフック実行シーケンス を調べて、実行する必要がある特定のアプリケーションに最適なフックを決定します。 init
やwp_loaded
などの特定のアクションはフロントエンドとバックエンドの両方で実行されるので、必要に応じてフロントエンドまたはバックエンドを明確にターゲットとするためにis_admin()
チェックを実行する必要があります。
私はもっと具体的にはできませんが、あなたの質問は非常に具体的な情報を欠いています、しかし一般的にあなたはフロントエンドのみでwp_loaded
に次のようなことをするでしょう
add_action( 'wp_loaded', function ()
{
if ( !is_admin() ) { // Only target the front end
// Do what you need to do
}
});
wp_loaded
は、コアの初期化が完了した後、出力が出力される前に発生しています。この段階でユーザー認証も行われます。
一般に、実際の出力が行われる前にcoreによって開始されたグローバルのいずれかを変更する必要がある場合にのみ、それをフックするか、それ以前のフックをフックする必要があります。あなたが出力を変更することだけに興味があるならば、このフックは早すぎます、そして、後で引き起こされるより専門化されたフックを見つけたほうがいいです。 adminの場合はadmin_init
、フロントエンドの場合はwordpressが使用するテンプレートを決定したときに起動されるtemplate_redirect
、または(ほぼ)フロントエンド出力の一部として起動される最初のフックとなるwp_head
が可能です。