Hook pentru încărcarea articolelor și paginilor

16 oct. 2012, 09:24:04
Vizualizări: 119K
Voturi: 31

Am nevoie să execut o funcție când un anumit articol sau pagină este încărcată. Există vreun hook care îmi permite să verific dacă un articol este afișat în timpul încărcării paginii?

2
Comentarii

partea publică sau cea administrativă?

kaiser kaiser
16 oct. 2012 13:48:32

Pentru frontend. Practic, vreau să se declanșeze doar când este afișat un anumit tip de postare personalizată.

Poulomi Nag Poulomi Nag
16 oct. 2012 13:52:08
Toate răspunsurile la întrebare 3
3
35

Puteți utiliza hook-ul wp și să verificați obiectul global $wp_query sau orice condițional.

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>Nimic de văzut aici! Verifică obiectul!<br /></p><pre>%s</pre>',
        var_export( $GLOBALS['wp_query'], true )
    );
}

Consultați: wp în codex.wordpress.org și wp în developer.wordpress.org

16 oct. 2012 13:55:32
Comentarii

poți să-mi spui când rulează hook-ul 'wp'?

Poulomi Nag Poulomi Nag
16 oct. 2012 14:07:32

A) Rulează înainte de after_setup_theme și setup_theme, deci este accesibil doar pentru plugin-uri B) în interiorul WP :: main(), care este apelat din wp-settings.php.

kaiser kaiser
16 oct. 2012 14:19:43

@kaiser Hook-ul wp nu rulează după hook-ul after_setup_theme și chiar înainte de template_redirect, făcând astfel wp accesibil atât pentru teme cât și pentru plugin-uri? (doar pentru clarificare)

Adam Adam
17 oct. 2012 09:18:06
4
25

Folosește template_redirect care este un hook de acțiune care se declanșează înainte de randarea șablonului;

add_action('template_redirect', 'hooker');
function hooker(){
    //Se încarcă chiar înainte de selectarea și randarea șablonului pe ecran
}
16 oct. 2012 10:14:55
Comentarii

@PoulomiNag Nicio problemă, mă bucur că ți-ai găsit răspunsul mai sus. Totuși, cred că o mică observație este că wp rulează după hook-ul after_theme_setup, deci nu este accesibil doar de plugin-uri, ceea ce îl face sigur de utilizat în teme.

Adam Adam
17 oct. 2012 09:21:38

Tocmai am verificat și da; wp rulează după after_theme_setup. Dar am nevoie de el pentru plugin-ul meu. Așa că atât wp cât și template_redirect funcționează bine pentru mine. Aș fi vrut să pot accepta două răspunsuri aici! :)

Poulomi Nag Poulomi Nag
17 oct. 2012 10:33:07

E în regulă, nu este necesar să accepte ambele, voiam doar să clarific ordinea în care se declanșează. Vreau să mă asigur că nu înnebunesc, știi. Mult succes cu plugin-ul tău...

Adam Adam
17 oct. 2012 10:42:41

+1 pentru jocul de cuvinte în denumirea funcției

MJHd MJHd
28 feb. 2020 23:56:56
3

Am folosit destul de des următorul cod pentru a încărca meta box-uri personalizate pe pagini (în loc de postări personalizate).

    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', 'Cu cine lucrăm...', 'how_we_do_it_who', 'page', 'normal', 'high');

                add_action('save_post', 'save_how_we_do_it_meta');

            }
        }
    }
16 oct. 2012 10:02:09
Comentarii

Mulțumesc Darronz. Dar am nevoie de un hook care să funcționeze în front-end în timpul încărcării unei pagini. Ai vreo idee?

Poulomi Nag Poulomi Nag
16 oct. 2012 10:07:54

Dacă ai schimbat codul de mai sus to add_action('init', // etc) atunci va funcționa la încărcarea paginii și nu doar în secțiunea de administrare.

darronz darronz
16 oct. 2012 10:19:54

@darronz Și apoi trebuie să verifici ! is_admin() în interior, deoarece hook-ul init rulează pe ambele părți.

kaiser kaiser
16 oct. 2012 14:20:17