init хук-событие . WP 1.5.2
Событие срабатывает после того, как WordPress полностью загружен, но до того, как любые header заголовки были отправлены.
init - это популярное событие. Обычно используется плагинами для инициализации себя. Этот хук удобен по многим причинам: например, нужно определять пользователя, нужны таксономии, нужны функции установленные в теме (файл functions.php или другой).
К моменту срабатывания init текущий пользователь авторизован (global $current_user уже определена) и установлены все основные глобальные переменные и функции WordPress. Также функции темы уже подключены и все установки установлены: размеры картинок миниатюр, поддержка меню и т.д.
Вместо init
можно использовать wp_loaded
- это практически одинаковые события. wp_loaded срабатывает сразу после init и после проверки ms_site_check() (проверяет текущий блог в мультисайтовой сборке). wp_loaded не сработает, если текущий блок не пройдет проверку на работоспособность (не активен, удален, заспамлен, в архиве).
События которые срабатывают до init:
muplugins_loaded registered_taxonomy registered_post_type plugins_loaded sanitize_comment_cookies setup_theme load_textdomain after_setup_theme auth_cookie_malformed auth_cookie_valid set_current_user init
Использование
add_action( 'init', 'action_function_name_11' ); function action_function_name_11() { // Действие... }
Примеры
#1 Обработка $_GET
запроса
Допустим нам нужно перенаправить ссылку на страницу регистрации, если в запросе указана переменная register:
add_action('init', 'redirect_to_register'); function redirect_to_register(){ if( isset( $_GET['register'] ) ) { wp_redirect( site_url() . 'wp-register.php'); exit; } }
#2 Подключение к другим событиям из init
add_action('init','all_my_hooks'); function all_my_hooks(){ // подключение более поздних событий add_action('admin_init', 'my_function_name'); add_action('admin_menu', 'my_function_name'); }
Список изменений
С версии 1.5.0 | Введена. |
Где вызывается хук
/wp-settings.php
init
do_action( 'init' );
Где используется хук (в ядре WP)
add_action( 'init', 'register_block_core_archives' );
add_action( 'init', 'register_block_core_block' );
add_action( 'init', 'register_block_core_calendar' );
add_action( 'init', 'register_block_core_categories' );
add_action( 'init', 'register_block_core_latest_comments' );
add_action( 'init', 'register_block_core_latest_posts' );
add_action( 'init', 'register_block_core_rss' );
add_action( 'init', 'register_block_core_search' );
add_action( 'init', 'register_block_core_shortcode' );
add_action( 'init', 'register_block_core_tag_cloud' );
remove_action( 'init', 'wp_cron' );
add_action( 'init', array( $this, 'init' ), 0 );
add_action( 'init', 'wp_widgets_init', 1 );
add_action( 'init', 'rest_api_init' );
add_action( 'init', 'create_initial_taxonomies', 0 ); // highest priority
add_action( 'init', 'kses_init' );
add_action( 'init', 'create_initial_post_types', 0 ); // highest priority
add_action( 'init', 'check_theme_switched', 99 );
add_action( 'init', '_show_post_preview' );
add_action( 'init', 'wp_schedule_delete_old_privacy_export_files' );
add_action( 'init', 'smilies_init', 5 );
add_action( 'init', 'wp_cron' );
add_action( 'init', 'wp_init_targeted_link_rel_filters' );
add_action( 'init', 'ms_subdomain_constants' );
add_action( 'init', 'maybe_add_existing_user_to_blog' );
add_action( 'init', 'wp_schedule_update_checks' );
Добрый день.
Очень нужна помощь.
Такой вот вопрос - событие init - можно на этом этапе получить id поста?
Подробнее: у меня есть плагин магазина.
Функция создания продукта - вызывается так -
результатом которой - register_post_type( 'al_product',
$reg_settings
);все работает - получаются ссылки у станиц типа -
/catalog/series/gt-1710rgb/...
где
/catalog/series/
- это константа, которую я просто задала..А надо, что б ссылка была
/catalog/$id поста/
...Но в функции не могу получить ади.
Вызывала так
Теперь вот думаю, может просто на этапе init - он еще не сформирован?
совсем запуталась ....
Подскажите, пожалуйста...
Готовый код не подскажу. Но направлю.
На момент init основной запрос еще не создан, поэтому
global $post;
еще нет...Я сейчас не понимаю как у вас вообще регистрируется ЧПУ для типа записи. Но что вы делаете - это неправильно.
Объясню как надо: в параметре
rewrite
функции register_post_type() указываетеslug
и в нем плейсхолдер%post_id%
Далее через хук
Заменяете этот плейсхолдер на реальный ID записи. Примерно так:
Интересная деталь. код...
Сработал 1й раз при загрузке и второй раз при ajax запросе. С init тоже самое. Как так понять не могу. То есть в скрытом поле формы прописываю $my_code, а при посылке сравниваю, но там уже в $my_code другой код, если еще раз нажать третий и т.д. при этом в скрытом поле не меняется как и должно быть. Пробывал стыковать чтобы проверить будет ли видна стыковка при новых запросах. Нет, стыковки нет.
Подскажите почему так.
/btNH/UUql
Потому что при ajax запросе - это отдельная инициализация движка, то есть снова запускается wp_generate_password(), которая естественно генерирует уже новый код.