"Kısmi ayrıntılı yeniden yazma kurallarına" ihtiyacınız var. Ayrıntılı yeniden yazma kuralları, WordPress'in bir sayfa ile yazı arasındaki farkı anlayamadığı için tüm sayfaların üste yerleştirildiği anlamına gelir. Burada olabileceğini düşünüyor, çünkü formun tüm URL'leri, bu hariç portfolio/([^/]+)/
, portfolio
sınıflandırmanızdan portfolio/clients/
. Bunu yeniden yazma kurallarının üstüne koymanız gerekecek, böylece daha genel portföy sınıflandırmasından önce eşleşecek. Muhtemelen tüm yeniden yazma kurallarını ayrıntılı olmaya zorlayabilirsiniz, ancak çok fazla sayfanız varsa performansı etkileyecektir.
Bu cevap, yeniden kazanma kurallarını yeni kazandığım anlayışımla yazılmıştır, bu yüzden umarım bunu yapmanın iyi bir yoludur ve örnek kod çok fazla hata içermez.
Bir sayfa yalnızca bir yeniden yazma kuralı oluşturmaz, bir grup oluşturur:
(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]+)?/?$
Bunları kendiniz oluşturmak zorunda değilsiniz, gücünü yeniden kullanabilirsiniz WP_Rewrite
. Onun bak page_rewrite_rules()
yöntemiyle: Biz modunda ayrıntılı iseniz, tüm (aracılığıyla sayfaların listesini alır page_uri_index()
,) ve bunların ekleri üzerine yazar %pagename%
yeniden yazma etiketi ve bu sayfa için yeniden yazma kuralları oluşturur. Bunu da yapabiliriz:
// 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);
Bu bize sayfalar için kurallar verir, ancak henüz sayfada kullanılan ekler için değil. Bunları da istiyorsanız, her ek için adımı tekrarlayın, ancak add_rewrite_tag('%pagename%', "({$attachment_uri})", 'attachment=')
( page_rewrite_rules()
daha fazla bilgi için bkz .)
Güzel, kuralları aldık, ama şimdi bunları bir şekilde tüm yeniden yazma yapısına eklemeniz gerekiyor. Bunu ile yapabilirsiniz add_rewrite_rule()
, ancak $page_rewrite_rules
dizide oluşturulan her kural için çağırmalısınız . Bu nedenle, birçok kişi içine kanca filtrenin sadece orada diziyi değiştirebilir beri.rewrite_rules_array
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;
}
Bu filtreyi ekledikten sonra, yeniden yazma kurallarını temizlemelisiniz (bir sayfa, her sayfa yükünde bir değil, oldukça ağır olduğundan). Bunu arayarak flush_rewrite_rules()
veya "Kalıcı Bağlantılar" ayarları sayfasını ziyaret ederek yapabilirsiniz.