Ketika satu posting diklik dari halaman kategori atau dalam hal apapun halaman, Anda bisa mendapatkan URL dari pengarah itu dan menguraikannya untuk mendapatkan string kueri. Tetapi ini hanya berfungsi dengan struktur permalink default
Contoh ketika pengarah adalah halaman kategori:
A var_dump( parse_url( wp_get_referer() ) );
memberikan output berikut dengan struktur permalink default
array(4) {
["scheme"]=>
string(4) "http"
["host"]=>
string(9) "localhost"
["path"]=>
string(11) "/wordpress/"
["query"]=>
string(5) "cat=7"
}
Dengan pengaturan var_dump()
permalink yang sama /%postname%/
, inilah yang Anda dapatkan
array(3) {
["scheme"]=>
string(4) "http"
["host"]=>
string(9) "localhost"
["path"]=>
string(32) "/wordpress/category/uit-my-lewe/"
}
Saya dapat menggunakan path
dari blok kode kedua dengan get_category_by_path()
, saya bisa mendapatkan objek kategori
Masalah saya adalah, bagaimana saya melakukan ini untuk istilah taksonomi.
Saya sudah melakukan tes. Saya memiliki taksonomi khusus event_cat
. Jika saya menulis ulang event-slug
, saya mendapatkan yang berikut path
menggunakan /%postname%/
struktur permalink
/wordpress/event-slug/5-star/
dan
event_cat=5-star
menggunakan struktur default
Secara otomatis nama taksonomi saya tidak akan ada di URL, hanya slug istilah saya. Jadi, ini bukan metode aman yang gagal untuk mendapatkan objek dari istilah tersebut.
Pertanyaan saya adalah, bagaimana cara mendapatkan struktur permalink default dengan benar mendapatkan string kueri, atau string kueri atau taksonomi dan nama istilah dari /%postname%/
struktur permalink
sumber
Jawaban:
Pertama-tama saya harus mengatakan bahwa
wp_get_referer()
itu tidak 100% dapat diandalkan karena bergantung pada$_SERVER['HTTP_REFERER']
yang tidak 100% dapat diandalkan, dari php.net docs:Solusi alternatif
Jika Anda dapat menambahkan ke posting url argumen kueri yang mengatakan dari mana posting berasal, itu akan lebih dapat diandalkan dan Anda tidak perlu menguraikan url untuk mendapatkan objek istilah.
Contoh:
Dengan melakukan hal itu, memposting tautan permanen yang diklik dari halaman kategori akan mengirim Anda ke semacam URL
Dan Anda dapat dengan mudah memahami dari mana pengguna berasal tanpa mengandalkan
$_SERVER['HTTP_REFERER']
dan tanpa upaya lainnya.Jawab pertanyaanmu
Dapatkan informasi permintaan mulai dari url adalah sesuatu yang dilakukan WordPress di dalam
WP::parse_request()
metode.Metode itu dimaksudkan untuk digunakan hanya sekali dan hanya untuk url "utama" (url yang dilihat pengguna) dan bukan untuk url sewenang-wenang.
Beberapa bulan yang lalu saya menulis plugin Url To Query dengan tujuan untuk melakukan hal yang sama untuk url sewenang-wenang.
Apa yang saya lakukan adalah mengambil
WP::parse_request()
, dan mengubahnya menjadi kode OOP yang lebih waras dan membuatnya bekerja dengan url sewenang-wenang (mis. Url untuk diproses diterima sebagai argumen dan bukannya diambil dari$_SERVER
var).Menggunakan plugin saya, Anda bisa
Jadi, Anda memperoleh argumen kueri (sesuatu yang bisa langsung Anda sampaikan
new WP_Query
) mulai dari url, itulah tepatnyaWP::parse_request()
.Dalam kasus Anda, Anda mungkin dapat memeriksa array args tanpa harus benar-benar menjalankan kueri.
Ini pasti dapat bekerja, namun saya pikir upaya tambahan yang diperlukan untuk mengurai url dan ketidakpercayaan
$_SERVER['HTTP_REFERER']
membuat solusi pertama yang lebih baik untuk lingkup Anda.sumber
Tujuan asli dari pertanyaan ini adalah untuk mengetahui dari mana satu posting dirujuk dari dan kemudian sesuai dengan itu, melayani posting berikutnya dan sebelumnya sesuai dengan pengarah posting.
Apa yang ingin saya capai adalah misalnya:
Sebuah posting diklik dari kategori, taksonomi, tag, pencarian, atau halaman arsip penulis. Arsip-arsip ini berfungsi sebagai rujukan. Sekarang, biasanya orang akan menggunakan, seperti dalam pertanyaan saya,
wp_get_referer()
untuk mendapatkan pengarah itu dan menggunakannya dalam permintaan lebih lanjut. Seperti dijelaskan oleh @GM dalam jawaban yang diterima di atas , metode ini tidak dapat diandalkan, jadi saya pergi dan menggunakan Solusi Alternatifnya .Masalah lain adalah perlu menggunakan beberapa jenis cookie atau sesi untuk menyimpan pengarah ini, sehingga Anda masih menayangkan posting dari pengarah asli ketika Anda menavigasi jauh dari posting tunggal asli yang diklik dari arsip tertentu. Karena cookie juga dikendalikan oleh pengguna akhir dan karenanya tidak dapat diandalkan, dan fakta bahwa WordPress tidak menggunakan sesi secara default, saya refactored tautan posting berikutnya dan sebelumnya menggunakan @GM Alternatif Solusi untuk memiliki cara yang dapat diandalkan untuk memeriksa dan menyimpan yang asli saya pengarah.
Inilah yang saya buat, dan saya harap seseorang akan menemukannya berguna dalam waktu dekat. Silakan, gunakan dan penyalahgunaan kode yang sesuai dengan kebutuhan Anda, hanya satu permintaan: tinggalkan tautan kembali ke pertanyaan ini. :-)
CATATAN KODE UNTUK MENGIKUTI
Kode ini cukup panjang dan intensif, jadi saya tidak akan merinci. Kode telah dikomentari dengan baik
Kode ini memiliki opsi untuk halaman antara posting dalam istilah yang sama, sama seperti default
next_post_link()
danprevious_post_link()
fungsi di WordPress. Sama seperti fungsi asli, Anda harus mengatur taksonomi. Nilai default untukin_same_term
istrue
dan taxonomy adalahcategory
Yang paling penting, kode ini membutuhkan PHP 5.4+
KODE
PENGGUNAAN DALAM TEMPLAT TUNGGAL
Jika Anda tidak perlu menavigasi posting dalam istilah yang sama, mendapatkan posting dari semua jenis posting, dan menyesuaikan teks berikutnya dan sebelumnya dengan tautan Anda, Anda dapat melakukan hal berikut:
EDIT 1
Atas permintaan dari pos di SO, dan sebagai bagian dari
@todo
, saya sekarang telah memperkenalkan dukungan untuk tidak hanya menavigasi antara posting dari jenis posting saat ini, tetapi dari berbagai jenis posting yang ditetapkan oleh pengguna menggunakanpost_types
parameter dalam fungsi. Silakan lihat kode yang diperbarui.EDIT 2
Tambahkan
'suppress_filters' => true,
keWP_Query
argumen agar pagination tidak diubah oleh filter apa pun yang digunakan di dalamnyaWP_Query
sumber