Yanıtlar:
Evet yapabilirsin. Tek ihtiyacınız olan bir filtre yapmaktır, wp_get_archives();
böylece post_type
parametre 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>';
/%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 .
mysite.com/2013/04
ancak bu bir 404'e yol açar. Özel yazı türü şu adreste bulunur: mysite.com/cats
bu da bana mysite.com/cats/2013/04
bağ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?
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.
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_cpt
standartla aynı şekilde çalıştığından, wp_get_archives
kabul 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.
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);
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'));