我在WordPress 3.6.1上有一个网站,我为菜谱创建了一个自定义帖子类型,代码为:
add_action( \'init\', \'register_cpt_my_recipes\' );
function register_cpt_my_recipes() {
$args = array(
\'hierarchical\' => false,
\'supports\' => array( \'title\', \'editor\', \'custom-fields\' ,\'tag\' , \'excerpt\', \'thumbnail\'),
\'public\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'menu_position\' => 5,
\'show_in_nav_menus\' => false,
\'publicly_queryable\' => true,
\'exclude_from_search\' => false,
\'has_archive\' => true,
\'query_var\' => true,
\'can_export\' => true,
/* Not necessary but added as a solution */
\'rewrite\'=> array( \'slug\' => \'my_recipes\', \'with_front\' => true ),
\'capability_type\' => \'post\'
);
register_post_type( \'my_recipes\', $args );
/* Not necessary but added as a solution */
flush_rewrite_rules( false );
}
我创建了
archive-my_recipes.php
自定义模板文件,但每当我导航到
mysite/my_recipes/
我最终得到的代码来自
archive.php
所有我的帖子,而不仅仅是帖子,形成了我的自定义帖子类型。我试过了
taxonomy-my_recipes.php
但也不起作用。
而且single-my_recipes.php
工作正常。
我在WordPress文档网站上读到了这个主题here 和here
这是body_class
输出:
[ archive post-type-archive post-type-archive-Array logged-in admin-bar custom-font-enabled single-author customize-support ]
我补充道:
add_action( \'pre_get_posts\', \'add_my_post_types_to_query\' );
function add_my_post_types_to_query( $query ) {
if ( !is_admin() && $query->is_main_query() )
$query->set( \'post_type\', array( \'post\', \'page\', \'recipes\' ) );
return $query;
}
发挥作用。php将我的自定义帖子类型包括在主查询中。
最合适的回答,由SO网友:s_ha_dum 整理而成
你的pre_get_posts
过滤器不正确。你改变的问题比我想象的要多。“main”查询不仅仅是主索引。您正在向每个页面添加(或试图添加)所有这些帖子类型,基本上,-作者档案、类别、所有内容。
尝试以下操作:
add_action( \'pre_get_posts\', \'add_my_post_types_to_query\' );
function add_my_post_types_to_query( $query ) {
if (
!is_admin()
&& $query->is_main_query()
&& \'my_recipes\' != $query->get(\'post_type\')
) {
$query->set( \'post_type\', array( \'post\', \'page\', \'my_recipes\' ) );
}
}
您的
archive-my_recipes.php
现在应该可以了。我不知道这是否是正确的解决方案。我怀疑你想要
is_home
或
is_front_page
因此,您只需将其他帖子类型添加到特定索引。类似于:
function add_my_post_types_to_query( $query ) {
if (
$query->is_home()
&& $query->is_main_query()
) {
$query->set( \'post_type\', array( \'post\', \'page\', \'my_recipes\' ) );
}
}