Saya mencoba add_rewrite_rule
bekerja untuk mengekstrak param dari url dan meneruskannya ke permintaan. Melihat sejumlah posting tentang ini, tetapi tampaknya tidak dapat membuatnya berfungsi.
Jika url dimulai dengan string tertentu, saya ingin menghapusnya dari url dan meneruskannya sebagai params kueri.
Contoh permintaan url:
http://domain.com/foo/my_page
Ini akan ditransformasikan menjadi
http://domain.com/my_page?param=foo
Jika 'foo' tidak ada, itu harus melalui permintaan normal. Logika ini harus berlaku untuk url halaman atau url jenis posting khusus di situs saya (pada dasarnya foo / *). Berpikir itu akan bertindak sebagai lulus melalui, jika url memiliki 'foo' menghapusnya dan kemudian hanya meneruskan ke Wordpress untuk hal yang normal.
Saya sudah memiliki 'param' sebagai query_vars yang diizinkan.
Secara total, perlu bekerja untuk yang berikut:
- / foo / my_page (Halaman)
- / foo / my_folder / my_page (Sub-Halaman)
- / foo / example_type (Arsip Posting Kustom)
- / foo / example_type / example_post (Custom Post Single)
sumber
page
tipe posting, atau sembarang halaman? bagaimana dengan halaman induk / anak dalam hierarki?Jawaban:
Aturan dasar yang akan berfungsi untuk contoh Anda:
Ini mengambil apa pun yang muncul setelahnya
foo/
dan menetapkannya sebagaipagename
untuk kueri, dan kemudianparam
mendapatkan nilai statisfoo
. Jika Anda membutuhkan pola URL yang berbeda, Anda akan memerlukan aturan tambahan untuk setiap pola unik. Merujuk keWP_Query
dokumen untuk berbagai var permintaan yang dapat diatur dalam aturan penulisan ulang. Jangan lupa untuk menyiram aturan penulisan ulang setelah menambahkan yang baru. Ini dapat dilakukan dengan mengunjungi halaman Pengaturan Permalinks.Sekarang kunjungi URL contoh Anda:
akan memuat halaman yang benar, tetapi itu tidak akan berperilaku persis seperti mengunjungi:
karena ketika menggunakan penulisan ulang internal,
param
diatur dalam$wp_query
objek permintaan, bukan$_GET
superglobal. Jika Anda perlu bekerja dengan kode yang mencari nilai$_GET
, Anda perlu langkah ekstra untuk menetapkan nilai itu:Metode lain yang perlu dipertimbangkan adalah menggunakan titik akhir, jadi
/foo/
pada akhir URL bukan sebagai awalan. Keuntungannya adalah APIadd_rewrite_endpoint
menyederhanakan menambahkan semua aturan yang Anda butuhkan, termasuk mengaktifkan pagination.sumber
Oke, saya sudah mendapatkan contoh yang berfungsi untuk semua 3 jenis permintaan. Butuh satu ton percobaan dan main-main untuk membuat mereka bekerja. Saya kira Milo pandai mendorong orang untuk menjawab pertanyaan mereka sendiri.
Setelah perubahan yang tak terhitung jumlahnya dan menyegarkan permalinks saya menyadari itu jauh lebih mudah untuk mengetahui url di luar add_rewrite_url dan sekali mereka bekerja kemudian tentukan penulisan ulang. Contoh sedang
index.php?param=foo&post_type=example_type
.Hal lain yang jelas, tetapi menambahkannya di sini sehingga dapat membantu orang lain. Anda harus menetapkan aturan add_rewrite_rule jenis pos kustom SEBELUM Anda menentukan halaman / sub-halaman aturan wildcard Anda. Saya menghabiskan sedikit waktu dengan yang itu dan berpikir itu adalah hal utama yang membuat saya tidak mengerti mengapa aturan tidak bekerja.
Berikut adalah 3 aturan yang sesuai dengan semua kebutuhan saya. Aturan Halaman / Sub-Halaman digabungkan menjadi satu.
Selain itu, apa yang saya lakukan adalah mengatur lingkaran untuk menambahkan beberapa aturan jenis pos kustom. Ingat, Anda harus mendefinisikan aturan add_rewrite_rule jenis pos kustom SEBELUM Anda menentukan halaman / sub-halaman aturan wildcard Anda.
The Analyzer Rewrite yang Milo diteruskan cukup membantu ketika mencoba untuk lebih memahami bagaimana Wordpress query untuk halaman / posting.
sumber