I need to run a function when a particular post or page is loaded. Is there any hook that lets me check whether a post is being displayed during page load ?
3 Answers
You can use the wp
hook and check the global $wp_query
object or any conditional.
add_action( 'wp', 'wpse69369_special_thingy' );
function wpse69369_special_thingy()
{
if (
'special_cpt' === get_post_type()
AND is_singular()
)
return print "Yo World!";
return printf(
'<p>Nothing to see here! Check the object!<br /></p><pre>%s</pre>',
var_export( $GLOBALS['wp_query'], true )
);
}
See: wp
in codex.wordpress.org and wp
in developer.wordpress.org
-
-
A) It runs before
after_setup_theme
andsetup_theme
, so it's only accessible for plugins B) insideWP :: main()
, which is called from within wp-settings.php.– kaiserCommented Oct 16, 2012 at 11:19 -
1@kaiser Doesn't the
wp
hook fire after theafter_setup_theme
hook and right beforetemplate_redirect
therefore makingwp
accessible by themes as well as plugins? (just to clarify?)– AdamCommented Oct 17, 2012 at 6:18
Use template_redirect
which is the action hook that fires before rendering the template;
add_action('template_redirect', 'hooker');
function hooker(){
//I load just before selecting and rendering the template to screen
}
-
@PoulomiNag No problem, glad you found your answer above. Though I think one small note is that
wp
runs after theafter_theme_setup
hook, so its not just accessible by plugins, making it safe to use in themes.– AdamCommented Oct 17, 2012 at 6:21 -
I just checked and yes ;
wp
runs afterafter_theme_setup
. But I need it for my plugin. Sowp
as well astemplate_redirect
both work fine for me. Wish I could accept two answers here! :) Commented Oct 17, 2012 at 7:33 -
That's ok, not necessary to accept both, just wanted to clarify the order in which they fire. Making sure I'm not going crazy you know. Good luck with your plugin...– AdamCommented Oct 17, 2012 at 7:42
-
4
I've quite often used the following to load in custom meta boxes on pages (rather than custom posts).
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', 'Who we work with...', 'how_we_do_it_who', 'page', 'normal', 'high');
add_action('save_post', 'save_how_we_do_it_meta');
}
}
}
-
1Thanks Darronz. But I need some hook to work at the front end during a page load. Any ideas? Commented Oct 16, 2012 at 7:07
-
If you changed the above
to add_action('init', // etc)
then it'll work on the page load rather than only in the admin section.– darronzCommented Oct 16, 2012 at 7:19 -
2@darronz And then you need to check
! is_admin()
inside, because theinit
hook runs on both sides.– kaiserCommented Oct 16, 2012 at 11:20