我的子主题是213,我已经为几个项目设置了自定义帖子类型。它们显示在仪表板中,我可以创建自定义帖子,并显示在各种类别中,因为我调用了$query->set()
使用自定义帖子类型。我已经多次保存并重新保存永久链接以刷新重写。
以下是我如何在functions.php
...
$labels_successstories = array(
// my various labels are in here
);
$args_successstories = array(
\'labels\' => $labels_successstories,
\'public\' => true,
\'menu_position\' => 29,
\'supports\' => array( \'title\', \'editor\', \'thumbnail\' ),
\'taxonomies\' => array( \'category\' ),
\'has_archive\' => \'success-stories\',
\'rewrite\' => array( \'slug\' => \'success-stories\' )
);
register_post_type( \'successstories\', $args_successstories );
在“设置>永久链接>自定义结构”(Settings>Permalinks>Custom Structure)>
/%category%/%postname%/
我是这样称呼的
$query->set()
在里面
functions.php
function get_custom_posts( $query ) {
if ( ! is_admin() && empty($query->query_vars[\'suppress_filters\']) ) { // is not in Dashboard (is_admin => Dashboard)
if ( is_home() ) { // home page - show only animal posts
return $query->set( \'post_type\', array( \'post\', \'successstories\', \'another-post-type\' ) );
} else if ( is_search() ) { // search page - show only posts, pages and custom post types
return $query->set( \'post_type\', array( \'post\', \'page\', \'successstories\', \'another-post-type\' ) );
} else if ( ! is_single() ) { // everything else, EXCEPT for Singles, show everything
return $query->set( \'post_type\', array( \'post\', \'page\', \'attachment\', \'successstories\', \'another-post-type\' ) );
}
}
}
add_filter( \'pre_get_posts\', \'get_custom_posts\' );
我的目标是删除尽可能多的类别,因为自定义的帖子类型将有效地替换这些类别中的大多数。然而,我的一个自定义帖子类型仍然需要几个类别。
以下是问题:
1) 当我去mysite.com/success-stories/
, 它使用默认值archive.php
样板但是,我创建了一个名为archive-successstories.php
它被完全忽视了。(如有必要single-successstories.php
模板工作正常)
2) 当我去mysite.com/success-stories/
, 我看到帖子,但它们来自所有帖子、自定义帖子类型和类别。我只是想看看successstories
当我去那里时自定义帖子类型。我想我知道如何解决这个问题,但如果存档模板被忽略,那么我的修复将不会被看到。
3) 目前,成功案例(自定义帖子类型)也属于名为success-stories
可访问mysite.com/category/success-stories
这显示了正确的帖子。然而,我的目标是删除这个类别,因为它不需要。一旦我将这些自定义帖子类型显示在它们适当的归档页面上,相应的类别将是多余的。
最合适的回答,由SO网友:Sparky 整理而成
整个问题都在我的过滤器里。最后一个是尚未定义的所有内容的总括。。。
} else if ( ! is_single() ) { // everything else, EXCEPT for Singles, show everything
return $query->set( \'post_type\', array( \'post\', \'page\', \'attachment\', \'successstories\', \'another-post-type\' ) );
}
我通过添加
(! is_archive())
到最后一个条件。。。
} else if ( (! is_single()) && (! is_archive()) ) {
return $query->set( \'post_type\', array( \'post\', \'page\', \'attachment\', \'successstories\', \'another-post-type\' ) );
}
现在可以找到存档模板,存档中只显示相应自定义帖子类型的帖子,与任何共享相同slug名称的类别没有冲突。(
虽然我仍将删除这些,因为它们现在是多余的。)
EDIT:
现在我已经清理了分类法,删除了多余的类别else if ( (! is_single()) && (! is_archive()) )
甚至不需要。谢谢Chip的建议!