Hook paling awal untuk mendapatkan $ post / $ post dengan andal

8

Apa tindakan paling awal yang dapat saya lakukan di mana saya dapat mengakses $post/$postsvariabel global di bagian depan dan belakang? Saya sudah mencoba melihat-lihat referensi Codex , referensi Adam Brown dan membaca-baca sumbernya beberapa kali tetapi belum beruntung menemukan yang baik.

pre_get_poststerlalu dini; Menggunakan posts_selectiontidak berfungsi jika Anda ingin membuat panggilan get_posts () kedua selama panggilan balik; dan template_redirecttidak berjalan di sisi admin. the_postmungkin lebih awal dari template_redirectpada ujung depan, tetapi juga tidak berjalan di ujung belakang. Idealnya saya ingin sesuatu yang berjalan tepat sebelum get_post()/get_posts()kembali, tetapi saya tidak melihat hal seperti itu.

Saya telah menggunakan the_postsfilter di masa lalu, tetapi saya lebih suka tindakan karena secara teknis lebih benar.

Saat ini saya hanya mengaitkan dua kali; sekali menggunakan template_redirectuntuk ujung depan, dan lagi menggunakan admin_xml_nsuntuk ujung belakang. Saya tidak begitu suka, karena logika saya tidak secara semantik terkait dengan salah satu kait itu, dan sepertinya ini adalah kebutuhan yang sangat umum dan harus ada kait seperti "post_get_posts" (ala pre_get_posts) yang berfungsi di kedua sisi.

Ian Dunn
sumber

Jawaban:

12

Untuk semua halaman admin dan halaman ujung depan kecuali layar edit posting individu ( wp-admin/post.php), 'wp'adalah pengait yang paling dapat diandalkan untuk mendapatkan nilai global.

http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-includes/class-wp.php.source.html#l486

Anda dapat melihat di sana bahwa api langsung WP::main()menyala setelah kebakaran WP::register_globals(). Masalahnya dengan menggunakan hal-hal seperti post_resultsdan get_postsitu akan berjalan setiap kali Anda membuat kueri untuk posting. 'wp'hanya menjalankan fungsi WP::main(), yang digunakan WP core untuk menjalankan kueri permintaan utama halaman.

Untuk layar edit posting, sepertinya pengait pertama yang dapat Anda gunakan dengan andal 'add_meta_boxes'. Anda hanya perlu memastikan bahwa Anda berada di halaman inti ketika menghubungkan, meskipun itu melewati $postobjek global sebagai argumen kedua (yang pertama adalah $post_typedari posting saat ini).

John P Bloch
sumber
4

posts_resultsadalah filter pada hasil kueri mentah. lihat baris 2627 di wp-includes/query.php.

Milo
sumber