在模板中正确显示自定义帖子类型时遇到一些问题

时间:2014-01-16 作者:Sparky

我的子主题是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 这显示了正确的帖子。然而,我的目标是删除这个类别,因为它不需要。一旦我将这些自定义帖子类型显示在它们适当的归档页面上,相应的类别将是多余的。

3 个回复
最合适的回答,由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的建议!

SO网友:Chip Bennett

每个帖子三个问题不典型;然而,由于它们可能都是相互关联的,我将尝试依次帮助完成每一个步骤。

第一个问题可能很简单:

当我去mysite的时候。com/success stories/,它使用默认存档。php模板。但是,我创建了一个名为archive successstories的模板。php和它被完全忽略了。

存档模板的使用由\'has_archve\' 中的参数register_post_type() 呼叫,您添加了如下内容:

\'has_archive\' => \'success-stories\'
然而,per the Codex, \'has_archive\' 预计为string/boolean: i、 e。truefalse. 请尝试以下操作:

\'has_archive\' => true
然后,通过加载Settings -> Permalinks

Important note: 用于显示CPT存档的URLarchive-successstories.php 将是example.com/successstories, example.com/success-stories. 如果要使用后者,需要传递有效的\'rewrite\' 参数到register_post_type(). 请注意\'rewrite\', 如果没有boolean, 必须是array, 不是一个string.

SO网友:Brad Dalton

为什么不you add support for registering custom taxonomy types 而不是在CPT中使用类别?

看起来您有问题,因为您对类别使用了完全相同的slug或其他与您的CPT名称冲突的内容。

如果要使用自定义存档cpt,则只需要has\\U存档。php模板否则WordPress会生成一个标准归档文件。

这是您需要为CPT使用自定义存档模板的行。删除后,仍将为您的CPT生成存档:

\'has_archive\'  => true,
如果在CPT中使用register\\u分类法,则需要此行。

如果您的CPT命名为portfolio,您可以在代码中添加上述行,以将CPT和CPT的名称注册到自定义存档模板中,在这种情况下,该模板将是:

archive-portfolio.php

结束

相关推荐

具有自定义分类的自定义帖子类型中的WP_DROPDOWN_CATEGORIES

我有一个自定义的帖子类型,它有自己的分类法,基本上“show Vinces”是帖子类型,Vincement regions是分类法。看到一个场馆无法在多个地区存在,我删除了默认的metta框,并使用wp_dropdown_categories(). 分类法项目正在输出并按我所希望的方式显示,但它们不会被提交,并且下拉列表在提交后不会保留所选内容。我已经尽我所能地查看原始metabox的各种属性,并尝试将这些属性应用到下拉列表中,但到目前为止,我没有任何乐趣。我看过一些various WPSE上的帖子和ha