Özel gönderi türlerine .html (nokta HTML) uzantısı ekleme


10

Eklentiyi eklenti olmadan.html özel yazı türlerine eklemenin bir yolu var mı ?

/%postname.htmlKalıcı bağlantı ayarlarında kullanabileceğim yayınlar için

Kullanabileceğim sayfalar için:

add_action('init', 'change_page_permalink', -1);
function change_page_permalink() {
    global $wp_rewrite;
    if ( strstr($wp_rewrite->get_page_permastruct(), '.html') != '.html' ) 
        $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}

Özel yazı türleri için ???

.htmlÖzel yazı türü url'sini değiştirmem veya eklemem için yukarıda anlatılana benzer bir kod parçası var mı ?


5
.Html'yi hangi nedenle eklemek istediğinizi mi merak ediyorsunuz?
Vince Pettit

Eh, function post-type_permalinkbir hata verir. Bu hatayı almazsanız, hata ayıklama ayarlarınızda acı veren bir sorun var. Ayrıca lütfen sorunuzu doğru çizgilerle doğru şekilde yeniden çalışın. Teşekkürler.
kaiser

@kaiser, Özel yayın türlerinde aynı kalıcı bağlantı ayarlarını nasıl kullanabileceğimi bilmek. /$postname.htmlMesajlar için ayarlarsam , özel posta türleri için aynısını nasıl kullanabilirim.
user983248

Yorumumda yazdığım tek bir satırı okumadınız, değil mi? Lütfen kodunuzu düzeltin. Ayrıca -işlev adlarında çalışmaz ...
kaiser

@kaiser Evet yaptım, ama Flash değilim ve bir el sorunum var, bu yüzden düşündüğüm veya konuştuğum gibi
yazamıyorum

Yanıtlar:


8

Bu işe yarıyor gibi görünüyor:

Gibi yeniden yazma kurallarını oluşturun post-type/post-name.html. Dizileri, hepsi için yapmak yerine, yalnızca bazı yazı türleri için kurallar oluşturmak üzere kullanabilirsiniz.

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array();
    foreach ( get_post_types() as $t )
        $new_rules[ $t . '/([^/]+)\.html$' ] = 'index.php?post_type=' . $t . '&name=$matches[1]';
    return $new_rules + $rules;
}

Bu yayın türleri için yeni kalıcı bağlantı yapısını biçimlendirin.

add_filter( 'post_type_link', 'custom_post_permalink' ); // for cpt post_type_link (rather than post_link)
function custom_post_permalink ( $post_link ) {
    global $post;
    $type = get_post_type( $post->ID );
    return home_url( $type . '/' . $post->post_name . '.html' );
}

Ardından, eğik çizgiyi kaldırmak için standart URL'leri yeniden yönlendirmeyi durdurun. Çoğu durumda yeniden yönlendirmeyi sürdürmek isteyeceğiniz için, bunun biraz daha çalışması gerekebilir.

add_filter( 'redirect_canonical', '__return_false' );

Diğerlerinin burada söylediği gibi, yukarıdaki işlemleri yaptıktan sonra kuralları temizlemeniz gerekir ve bu, options-permalink.phpyönetici sayfasını ziyaret ederek mümkündür Dashboard -> Settings -> Permalinks.


6
Oi Vinicius, iyi bir telesekreter uygulama ile tüm işlev adları önek olan wpse_59024_ (Soru ID) kopya / makarna önlemek çatışmalarına). . . Ve bu kodun hangi cevabı yaptığını bilmenin ekstra avantajı snippet kütüphanemize aittir. . . . . +1 Açık!
brasofilo

Bu kod, post_type_linkfiltreyi kullanan diğer filtrelerin üzerine yazılır
Tom J Nowell

4

Bunun için yerleşik kalıcı bağlantıların yerini alan bir yeniden yazma kuralı ekleyebilirsiniz, örneğin özel bir yazı tipi "ürün" için ...

add_action('init', 'add_html_ext_to_custom_post_types');
function add_html_ext_to_custom_post_types() {
    add_rewrite_rule('^product/([^/]+)\.html', 'index.php?product=$matches[1]', 'top');
}

( flush_rulesKalıcı bağlantılarınızı yeniden kaydederek veya yukarıdaki @toscho notlarını kullanarak kurallarınızı temizlemeyi unutmayın ).

Uyarılar

  • Bunun gibi işlevler the_permalink()kullanmak olacağını sanmıyorum , bu yüzden post_linkbu bağlantıları yakalamak için bir filtre eklemek gerekebilir . redirect_canonicalFiltreye varsayılan kalıcı bağlantıları yeniden yönlendirmek için de ekleyebilirsiniz , böylece / product / foo ve / product / foo / /product/foo.html adresine yönlendirir.
  • Besleme URL'leri, sonraki sayfalar, geri izleme vb. Gibi sitenizin kullandığı diğer URL'ler için ek yeniden yazma eklemeniz gerekir. Yukarıdaki kod yalnızca ana Özel Yazı Türü sayfası için kullanılabilir.

2

Çalışmayı sizin için halletmek için bir WordPress eklentisini tercih ediyorsanız , WordPress eklenti deposundaki Özel Yazı Tipi Kalıcı Bağlantılarına göz atın. WordPress 3.4.1 üzerinde test edilmiştir ve mükemmel çalışır.

Eklentiyi etkinleştirdikten sonra, Gösterge Tablosu -> Ayarlar -> Kalıcı Bağlantılar'a gidin. Kayıtlı her özel yayın türü için belirli yeniden yazma işlemleri ekleyebilirsiniz.


3
Her sayfa yüklemesinde yeniden yazma kurallarını temizlemeyin.
fuxia

Bu kod çalışmıyor, ayrıca yalnızca xplus3.net/2010/05/20/wp3-custom-post-type-permalinks kodunu kopyalayıp yapıştırırsanız, test
etmemek

@toscho bunu nasıl yapmayı ya da durdurmayı düşünürsün?
user983248

1
flush_rules()sadece çok yavaş olduğu için etkinleştirme / açma üzerine çağrılmalıdır. $GLOBALS['wp_rewrite']->rulesKuralların zaten bilinip bilinmediğini kontrol edebilirsiniz .
fuxia

@Michael Ecklund Çalışmıyor 404 veriyor. Bu kodu test ettin mi?
user983248
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.