Anda tampaknya memerlukan "aturan penulisan ulang sebagian verbose". Aturan penulisan ulang Verbose berarti semua halaman diletakkan di atas karena WordPress tidak dapat menemukan perbedaan antara halaman dan posting. Di sini ia berpikir bisa, karena semua URL formulir portfolio/([^/]+)/
berasal dari portfolio
taksonomi Anda , kecuali yang ini portfolio/clients/
. Anda harus meletakkan yang di atas aturan penulisan ulang, sehingga cocok sebelum taksonomi portofolio yang lebih umum. Anda mungkin juga bisa memaksa semua aturan penulisan ulang menjadi bertele-tele, tetapi itu akan memengaruhi kinerja jika Anda memiliki banyak halaman.
Jawaban ini ditulis dengan pemahaman saya yang baru saja didapat dari aturan penulisan ulang, jadi saya harap ini adalah cara yang baik untuk melakukannya dan kode contoh tidak mengandung terlalu banyak kesalahan.
Halaman tidak hanya menghasilkan satu aturan penulisan ulang, itu menghasilkan grup:
(pagename)/trackback/?$
(pagename)/feed/(feed|rdf|rss|rss2|atom)/?$
(pagename)/(feed|rdf|rss|rss2|atom)/?$
(pagename)/page/?([0-9]{1,})/?$
(pagename)/comment-page-([0-9]{1,})/?$
(pagename)(/[0-9]+)?/?$
Anda tidak harus membuat ini sendiri, Anda dapat menggunakan kembali kekuatan WP_Rewrite
. Lihatlah page_rewrite_rules()
metodenya: jika kita dalam mode verbose, ia mendapat daftar semua halaman (melalui page_uri_index()
) dan lampirannya, menimpa %pagename%
tag penulisan ulang, dan menghasilkan aturan penulisan ulang untuk halaman ini. Kita juga bisa melakukan ini:
// We only generate them for this page
$page_uri = 'portfolio/clients';
// Returns site root + '%pagename%'
$page_structure = $wp_rewrite->get_page_permastruct();
// Everywhere you see %pagename% in the structure used to generate rules
// in the next step, replace it with our fixed page name
$wp_rewrite->add_rewrite_tag('%pagename%', "({$page_uri})", 'pagename=');
// This generates the group given above
$page_rewrite_rules = $wp_rewrite->generate_rewrite_rules($page_structure, EP_PAGES);
Ini akan memberi kita aturan untuk halaman, tetapi belum untuk lampiran yang digunakan di halaman. Jika Anda juga menginginkannya, Anda ulangi langkah untuk setiap lampiran, tetapi dengan add_rewrite_tag('%pagename%', "({$attachment_uri})", 'attachment=')
(lihat page_rewrite_rules()
untuk detail lebih lanjut).
Bagus, kami punya aturannya, tapi sekarang Anda perlu menambahkannya ke struktur penulisan ulang yang lengkap. Anda bisa melakukan ini dengan add_rewrite_rule()
, tetapi Anda harus memanggilnya untuk setiap aturan yang dihasilkan dalam $page_rewrite_rules
array. Untuk alasan ini, banyak orang mengaitkan ke dalam rewrite_rules_array
saringan , karena Anda hanya dapat memodifikasi array sana.
add_filter('rewrite_rules_array', 'add_verbose_portfolio_clients_page');
function add_verbose_portfolio_clients_page($rewrite_rules)
{
global $wp_rewrite;
// The previous code snippet comes here, where we generate $page_rewrite_rules
// Our rules have priority, they should be on top
$rewrite_rules = array_merge($page_rewrite_rules, $rewrite_rules);
return $rewrite_rules;
}
Setelah Anda memasukkan filter ini, Anda harus menyiram aturan penulisan ulang (sekali, tidak setiap memuat halaman, karena cukup berat). Anda dapat melakukan ini dengan menelepon flush_rewrite_rules()
, atau dengan mengunjungi halaman pengaturan "Permalinks".