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?


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


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
}

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

            }
        }
    }

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.