Burada özel soru türü kalıcı bağlantılar hakkında her soru kazdık, ama çoğu ya özel taksonomi yeniden yazma sorunları ya da flush_rewrite_rules () bariz eksik gibi görünüyor. Ama benim durumumda, hiyerarşik olarak ayarlanmış özel bir yazı türü (sınıflandırma yok) kullanıyorum (böylece üst-alt ilişkilerini atayabilirim), metabox, vb. yeniden yazma kurallarını binlerce farklı yoldan sildim. Farklı kalıcı bağlantı yapılarını denedim. Ancak alt URL'ler her zaman 404 ile sonuçlanır!
Başlangıçta "üst" ve "alt" öğeleri (p2p kullanarak) için bağımsız özel yazı türlerim vardı ve muhtemelen "ebeveyn" gruplaması için bir sınıflandırma kullanmakta sorun yaşamazdım - bunların anlamsal olarak daha doğru olacağını biliyorum. Ancak istemci için, yöneticiler de tıpkı sayfalar gibi "gönderiler" görüntülendiğinde hiyerarşiyi görselleştirmek en kolay yoldur: çocukların ebeveynin altında, "-" ön ekinde ve uygun sipariş. Ayrıca sürükle-bırak yöntemiyle sipariş atamak için çeşitli yöntemler kullanılabilir. Taksonomi (veya p2p) yoluyla gruplama, yönetim listelerinde görsel olarak açık olmayan düz bir "gönderiler" listesi ile sonuçlanır.
Sonra ne olduğumu tam anlamıyla çekirdek "sayfaları" ile aynı davranış, ama benim özel yazı türü ile. Ben yazı tipini beklediğim gibi kaydettim ve yönetici mükemmel çalışıyor - Ben her bülten "yazı" için bir üst ve bir menu_order atayabilir, onlar düzenleme listelerinde doğru görünür:
Spring 2012
— First Article
— Second Article
Ve bunların kalıcı bağlantıları düzgün bir şekilde inşa edilmiş gibi görünüyor . Aslında, yapı hakkında bir şey değiştirirsem veya yazı türünü kaydederken yeniden yazma sümüğünü değiştirirsem, otomatik olarak doğru şekilde güncellenir, bu yüzden bir şeyin çalıştığını biliyorum:
http://mysite.com/parent-page/child-page/ /* works for pages! */
http://mysite.com/post-type/parent-post/child-post/ /* should work? */
http://mysite.com/newsletter/spring-2012/ /* works! */
http://mysite.com/newsletter/spring-2012/first-article/ /* 404 */
http://mysite.com/newsletter/spring-2012/second-article/ /* 404 */
Ben de hiyerarşik ilişkileri oluşturulan standart çekirdek "sayfaları" var, ve onlar sadece aynı yönetici görünüyor, ama onlar aslında ön uç üzerinde de çalışır (hem üst hem de alt URL iyi çalışır).
Kalıcı bağlantı yapım şu şekilde ayarlanmış:
http://mysite.com/%postname%/
Bunu da denedim (sadece başka birçok yanıtın gerekli olduğunu belirtmiş gibi göründü, ancak benim durumumda anlamlı değildi):
http://mysite.com/%category%/%postname%/
Kayıt CPT değişkenlerim şunları içerir:
$args = array(
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'has_archive' => 'newsletter',
'hierarchical' => true,
'query_var' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
'rewrite' => array( 'slug' => 'newsletter', 'with_front' => false ),
Özel yazı türü çocuklarım ve normal sayfa çocuklarım arasındaki tek görünür fark , CPT'mün kalıcı bağlantı yapısının başında sümüklüğe sahip olması, ardından ebeveyn / çocuk sümüklü böcekleri (sayfaların ebeveyn / çocuk sümüklü böceklerle başladığı, "önek" yok). Bu niye falan oluyor, bilmiyorum. Pek çok makale, böyle hiyerarşik CPT kalıcı bağlantılarının tam olarak böyle davranması gerektiğini gösteriyor - ama benimki iyi biçimlendirilmiş olsa da işe yaramıyor.
Beni de şaşırtan şey, o 404 sayfası için query_vars'ı incelediğimde - WP'nin alt sayfalarımı "bulması" için doğru değerleri içerdikleri görünüyor, ancak bir şey çalışmıyor.
$wp_query object WP_Query {46}
public query_vars -> array (58)
'page' => integer 0
'newsletter' => string(25) "spring-2012/first-article"
'post_type' => string(10) "newsletter"
'name' => string(13) "first-article"
'error' => string(0) ""
'm' => integer 0
'p' => integer 0
'post_parent' => string(0) ""
'subpost' => string(0) ""
'subpost_id' => string(0) ""
'attachment' => string(0) ""
'attachment_id' => integer 0
'static' => string(0) ""
'pagename' => string(13) "first-article"
'page_id' => integer 0
[...]
Ben sadece benim eksik bazı şablon olmadığından emin olmak için, yirmili kurt da dahil olmak üzere çeşitli temalar ile denedim.
Yeniden Yazım Kuralları Denetçisi'ni kullanarak, URL için görünen şey şudur: http://mysite.com/newsletter/spring-2012/first-article/
newsletter/(.+?)(/[0-9]+)?/?$
newsletter: spring-2012/first-article
page:
(.?.+?)(/[0-9]+)?/?$
pagename: newsletter/spring-2012/first-article
page:
başka bir denetçi sayfasında nasıl görüntülendiğini:
RULE:
newsletter/(.+?)(/[0-9]+)?/?$
REWRITE:
index.php?newsletter=$matches[1]&page=$matches[2]
SOURCE:
newsletter
Bu yeniden yazma çıktısı, aşağıdaki "hoş olmayan" kalıcı bağlantının işe yarayacağına inanmamı sağlayacaktır:
http://mysite.com/?newsletter=spring-2012&page=first-article
404 değil, üst CPT öğesini "bülten" olarak gösterir, alt öğe değil. İstek şu şekildedir:
Array
(
[page] => first-article
[newsletter] => spring-2012
[post_type] => newsletter
[name] => spring-2012
)
post_name
sütunda çarpışma yok .