Answers:
是的你可以。您需要做的是对其进行过滤,wp_get_archives();
以便它接受post_type
参数:
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;
}
然后调用:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
每当您要按自定义帖子类型显示存档时,只需传递post_type args:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
。然后,可能有可能使用类似于上述的钩子来修改链接以开头/%category%/
而不只是日期。
mysite.com/2013/04
但是会导致404。自定义帖子类型位于:mysite.com/cats
,这使我认为mysite.com/cats/2013/04
链接应该是什么,但这也解析为404。如何使归档链接起作用?
并非如此,Wordpress开发人员的官方说法是自定义帖子类型并非旨在完成普通普通帖子的工作,并且,如果您需要日期等的存档,那么您做的事情就不正确,而且您最好使用帖子格式等。
自定义帖子类型旨在用于Web应用程序等,而诸如设置自定义帖子类型作为具有不同名称的辅助博客或并行博客(例如具有功能的Blog与新闻)的功能则不是此功能旨在并且将意味着由于实施而产生的其他技术问题。
如果您仍然坚持这样做,仅使用自定义分类法和帖子格式是不够的,则可以在functions.php中添加重写规则,然后将某些URL中的年/月存档重定向到帖子存档页面,然后检查自定义如果您已在重写规则中指定了变量并加载了其他模板,则请发布存档页面,并确保在重写规则中设置适当的值。
编辑 ->尽管此答案仍适用于<WP4.4,因为自定义帖子类型现在包含4.4支持wp_get_archives()
最后,对于基于日期的WordPress自定义帖子类型档案,有一个简单,快速,简便的解决方案!这是一个长期存在的问题,已记录在WP Core Trac中。
它尚未解决,但Trac的贡献者之一已在GitHub上发布了一个简单的插件,使您可以拥有基于日期的CPT存档。
安装此插件或手动添加功能代码后,您可以使用CPT档案,例如:
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
注意,此新功能wp_get_archives_cpt
与标准功能相同,wp_get_archives
因此您可以使用它接受的任何常规参数。但是,它只是为您添加了添加自定义帖子类型名称参数的功能。
声誉不足,无法将此添加到taiken的答案中。
但是想补充一点,但是他的回答确实对我有用,但是链接的格式为“ localhost / date / 2010”。而我需要'localhost / postslug / 2010'格式。我可以通过在wp_get_archives的输出上使用字符串替换来解决此问题。
因此,根据您的永久链接的设置方式,此代码将解决404问题并将链接重定向到自定义帖子类型的永久链接结构:
$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的帖子中,所以这就是我最终要做的事情:
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()
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));