Bu kolay değil mi ?! Özel gönderi türü / özel sınıflandırma kalıcı bağlantısı


11

Bu beni kesinlikle delirtiyor. Bunu düzeltmek için günler harcadım ve bunun neden bu kadar zor olduğunu anlayamıyorum, çünkü bu çok yaygın bir kalıcı bağlantı yapısı!

Yüzlerce cevap ve gönderiye baktım ve hiçbiri sorunu çözmedi.

Sadece bu yapıyı istiyorum:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

Bu yüzden aşağıdakileri elde ederim:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

Her şeyi denediğimde 404 hatası alıyorum ya da sayfalandırma çalışmıyor.

Bunun neden bu kadar zor olduğunu anlamıyorum!

Herhangi bir yardım gerçekten takdir!

teşekkür ederim

================================================== ==== ================== EK BİLGİ ==================

Şu anda yazı türü ve sınıflandırma aşağıdaki gibi kaydediyorum:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

Her ikisini de 'literatür' olarak kaydedersem mysite.com/literature sayfasında bir 404 alıyorum ama bu benim kalıcı bağlantımı şu şekilde gösteriyor: mysite.com/literature/books/mybook

Bu sorudaki önerileri izledikten sonra - Özel gönderi türleri, sınıflandırmalar ve kalıcı bağlantılar

Bunu işlevleriime ekledim:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

Ve yazı 'slug' => 'literature/%literature_category%' tipimi olarak değiştirdim Ve sınıflamamı olarak değiştirdi'slug' => 'literature'

mysite.com/literatureAşağıdaki URL'de bir 404 hatası alıyorum bu yüzden sayfalandırma üzerinde çalışmıyor dışında harika çalışıyor :

mysite.com/literature/page/2/


Meraktan, şimdiye kadar ne denediniz?
Matthew Boynes

Bu cevap beni en
yakına getirdi

Harika, sordum sevindim, bu bana biraz zaman kazandırdı!
Matthew Boynes

Yanıtlar:


6

Bu sorudaki önerileri daha önce yaptığınız gibi uygulayın, ancak kodunuza ekleyin:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

Son olarak, Ayarlar> Kalıcı Bağlantılar'a gidin ve kaydet'e basın. Hala çalışmıyorsa, kalıcı bağlantılarınızı tekrar kaydedin. Bazen onları iki kez kurtarman gerektiğini hissediyorum, ama kim bilir. Her neyse, nasıl çıkardığını bana haber ver. Bilgisayar Bilimi Standart Cevap # 1'in geçerli olduğunu unutmayın: Benim İçin Çalışıyor ... ;-)

TMI ülkesinden ...

Başvuru için, sebebi neden sayfalar varsayılan olarak işi yok edebiyatı için bir yeniden yazma kuralı o WordPress koyar olduğu /% literature_category bunu düşünmek eğer toplam mantıklı% /% kitabı% /% sayfa%. Böylece varsayılan kalıcı bağlantılarınız şu sırayla şu rakip kurallara sahiptir:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

Burada yaptığımız tek şey, ikincisini ayarlayarak (bunların içinde tutabiliriz, ancak daha sonra her yeniden yazma işleminde sayfa yüklemesinde çalıştırmak için bir daha normal ifade vardır) ve dizinin başına ekleyerek.

Eğlenceli gerçek: Hiç "kitap" başlıklı "sayfanız" varsa ve birden fazla sayfası varsa, bu sipariş çakışır ve sonraki sayfaları çalışmaz!


Tanrım, benim sözdizimimin burada yanlış olduğunu gördüm. Yeterince komik, benim için çalışıyor ve düzelttiğimde işe yaramıyor. Anlıyorum ve anladığımda cevabımı güncelleyeceğim ...
Matthew Boynes

Yardımın için teşekkürler Matthew. Bunu denedim ve maalesef işe yaramadı. Soruma umarım daha iyi açıklayan daha fazla bilgi ekledim!
fxfuture

1
Tamam, karışıklıktan dolayı özür dilerim. Orada biraz beyin gazı vardı (son zamanlarda biraz beyin çekirdeği olmalı). Cevabım güncellendi ve yine benim için çalışıyor. Kalıcı bağlantılarınızı kurtarmayı unutmayın.
Matthew Boynes

1
Oh tamam, güncellenmiş sorunuzu gördüm. Yani / literatür / kurgu / sayfa / 2 çalışmıyor, / literatür / sayfa / 2 çalışmıyor, doğru mu? Eğer öyleyse, bu kolay bir düzeltme, aynı şeyi bir üst seviyeye çıkaracağız
Matthew Boynes

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.