Özel bir yayın türü adını ve sayfa kalıcı bağlantı çakışmasını (aynı bilgi) çözme


19

"Visningshus" adında özel bir yazı türüm ve ayrıca bu bilgi içeren bir Sayfam var. Bu olması gerektiği gibi.

Şu anda, " http://my-site.com/visningshus " bu türdeki tüm yayınları listeler. Bunun yerine kalıcı bağlantı bilgi sayfasını içeren sayfayı göstermek istiyorum.

Wordpress'in yazı tipi adının öncelikli olmasını değil, kalıcı bağlantıyı ve Sayfayı göstermesini nasıl sağlayabilirim?

Yanıtlar:


33

En kolayı, bu CPT için arşiv sayfasını devre dışı bırakmak olacaktır:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

Daha sonra "Ayarlar> Kalıcı Bağlantılar" bölümünde kalıcı bağlantılarınızı yenilemeyi unutmayın


1
Mükemmel çalıştı - ancak şimdi özel posta türünün adıyla başlayan tüm kalıcı bağlantılar, wp-admin'de doğru olmalarına ve yeniden yazma yapılmadığı halde 404 veriyor. Yani, sitedeki tüm kalıcı bağlantılar doğrudur, ancak tüm özel yayınlar 404 verir. Buna yardımcı olabilir misiniz? :)
Henrik Erlandsson

@HenrikErlandsson Belki yazı türünüz sayfanın adı ile aynı olabilir. Bu durumda yazı türü adınızı değiştirmenizi öneririm. Örnek: Özel yazı türü adı - Önce: ürünler Sonra: cpt_products.
Bruno Monteiro

Çok akıllı. Bir sürü sorunu çözer
bysanchy

8

@ Carl'ın yayını hakkında yorum yapmak için yeterince yüksek bir itibar değilim, ama onun doğru cevabı (en azından sayfa slug ve özel yazı tipi slug aynı tutmak ve bir archive.php dosyası kullanmama durum)

Ancak cevabı sayfalandırma ile ilgili hatalar verecektir. Sayfalandırma hatalarını önlemek için:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

Bu sayfalandırmaya bakar, sayfa numarasını alır ve sonra kapak tarafında, sayfayı eşleşen bilgi ile kullanmaya zorlar ve sayfa değişkenini ekler.

Bu ,'has_archive' => false, yukarıda belirtilenlere ek olarak , istenen işlevselliğe ulaşmalıdır.

Diğerlerinin belirttiği gibi, bu değişikliği yaptıktan sonra Ayarlar> Kalıcı Bağlantılar'ı ziyaret ederek yeniden yazma kurallarını temizlediğinizden emin olun.

Umarım bu birine yardımcı olur, çünkü bunun beni çok uzun bir süre boğduğunu biliyorum.


4

Tjena Henrik!

Tek yapmanız gereken, önceden oluşturulmuş Wordpress Yeniden Yazma kurallarına bir yeniden yazma kuralı eklemektir. Bu kod snippet'ini temanızın function.php dosyasına ekleyin veya ayrı bir pugin olarak ekleyin ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);

4
Herhangi biri bunu kullanıyorsa, Kaldır flush_rewrite_rules();Yeniden yazma kurallarını inither seferinde değiştirmemelisiniz. Bir kez yeniden yükleyin ve ardından kaldırın veya yönetici panosundaki kalıcı bağlantı ayarlarına giderek kalıcı bağlantıları manuel olarak yıkayın ve "Değişiklikleri Kaydet" i tıklayın
tehlivi 14:17

0

Çatışmayı çözmeden çözdüm. Slug visningshus ile bir sayfa oluşturun ve içine istediğinizi yazın. Bu sayfanın kimliğini not edin.

Archive-custom-post-type.php şablonunu istediğiniz şekilde oluşturun ve özelleştirin (büyük olasılıkla bir sayfa şablonu kullanacaksınız), ancak döngü parçasını

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

Daha sonra http://my-site.com/visningshus adresine gittiğinizde , sayfa tarafından yönetilen içeriği doğru url'de görebilirsiniz.

Çalıştığını bana bildirin.


Güzel fikir, ama bu çok karmaşık. Çözümümü denedin mi?
kraftner

@ kraftner hayır, yapmadım. Bir dahaki sefere denemek istiyorum. Teşekkürler!
molokom

Bunun da başlık gibi bazı yan etkileri vardır ve hala her şey bir sayfa değil, bir arşiv sayfasıymış gibi oluşturulmaktadır. Bu çözümü kullanmanızı tavsiye etmem.
kraftner

Sayfa kimliği değişirse ne olur? Bu güvenli değil.
Joel James

0

Oy kullanmaya izin verilmiyor, ancak Carls çözümü için +, register_post_type

'has_archive' => false

Basit. Bununla birlikte, sayfalandırma sorunlarıyla karşılaştığınızda,

add_rewrite_rule

0

Benim için düzeltilen şey arşivi yanlış olarak ayarlamaktı, ancak özel yazı türümü ayarlarken Hiyerarşik'i yanlış olarak ayarlamaktı!


0

HERHANGİ BİR özel yazı tipi bilgi için özel yazı türleri içeriğine göre sayfalandırmaya öncelik vermek için genel bir çözüm.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

Bu snippet'i eklemenin yanı sıra, özel gönderi türünüzün archive = false

ve son olarak, Kalıcı Bağlantılar ayarları sayfasına gidin > Ayarlar> Kalıcı Bağlantılar (/wp/wp-admin/options-permalink.php) ve sayfadaki bağlantı yapısını yenilemek için geçerli ayarları kaydedin.

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.