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.
kaiser
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.
Adam
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! :)
Poulomi Nag
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...
Adam
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?
Poulomi Nag
Se hai modificato il codice sopra in add_action('init', // ecc) allora funzionerà durante il caricamento della pagina anziché solo nella sezione di amministrazione.
darronz