Saya mencoba untuk mengambil siput halaman WordPress saat ini di luar loop. Judul halaman kembali dengan wp_title ()
, tetapi bagaimana saya bisa mendapatkan siput?
<li>
<a href="/slug-of-current-page/">
<?php wp_title('', true); ?>
</a>
</li>
<?php global $post; $post_slug=$post->post_name; echo $post_slug; ?>
echo
itu. Jadi, ini ideal:<?php global $post; echo $post->post_name; ?>
$WP_Post
?Sebagai jawaban lain, siput disimpan di
post_name
properti. Walaupun dapat diakses secara langsung, saya lebih suka fungsi (kurang digunakan)get_post_field()
untuk mengakses properti posting yang tidak memiliki API yang tepat untuk mereka.Membutuhkan posting yang disediakan secara eksplisit dan tidak default ke yang sekarang, jadi secara penuh untuk posting saat ini adalah:
sumber
get_post_field
tanpa argumen kedua ( docs )EDIT 5 APRIL 2016
Setelah menggali untuk keandalan yang lebih, saya akhirnya melakukan jawaban ini untuk posting berikut yang mengarah ke pengeditan ini: ( Pastikan untuk memeriksanya )
Metode yang paling dapat diandalkan sampai saat ini yang bisa saya pikirkan adalah sebagai berikut:
Dengan cara ini, Anda 99,9999% yakin bahwa Anda mendapatkan data yang benar setiap waktu.
JAWABAN ASLI
Alternatif lain yang lebih aman untuk masalah ini adalah menggunakan
get_queried_object()
yang memegang objek tanya saat ini untuk mendapatkan halaman siput yang dimiliki olehpost_name
properti. Ini dapat digunakan di mana saja di template Anda.$post
dapat digunakan, tetapi bisa tidak dapat diandalkan karena setiap kueri kustom atau kode khusus dapat mengubah nilai$post
, jadi harus dihindari di luar loop.Menggunakan
get_queried_object()
untuk mendapatkan objek halaman saat ini jauh lebih dapat diandalkan dan kecil kemungkinannya untuk dimodifikasi, kecuali jika Anda menggunakan iblisquery_posts
yang merusak objek permintaan utama, tapi itu semua terserah Anda.Anda dapat menggunakan di atas sebagai berikut
sumber
query_posts
itu tidak jahat ketika Anda ingin mengubah permintaan utama , yang bagaimanapun Anda biasanya tidak dan sering disalahgunakan :)Cara sederhana untuk mendapatkan siput adalah dengan:
sumber
http://domain/?p=123
, meninggalkan Anda?p=123
.Dengan contoh kode, sepertinya yang Anda butuhkan adalah tautan. Dalam hal ini, Anda bisa menggunakan get_permalink () , yang bisa digunakan di luar loop. Itu harus melakukan apa yang Anda butuhkan lebih andal daripada menggunakan post slug.
sumber
Mungkin menjadi pertanyaan lama, tetapi saya membuat fungsi get_the_slug () dan the_slug () berdasarkan jawaban Anda.
sumber
Ini adalah fungsi yang digunakan ketika ingin mengambil siput di luar loop.
Jawaban ditemukan di sini: Bagaimana Cara Mengambil Slug Halaman Saat Ini di WordPress?
sumber
Lebih jauh lagi pada jawaban @Matthew Boynes, jika Anda tertarik untuk mendapatkan siput induk (jika ada) juga maka saya telah menemukan fungsi ini berguna:
Misalnya untuk menambahkan siput ke kelas tubuh:
sumber
Jika Anda menginginkan jawaban yang lebih tersembunyi, Anda dapat menggunakan kueri SQL berikut untuk mengambil semua pos yang merupakan pos, halaman, atau taksonomi ubahsuaian kapan saja, bahkan jika belum ada kait yang dipecat sama sekali.
SQL mentah:
Ini berfungsi bahkan pada baris pertama file fungsi Anda, bahkan sebelum
mu_plugins_loaded
atauinit
kait.@catatan
Ini dengan asumsi Anda memiliki awalan basis data standar
wp_posts
. Jika Anda perlu memperhitungkan awalan variabel, Anda dapat memperoleh tabel posting yang benar melalui PHP dengan mudah dengan melakukan hal berikut:Kemudian jalankan dengan baik
$wpdb
,mysqli
, atauPDO
contoh. Karena tidak ada input pengguna dalam kueri ini, aman untuk dijalankan tanpa pernyataan yang disiapkan selama Anda tidak menyuntikkan variabel apa pun ke dalamnya.Saya akan menyarankan menyimpan ini sebagai nilai statis privat dari sebuah kelas, sehingga dapat diakses tanpa harus memecat kueri lagi lebih dari sekali per halaman untuk kinerja terbaik, sesuatu seperti ini:
Pemakaian
Anda mendapatkan intinya. Jika Anda memerlukan detail lebih lanjut, Anda dapat mengambilnya seperti biasa
new \WP_Post( get_the_ID() );
Ini akan memungkinkan Anda memeriksa posting kapan saja, bahkan jika loop wordpress belum mencapai titik di mana ia menemukan permintaan Anda menyenangkan. Ini adalah versi yang sedikit lebih dioptimalkan dari kueri yang sama yang dijalankan oleh inti Wordpress itu sendiri. Yang ini menyaring semua sampah yang tidak ingin Anda kembalikan, dan hanya memberi Anda daftar yang tertata rapi dengan id penulis yang relevan, jenis posting, siput, dan visibilitas. Jika Anda memerlukan perincian lebih lanjut, Anda dapat mengambilnya seperti biasa dengan
new \WP_Post($id);
, atau menggunakan salah satu fungsi Wordpress asli lainnya dengan salah satu baris tabel yang relevan, bahkan di luar loop.Saya menggunakan pengaturan serupa di beberapa tema dan plugin kustom saya sendiri, dan itu bekerja sangat bagus. Ini juga aman dan tidak meninggalkan data internal melayang di lingkup global di mana ia dapat ditimpa seperti kebanyakan hal di Wordpress.
sumber
Sejujurnya saya tidak mengerti mengapa tidak ada jawaban yang cukup:
Ini berfungsi untuk semua posting, halaman, rute khusus.
sumber
Panggilan Halaman dinamis di WordPress.
sumber