Хук для загрузки записи и страницы
Мне нужно выполнить функцию, когда загружается определенная запись или страница. Существует ли хук, который позволяет проверить, отображается ли запись во время загрузки страницы?
Вы можете использовать хук wp и проверить объект global $wp_query или любое условное выражение.
add_action( 'wp', 'wpse69369_special_thingy' );
function wpse69369_special_thingy()
{
if (
'special_cpt' === get_post_type()
AND is_singular()
)
return print "Привет, мир!";
return printf(
'<p>Здесь нечего смотреть! Проверьте объект!<br /></p><pre>%s</pre>',
var_export( $GLOBALS['wp_query'], true )
);
}
Смотрите: wp в codex.wordpress.org и wp в developer.wordpress.org
A) Он срабатывает до after_setup_theme и setup_theme, поэтому доступен только для плагинов B) внутри WP :: main(), который вызывается из wp-settings.php.
kaiser
Используйте template_redirect — это хук действия, который срабатывает перед рендерингом шаблона;
add_action('template_redirect', 'hooker');
function hooker(){
//Я загружаюсь прямо перед выбором и отображением шаблона на экран
}
@PoulomiNag Без проблем, рад, что вы нашли ответ выше. Хотя я думаю, стоит отметить, что wp запускается после хука after_theme_setup, поэтому он доступен не только для плагинов, что делает его безопасным для использования в темах.
Adam
Я только что проверил, и да; wp запускается после after_theme_setup. Но мне это нужно для моего плагина. Так что wp, как и template_redirect, оба отлично работают для меня. Жаль, что нельзя принять два ответа здесь! :)
Poulomi Nag
Все в порядке, не обязательно принимать оба, просто хотел уточнить порядок их выполнения. Убедиться, что я не схожу с ума, понимаете. Удачи с вашим плагином...
Adam
Я довольно часто использовал следующий подход для загрузки пользовательских метабоксов на страницах (а не в записях).
add_action('admin_init','how_we_do_it_meta');
function how_we_do_it_meta() {
if ( $_SERVER['SCRIPT_NAME'] == '/wp-admin/post.php' ) {
$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
$template_file = get_post_meta($post_id,'_wp_page_template',TRUE);
if ($template_file == 'page-how-we-do-it.php') {
add_meta_box('how_we_do_it_who-meta', 'С кем мы работаем...', 'how_we_do_it_who', 'page', 'normal', 'high');
add_action('save_post', 'save_how_we_do_it_meta');
}
}
}
Спасибо, Darronz. Но мне нужен хук, который будет работать на фронтенде во время загрузки страницы. Есть идеи?
Poulomi Nag
Если ты изменишь вышеуказанный код на add_action('init', // и т.д.), то он будет работать при загрузке страницы, а не только в админке.
darronz