Hook per il caricamento di post e pagine

16 ott 2012, 09:24:04
Visualizzazioni: 119K
Voti: 31

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?

2
Commenti

lato pubblico o amministrativo?

kaiser kaiser
16 ott 2012 13:48:32

Per il frontend. Fondamentalmente voglio che si attivi solo quando viene visualizzato un particolare custom post type.

Poulomi Nag Poulomi Nag
16 ott 2012 13:52:08
Tutte le risposte alla domanda 3
3
35

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

16 ott 2012 13:55:32
Commenti

puoi dirmi quando viene eseguito l'hook 'wp'?

Poulomi Nag Poulomi Nag
16 ott 2012 14:07:32

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 kaiser
16 ott 2012 14:19:43

@kaiser L'hook wp non viene attivato dopo l'hook after_setup_theme e subito prima di template_redirect, rendendo quindi wp accessibile sia dai temi che dai plugin? (solo per chiarire?)

Adam Adam
17 ott 2012 09:18:06
4
25

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
}
16 ott 2012 10:14:55
Commenti

@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 Adam
17 ott 2012 09:21:38

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 Poulomi Nag
17 ott 2012 10:33:07

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 Adam
17 ott 2012 10:42:41

+1 per il gioco di parole nel nome della funzione

MJHd MJHd
28 feb 2020 23:56:56
3

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');

            }
        }
    }
16 ott 2012 10:02:09
Commenti

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

Poulomi Nag Poulomi Nag
16 ott 2012 10:07:54

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 darronz
16 ott 2012 10:19:54

@darronz E poi devi verificare ! is_admin() all'interno, perché l'hook init viene eseguito su entrambi i lati.

kaiser kaiser
16 ott 2012 14:20:17