我有一个名为“播客”的自定义帖子类型,但没有一篇帖子显示在存档小部件中。仅显示主查询(博客帖子)。
我尝试在下面添加此代码以包含播客帖子,但这只允许它们显示在存档模板中,这很好,但还不完全存在。
/* Show Podcasts posts in archive */
add_filter(\'pre_get_posts\', \'query_post_type\');
function query_post_type($query) {
if(is_category() || is_tag()) {
$post_type = get_query_var(\'post_type\');
if($post_type)
$post_type = $post_type;
else
$post_type = array(\'nav_menu_item\',\'post\',\'podcasts\');
$query->set(\'post_type\',$post_type);
return $query;
}
}
如何让播客帖子显示在存档小部件中?
编辑:为清楚起见,我指的是当我单击本机存档小部件中的下拉列表时。应该有播客帖子的日子/月份甚至没有出现。仅显示博客帖子的日期/月份。
编辑2:我试着把这个放到functions.php
现在显示了包含播客帖子的月份,但当我点击这些月份时,它只会引导我找到404 WordPress模板。然而,当我单击包含主查询中帖子的月份时,我会看到archive
列出这些帖子的模板。
add_filter( \'getarchives_where\', \'custom_getarchives_where\' );
function custom_getarchives_where( $where ){
$where = str_replace( "post_type = \'post\'", "post_type IN ( \'post\', \'podcasts\' )", $where );
return $clauses;
}
最合适的回答,由SO网友:Pieter Goosen 整理而成
为了便于解释,下面是如何解决这个问题。
默认情况下,wordpress在主查询中不包含自定义帖子类型,这就是为什么only 从帖子类型获取帖子post
在存档页中。此外,默认情况下,小部件也不包括自定义帖子类型。
像@birgire 如中所述the post I flagged as duplicate
存档小部件正在使用wp_get_archives()
显示存档。
如果您想针对所有wp_get_archives()
函数,您可以使用getarchives_where
用于添加自定义帖子类型的筛选器:
add_filter( \'getarchives_where\', function ( $where )
{
$where = str_replace( "post_type = \'post\'", "post_type IN ( \'post\', \'podcasts\' )", $where );
return $where;
});
这应该可以在存档小部件中显示自定义帖子类型的帖子,但如果您转到特定的存档,这些帖子仍然不会显示,并且会给您一个404错误,因为您仍然必须在存档页面(archive.php)中包含自定义帖子类型
要实现这一点,可以使用pre_get_posts
在运行主查询之前,将这些自定义帖子类型添加到主查询中的操作。要专门针对归档页,可以使用is_archive()
与函数结合的条件标记
add_action( \'pre_get_posts\', function ( $query )
{
if ( !is_admin()
&& $query->is_main_query()
&& $query->is_archive()
)
$query->set( \'post_type\', array( \'post\', \'podcasts\' ) );
});