Когда wp_loaded инициируется только с помощью admin или только при входе пользователя на сайт или и то, и другое?

Когда инициируется wp_loaded ?

Я пытаюсь добавить функцию, которая загружает большой файл для DB плагина, и мне нужно, чтобы он выполнялся всякий раз, когда пользователь / администратор / неизвестный пользователь попадал в интерфейс, после того, как сайт был полностью загружен, чтобы не было никакой задержки с скорость сайта и пользовательский интерфейс.

Я использую этот скрипт:

 // 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 и просматривает раздел администратора сайта.

 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 ]

http://img.wordpressask.com/plugin-development/wordpress_core_load.png

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 запускается после завершения инициализации ядра и до выхода любого выхода. аутентификация пользователя также выполняется на этом этапе.

В общем, вам нужно будет подключить к нему или более ранние перехватчики только в том случае, если вам нужно изменить любой из глобальных цепей, инициированных ядром, до того, как будет выполнен какой-либо фактический вывод. Если вы заинтересованы только в изменении вывода, этот крючок слишком рано, и вам лучше найти более специализированный крючок, который запускается позже. Для администратора это может быть admin_init то время как для front-end это может быть template_redirect который запускается, когда wordpress решает, какой шаблон использовать или wp_head который (почти) первый hook, который запускается как часть самого выходного интерфейса.