Hook para la carga de entradas y páginas
Necesito ejecutar una función cuando se carga una entrada o página específica. ¿Existe algún hook que me permita verificar si se está mostrando una entrada durante la carga de la página?

Puedes usar el hook wp
y verificar el objeto global $wp_query
o cualquier condicional.
add_action( 'wp', 'wpse69369_special_thingy' );
function wpse69369_special_thingy()
{
if (
'special_cpt' === get_post_type()
AND is_singular()
)
return print "¡Hola Mundo!";
return printf(
'<p>¡Nada que ver aquí! ¡Revisa el objeto!<br /></p><pre>%s</pre>',
var_export( $GLOBALS['wp_query'], true )
);
}
Ver: wp
en codex.wordpress.org y wp
en developer.wordpress.org

A) Se ejecuta antes de after_setup_theme
y setup_theme
, por lo que solo es accesible para plugins B) dentro de WP :: main()
, que se llama desde wp-settings.php.

Utiliza template_redirect
que es el hook de acción que se ejecuta antes de renderizar la plantilla;
add_action('template_redirect', 'hooker');
function hooker(){
//Se carga justo antes de seleccionar y renderizar la plantilla en pantalla
}

@PoulomiNag No hay problema, me alegro de que hayas encontrado tu respuesta arriba. Aunque creo que una pequeña nota es que wp
se ejecuta después del hook after_theme_setup
, por lo que no solo es accesible por plugins, haciéndolo seguro de usar en temas.

Acabo de comprobar y sí; wp
se ejecuta después de after_theme_setup
. Pero lo necesito para mi plugin. Así que tanto wp
como template_redirect
funcionan bien para mí. ¡Ojalá pudiera aceptar dos respuestas aquí! :)

Está bien, no es necesario aceptar ambas, solo quería aclarar el orden en que se ejecutan. Asegurándome de que no me estoy volviendo loco, ya sabes. Buena suerte con tu plugin...

He utilizado con frecuencia lo siguiente para cargar meta boxes personalizados en páginas (en lugar de en entradas personalizadas).
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', 'Con quién trabajamos...', 'how_we_do_it_who', 'page', 'normal', 'high');
add_action('save_post', 'save_how_we_do_it_meta');
}
}
}

Gracias Darronz. Pero necesito algún hook que funcione en el front end durante la carga de una página. ¿Alguna idea?

Si cambiaste lo anterior a add_action('init', // etc)
entonces funcionará durante la carga de la página en lugar de solo en la sección de administración.
