Kaitkan untuk memuat posting dan halaman

17

Saya perlu menjalankan fungsi ketika posting atau halaman tertentu dimuat. Apakah ada kait yang memungkinkan saya memeriksa apakah suatu posting ditampilkan saat memuat halaman?

Poulomi Nag
sumber
sisi publik atau admin / menghadap?
kaiser
Untuk ujung depan. Pada dasarnya saya ingin memicu hanya ketika satu jenis posting khusus tertentu ditampilkan.
Poulomi Nag

Jawaban:

24

Anda dapat menggunakan wppengait dan memeriksa global $wp_queryobjek atau kondisi apa pun.

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

Lihat: wpdi codex.wordpress.org dan wpdi developer.wordpress.org

kaisar
sumber
dapatkah Anda memberi tahu saya kapan kait 'wp' berjalan?
Poulomi Nag
A) Ini berjalan sebelum after_setup_themedan setup_theme, jadi itu hanya dapat diakses untuk plugin B) di dalamnya WP :: main(), yang dipanggil dari dalam wp-settings.php.
kaiser
1
@kaiser Bukankah wphook menyala setelah after_setup_themehook dan tepat sebelum template_redirectitu membuat wpdiakses oleh tema dan juga plugin? (hanya untuk memperjelas?)
Adam
13

Gunakan template_redirectkait tindakan yang diaktifkan sebelum membuat template;

add_action('template_redirect', 'hooker');
function hooker(){
    //I load just before selecting and rendering the template to screen
}
Adam
sumber
@PoulomiNag Tidak masalah, senang Anda menemukan jawaban Anda di atas. Meskipun saya pikir satu catatan kecil adalah yang wpberjalan setelah after_theme_setuphook, jadi itu tidak hanya dapat diakses oleh plugin, membuatnya aman untuk digunakan dalam tema.
Adam
Saya baru saja memeriksa dan ya; wpmengejar after_theme_setup. Tapi saya membutuhkannya untuk plugin saya. Jadi, wpsama- template_redirectsama bekerja dengan baik untuk saya. Seandainya saya bisa menerima dua jawaban di sini! :)
Poulomi Nag
Tidak apa-apa, tidak perlu menerima keduanya, hanya ingin memperjelas urutan pemecatan mereka. Memastikan aku tidak gila, kau tahu. Semoga berhasil dengan plugin Anda ...
Adam
1

Saya cukup sering menggunakan yang berikut ini untuk memuat di kotak meta khusus pada halaman (bukan posting kustom).

    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
sumber
Terima kasih Darronz. Tapi saya butuh pengait untuk bekerja di ujung depan saat memuat halaman. Ada ide?
Poulomi Nag
Jika Anda mengubah hal di atas, to add_action('init', // etc)maka itu akan berfungsi pada memuat halaman daripada hanya di bagian admin.
darronz
2
@dronon Dan kemudian Anda perlu memeriksa ! is_admin()di dalam, karena initkait berjalan di kedua sisi.
kaiser