Yıl ve Aya Göre Özel Yazı Tipi Arşivleri?


Yanıtlar:


17

Evet yapabilirsin. Tek ihtiyacınız olan bir filtre yapmaktır, wp_get_archives();böylece post_typeparametre kabul eder :

function my_custom_post_type_archive_where($where,$args){  
    $post_type  = isset($args['post_type'])  ? $args['post_type']  : 'post';  
    $where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
    return $where;  
}

sonra şunu çağır:

add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);

Arşivi özel gönderi türüne göre görüntülemek istediğinizde, post_type argümanlarını iletmeniz yeterlidir:

$args = array(
    'post_type'    => 'your_custom_post_type',
    'type'         => 'monthly',
    'echo'         => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';

3
Bu çözümü denedin mi? CPT'nizden bir gönderi ve gönderi sayısı ile ay listesini doğru bir şekilde getirir, ancak bağlantılar işe yaramaz. Bunları tıkladığınızda, CPT için değil, sitenin tamamı için aya yönlendirilirsiniz.
jerclarke

Bazı kazma işlemlerinden sonra (aşağıdaki Tom Nowell'in cevabına bakın), özel yazı türleri için aylık arşivlerden vazgeçtim. Bunun yerine bir gönderi kategorisi kullandım ve kalıcı bağlantı yapımı olarak değiştirdim /%category%/%year%/%monthnum%/%postname%/. Daha sonra, /%category%/sadece tarih yerine başlayacak bağlantıları değiştirmek için yukarıdakine benzer bir kanca kullanmak mümkün olabilir .
Kevin

Bu konuda soru. Bu, aşağıdaki gibi URL'ler oluşturur: mysite.com/2013/04ancak bu bir 404'e yol açar. Özel yazı türü şu adreste bulunur: mysite.com/catsbu da bana mysite.com/cats/2013/04bağlantının ne olması gerektiğini düşünmesini sağlar , ancak bu aynı zamanda 404'e de çözülür. Arşiv bağlantılarının nasıl çalışmasını sağlarsınız?
gaoshan88

2
Daha da iyisi, nihayet WordPress'teki bu eksik işlevsellik ile başa çıkmak için bir eklenti var. Bu sorunu özünde çözmeye çalışan bir çekirdek katılımcı tarafından oluşturuldu. Eklenti, sorun özünde düzgün bir şekilde çözülene kadar bize ulaşması için sağlanmıştır. wordpress.org/plugins/archives-for-custom-post-types
Trevor

6

Wordpress geliştiricilerinin resmi çizgisi, özel yazı türlerinin normal sıradan yayınların işini yapmak için tasarlanmadığı ve tarihlerin posta arşivlerine vb. İhtiyacınız varsa, işleri doğru bir şekilde yapmamanızdı. ve yazı biçimlerini vb.

Özel yazı türleri web uygulamaları vb. İçin tasarlanmıştır, ancak farklı bir adla ikincil veya paralel bir blog gibi davranan özel bir yazı türü kurmak gibi bir şey yapmak, örneğin blog ve haberler, aynı yeteneklere sahip olmak gibi bir özellik değildir. uygulanmasından kaynaklanan diğer teknik sorunlara yöneliktir ve bu anlama gelir.

Bu konuda hala ısrarcıysanız ve yalnızca özel sınıflandırmalar ve yazı biçimleri kullanmak yeterli değilse, işlevlere yeniden yazma kuralları ekleyebilirsin. Php ve belirli URL'lerde yıl / ay arşivlerini yazı arşivi sayfasına yönlendirebilir ve ardından özel yeniden yazma kurallarınızda değişkenler belirlediyseniz ve farklı bir şablon yüklüyorsanız, yeniden yazma kurallarınızda uygun değerleri ayarladığınızdan emin olun.


Sadece bu işlevsellik ile şimdiye kadar gitmek biraz garip görünüyor. Özel yayınların nasıl kullanılması gerektiğine dair bir örnek verebilir misiniz?
Dan Lee

Özel yayınlar, sayfaların ve blog yayınlarının (veya farklı bir ada sahip ancak aynı şekilde çalışan blog yayınları) kapsamına girmeyen herhangi bir şey için kullanılmalıdır, örn. Makaleler / haberler / günlük / vb.) : olaylar, menüler, mekanlar, formlar, günlükler, vb.
Tom J Nowell

Özel yayınlar temel olarak web uygulamaları üretmenin bir yoludur, daha kolay düzenleme için arka uçtaki yayın menüsünü çoğaltma aracı değildir (ve bu tür bir kullanım wordpress'i çok daha yavaş hale getirir ve gerçekleştirdiğinizden daha fazla görev haline getirir)
Tom J Nowell

1
UUUUUgh. Bu sorunun trajik bir şekilde doğru cevabı. Yukarıdaki açıklamanın "CPT'ler için tarih URL'leri olmamalı" yı temel aldığına inanamıyorum, ancak neredeyse kesinlikle "CPT'lerin tarih URL'leri çok karmaşık". CLEARLY, insanların özel bir yazı türü için tarih arşivleri isteyecekleri durumlar vardır, yazı biçimlerini işaret ederek bu bariz arzuyu yok edemezsiniz.
jerclarke

1
Kesinlikle katılmıyorum. Özel yazı türleri, kullanılmasını istediğiniz her şey için kullanılmalıdır, Kodeks'in hiçbir yerinde "web uygulamaları" için oldukları söylenmez. Ayrıca, kendi özel sınıflandırmasına sahip bir "haberler" bölümüne ihtiyacınız olabilir ve bunlar için arşivler istersiniz. Ya da, kabul ettiğim önerilen "etkinlikler" türü bile, CPT'ler için mükemmel bir kullanımdır, ancak yine de kolayca tarih tabanlı arşivlere ihtiyaç duyabilirler.
Trevor

5

DÜZENLE -> bu cevap hala <WP4.4 için geçerliyken, Özel Posta Türleri için 4.4 desteği artıkwp_get_archives()


Sonunda WordPress'te Özel Yazı Tiplerinin tarih tabanlı arşivleri için basit, hızlı ve kolay bir çözüm var! Bu uzun süredir devam eden bir konu. WP Core Trac'ta kaydedilen .

Henüz çözülmedi ancak Trac'a katkıda bulunanlardan biri Trac'a GitHub'da CPT'ler için tarih tabanlı arşivlere sahip olmanızı sağlayacak basit bir eklenti yayınladı.

Bu eklentiyi yükledikten veya işlevlerinizin kodunu manuel olarak ekledikten sonra, CPT'ler için arşivleri aşağıdaki gibi kullanırsınız:

<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>

Bu yeni işlevin wp_get_archives_cptstandartla aynı şekilde çalıştığından, wp_get_archiveskabul ettiği normal bağımsız değişkenlerden herhangi birini kullanabileceğinizi unutmayın. Ancak, özel bir yazı türü adı bağımsız değişkeni ekleyebilmenizi sağlar.


2

Bunu taiken'in cevabına eklemek için yeterli itibar yok üzgünüm.

Ancak cevabının benim için işe yaradığını eklemek istedim, ancak bağlantılar 'localhost / date / 2010' biçimindeydi. Oysa 'localhost / postslug / 2010' biçimine ihtiyacım vardı. Ben wp_get_archives çıkışında bir dize yerine kullanarak bunu düzeltmek mümkün.

Kalıcı bağlantılarınızın nasıl ayarlandığına bağlı olarak, bu kod 404 sorununu düzeltir ve bağlantıları özel yazı tipi kalıcı bağlantı yapısına yönlendirir:

$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);

1

Takien'ın gönderisine ekleyemiyorum, işte ne yapmam gerekiyordu:

functions.php

add_action('init', 'my_year_archive_rewrites');  
function my_year_archive_rewrites() {   
    add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
    add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}

add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){  
    $post_type = isset($args['post_type']) ? $args['post_type'] : 'post';  
    return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}

add_filter('year_link', 'my_year_link');
function my_year_link($link) {
    global $wp_rewrite;

    if(true) { // however you determine what archive you want
        $link = str_replace($wp_rewrite->front, '/resource/news/', $link);
    }

    return $link;
}

Wp_get_archives () çağrılıyor

wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));

Onun ilk cevabınız olduğunu görün. Soruları cevaplarken sadece bir ipucu, sadece kod eklemeyin ya da bu linkler için. Kodunuz işe yarasa da, kodunuzun ne yaptığını ve neden çalışması gerektiğini bilmek her zaman iyidir. Aksi takdirde cevabınız iyi biçimlendirilmiş. Bunun için +1
Pieter Goosen
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.