Hook per il caricamento di post e pagine
Ho bisogno di eseguire una funzione quando viene caricato un particolare post o pagina. Esiste qualche hook che mi permette di verificare se un post viene visualizzato durante il caricamento della pagina?

Puoi usare l'hook wp
e verificare l'oggetto global $wp_query
o qualsiasi condizionale.
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>Niente da vedere qui! Controlla l'oggetto!<br /></p><pre>%s</pre>',
var_export( $GLOBALS['wp_query'], true )
);
}
Vedi: wp
in codex.wordpress.org e wp
in developer.wordpress.org

A) Viene eseguito prima di after_setup_theme
e setup_theme
, quindi è accessibile solo per i plugin B) all'interno di WP::main()
, che viene chiamato da wp-settings.php.

Utilizza template_redirect
che è l'hook che viene attivato prima del rendering del template;
add_action('template_redirect', 'hooker');
function hooker(){
//Carico appena prima della selezione e del rendering del template a schermo
}

@PoulomiNag Nessun problema, sono contento che tu abbia trovato la tua risposta sopra. Anche se penso che una piccola nota sia che wp
viene eseguito dopo l'hook after_theme_setup
, quindi non è accessibile solo dai plugin, rendendolo sicuro da usare nei temi.

Ho appena verificato e sì; wp
viene eseguito dopo after_theme_setup
. Ma ne ho bisogno per il mio plugin. Quindi sia wp
che template_redirect
funzionano bene per me. Vorrei poter accettare due risposte qui! :)

Va bene, non è necessario accettare entrambe, volevo solo chiarire l'ordine in cui vengono eseguite. Volevo assicurarmi di non star impazzendo, sai. Buona fortuna con il tuo plugin...

Ho utilizzato spesso il seguente codice per caricare meta box personalizzati nelle pagine (anziché nei post personalizzati).
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 chi lavoriamo...', 'how_we_do_it_who', 'page', 'normal', 'high');
add_action('save_post', 'save_how_we_do_it_meta');
}
}
}

Grazie Darronz. Ma ho bisogno di un hook che funzioni nel front end durante il caricamento di una pagina. Hai qualche idea?

Se hai modificato il codice sopra in add_action('init', // ecc)
allora funzionerà durante il caricamento della pagina anziché solo nella sezione di amministrazione.
