Kode PHP apa yang dapat digunakan untuk mengambil nama halaman saat ini dalam tema WordPress?
Semua solusi yang saya telah melihat begitu jauh ( the_title()
, get_page()->post_name
, get_post()
, dll) tidak bekerja untuk sebuah halaman yang berisi entri posting. Mereka semua akan mengembalikan nama entri blog terbaru.
Dengan kata lain, anggaplah Anda memiliki halaman yang dibuat di WordPress dengan nama "Berita Saya". Halaman ini ditetapkan sebagai "halaman posting". Tambahkan beberapa posting ke halaman. Sekarang, API apa yang dapat digunakan untuk mengambil string "my-news" dan bukan nama posting terbaru?
Saya telah menemukan variabel berikut yang tampaknya berfungsi.
$wp_query->queried_object->post_name
Ini sebenarnya versi versi URL dari nama halaman (siput), yang juga saya cari. Ini diuji dengan templat default ( Dua Puluh Sepuluh ). Saya benar-benar tidak yakin mengapa dua variabel yang diberikan di bawah ini tidak berfungsi di situs saya. Berkat keatch untuk print_r()
ujung .
Sekarang, mengapa informasi ini tersembunyi begitu dalam?
sumber
Jawaban:
Variabel global WordPress
$pagename
harus tersedia untuk Anda. Saya baru saja mencoba dengan pengaturan yang sama yang Anda tentukan.$pagename
didefinisikan dalam file wp-include / theme.php, di dalam fungsiget_page_template()
, yang tentu saja dipanggil sebelum file tema halaman Anda diuraikan, sehingga tersedia kapan saja di dalam template Anda untuk halaman.Meskipun tampaknya tidak didokumentasikan,
$pagename
var hanya disetel jika Anda menggunakan permalinks. Saya kira ini karena jika Anda tidak menggunakannya, WordPress tidak perlu halaman slug, jadi tidak mengaturnya.$pagename
tidak disetel jika Anda menggunakan halaman sebagai halaman depan statis.Ini adalah kode di dalam /wp-includes/theme.php, yang menggunakan solusi yang Anda tunjukkan ketika
$pagename
tidak dapat diatur:$ pagename = get_query_var ('pagename'); if (! $ pagename && $ id> 0) {// Jika halaman statis ditetapkan sebagai halaman depan, $ pagename tidak akan disetel. Ambil itu dari objek kueri $ post = $ wp_query-> get_queried_object (); $ pagename = $ post-> post_name; }
sumber
$pagename = $wp_query->queried_object->post_name;
:, jangan lupa untuk mengaturglobal $wp_query;
sebelumnya!Pendekatan saya untuk mendapatkan nama siput halaman:
sumber
Ok, Anda harus meraih judul halaman sebelum loop.
Periksa rujukannya: http://codex.wordpress.org/Function_Reference/WP_Query#Properties .
Lakukan a
sebelum loop untuk melihat semua nilai
$wp_query
objek.sumber
Ini berhasil untuk saya.
Jika saya mengerti dengan benar, Anda ingin mendapatkan nama halaman pada halaman yang memiliki entri posting.
sumber
Anda bisa mendapatkan halaman saat ini, posting, atau jenis posting khusus dengan variabel global
$post
:Catatan: Dalam suatu fungsi atau kelas Anda harus menentukan
global $post;
sebelum mencoba menggunakan$post
.Jika Anda memiliki loop pada halaman Anda, pastikan Anda mengakhiri setiap loop dengan
wp_reset_postdata();
untuk mengatur$post
kembali ke item default yang ditampilkan (halaman).Catatan, variabel 'post_title' juga tersedia untuk setiap loop / kueri khusus ... termasuk item menu dan lampiran media ... semua yang ada di WordPress adalah 'pos'.
sumber
Jika Anda ingin mengakses halaman saat ini dari dalam file functions.php Anda (jadi, sebelum loop, sebelum
$post
diisi, sebelum$wp_query
diinisialisasi, dll ...) Anda benar-benar tidak punya pilihan selain mengakses variabel server sendiri dan ekstrak halaman yang diminta dari string kueri.Perhatikan bahwa ini adalah solusi "bodoh". Tidak tahu, misalnya bahwa halaman dengan siput 'segera hadir' juga
p=6
. Dan itu mengasumsikan bahwa pengaturan permalink Anda diatur kepagename
(yang seharusnya!).Meski begitu, bisa menjadi trik kecil yang bermanfaat jika Anda memiliki skenario terkontrol. Saya menggunakan ini dalam situasi di mana saya ingin mengarahkan pengunjung yang belum masuk ke halaman "segera hadir"; tapi saya harus memastikan bahwa saya tidak membuang mereka ke "redirect loop" yang ditakuti, jadi saya harus mengecualikan halaman "segera hadir" dari aturan ini:
sumber
Saya percaya bahwa tema starter Roots memiliki fungsi yang fantastis untuk mendapatkan judul halaman saat ini. Ini sangat bisa diretas, mencakup semua pangkalan, dan dapat dengan mudah digunakan dengan
wp_title
hook.sumber
Coba ini:
sumber
Saya telah menemukan solusi yang lebih sederhana.
Dapatkan nilai yang dikembalikan dari nama halaman dari wp_title (). Jika kosong, cetak nama beranda, jika tidak gema nilai wp_title ().
Ingatlah untuk menghapus pemisahan dengan argumen pertama dan kemudian atur display ke false untuk digunakan sebagai input ke variabel. Kemudian cukup sembunyikan kode di antara heading Anda, dll. Tag.
Itu berhasil memperlakukan saya dan memastikan bahwa yang pertama dideklarasikan di bagian di mana Anda ingin mengekstrak
$title
, ini dapat disetel untuk mengembalikan variabel yang berbeda.sumber
Kita hanya perlu menggunakan variabel global "post":
Ini akan menggemakan judul halaman / posting saat ini.
sumber
Menggunakan:
sumber
Ini tampaknya yang paling mudah digunakan:
sumber
Tampilkan judul sebelum loop dimulai:
sumber
Salah satu opsi, jika Anda mencari halaman yang ditanyakan sebenarnya, daripada halaman ID atau siput adalah untuk mencegat kueri:
Dalam fungsi Anda, Anda memiliki akses ke objek $ wp dan Anda bisa mendapatkan pagename atau nama pos dengan:
Jika, di sisi lain, Anda benar-benar membutuhkan data posting, tempat pertama untuk mendapatkannya (dan bisa dibilang dalam konteks ini, yang terbaik) adalah:
Akhirnya, saya menyadari ini mungkin bukan pertanyaan OP, tetapi jika Anda mencari nama halaman Admin , gunakan global
$pagenow
.sumber
Di dalam Lingkaran WordPress :
Ini akan menunjukkan kepada Anda judul halaman saat ini.
Untuk referensi: get_the_title ()
sumber
Ini versi saya:
get_query_var ('pagename') baru saja memberi saya halaman slug. Jadi di atas menggantikan semua tanda hubung, dan membuat huruf pertama dari setiap huruf besar - sehingga benar-benar dapat digunakan sebagai judul.
sumber
Inilah yang akhirnya saya gunakan, pada 2018:
sumber
Saya sekarang menemukan fungsi ini di WordPress Codec ,
dipertanyakan
yang merupakan pembungkus untuk
$wp_query->get_queried_object
.Posting ini menempatkan saya ke arah yang benar, tetapi tampaknya perlu pembaruan ini.
sumber
Ini juga berfungsi jika Anda berada di functions.php. Ini bukan pendekatan terbaik karena Anda harus menggunakan array global, tetapi berhasil.
Pertama, kita perlu menambahkan filter. Harus ada filter yang lebih baik untuk digunakan daripada template_include, tapi saya tidak tahu semuanya. Tolong tunjukkan saya ke yang benar.
Hindari menggunakan variabel secara langsung
Sekarang Anda dapat menggunakan fungsi
get_current_page()
di bagian lain dari functions.php.sumber