Zaczep do ładowania postów i stron

17

Muszę uruchomić funkcję po załadowaniu określonego posta lub strony. Czy jest jakiś hak, który pozwala mi sprawdzić, czy podczas ładowania strony jest wyświetlany post?

Poulomi Nag
źródło
strona publiczna czy administracyjna / stoi?
kaiser
Do przodu. Zasadniczo chcę, aby wyzwalał się tylko wtedy, gdy wyświetlany jest określony pojedynczy niestandardowy typ postu.
Poulomi Nag

Odpowiedzi:

24

Możesz użyć wphaka i sprawdzić global $wp_queryobiekt lub dowolny warunek.

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>Nothing to see here! Check the object!<br /></p><pre>%s</pre>',
        var_export( $GLOBALS['wp_query'], true )
    );
}

Zobacz: wpw codex.wordpress.org oraz wpw developer.wordpress.org

kajzer
źródło
czy możesz mi powiedzieć, kiedy działa hak wp?
Poulomi Nag
A) Działa wcześniej after_setup_themei setup_themedlatego jest dostępny tylko dla wtyczek B) wewnątrz WP :: main(), które są wywoływane z poziomu wp-settings.php.
Kaiser
1
@kaiser nie wpogień hak po after_setup_themehaku i tuż przed template_redirectzatem czyni wpdojechać tematów, a także wtyczek? (tylko dla wyjaśnienia?)
Adam
13

Użyj, template_redirectktóry jest hakiem akcji, który uruchamia się przed renderowaniem szablonu;

add_action('template_redirect', 'hooker');
function hooker(){
    //I load just before selecting and rendering the template to screen
}
Adam
źródło
@PoulomiNag Nie ma problemu, cieszę się, że znalazłeś swoją odpowiedź powyżej. Chociaż myślę, że jedna mała uwaga wpbiegnie za after_theme_setuphakiem, więc nie jest ona dostępna tylko dla wtyczek, dzięki czemu można ją bezpiecznie używać w motywach.
Adam
Właśnie sprawdziłem i tak; wpbiegnie po after_theme_setup. Ale potrzebuję tego do mojej wtyczki. Tak wpsamo dobrze, jak template_redirectobie działają. Chciałbym przyjąć dwie odpowiedzi tutaj! :)
Poulomi Nag
W porządku, nie trzeba akceptować obu, po prostu chciałem wyjaśnić kolejność, w której strzelają. Upewniam się, że nie wariuję, wiesz. Powodzenia z wtyczką ...
Adam,
1

Dość często korzystałem z poniższych, aby załadować niestandardowe pola na stronach (zamiast niestandardowych postów).

    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', 'Who we work with...', 'how_we_do_it_who', 'page', 'normal', 'high');

                add_action('save_post', 'save_how_we_do_it_meta');

            }
        }
    }
darronz
źródło
Dzięki Darronz. Ale potrzebuję trochę haka do pracy z przodu podczas ładowania strony. Jakieś pomysły?
Poulomi Nag
Jeśli zmieniłeś powyższe to add_action('init', // etc), będzie działał na ładowaniu strony, a nie tylko w sekcji administratora.
darronz
2
@darronz A potem musisz sprawdzić w ! is_admin()środku, ponieważ inithak biegnie po obu stronach.
kaiser