如何在分页术语档案中提供“show all post”链接?

时间:2017-08-23 作者:bhood

我有一个自定义的帖子类型,叫做game_go 还有一种分类法叫做game_go_series. 一些示例术语包括chase , compete, victory, 等等,我有一个文件叫做taxonomy-game_go_series 它仅以分页形式显示单个术语的帖子。

我想创建的第二个页面需要显示每个术语的所有帖子。换句话说,将有两页具有相同的术语。

此外,这一点很重要,我知道如何通过在文件名中使用术语来实现这一点(例如。taxonomy-game_go-chase.php), 但由于我们将添加更多的术语,每次都必须创建一个模板文件将是一件痛苦的事情。

当我们添加新术语时,是否有一种方法可以自动创建按术语分类的页面?

如果我能提供进一步的澄清,请告诉我。谢谢

1 个回复
SO网友:Jacob Peattie

此方法将对其进行设置,以便如果在分类法归档的末尾添加/全部,它将显示所有帖子。

首先,在注册分类法时,请确保将ep_maskEP_CATEGORIES. 这意味着我们可以向其添加自定义端点。

function wpse_277843_register_taxonomy() {
    register_taxonomy( \'game_go_series\', \'game_go\', array(
        \'rewrite\' => array(
            \'slug\'    => \'series\',
            \'ep_mask\' => EP_CATEGORIES,
        ),
    ) );
}
add_action( \'init\', \'wpse_277843_register_taxonomy\' );
不要复制所有代码,只需确保ep_mask 因为它可能还没有这样设置。

添加ep_mask 要自定义Post类型UI生成的分类,请执行以下操作:

function wpse_277843_cptui_ep_mask( $args, $taxonomy_slug, $taxonomy_args ) {
    if ( \'game_go_series\' == $taxonomy_slug ) {
        $args[\'rewrite\'][\'ep_mask\'] = EP_CATEGORIES;
    }

    return $args;
}
add_filter( \'cptui_pre_register_taxonomy\', \'wpse_277843_cptui_ep_mask\', 10, 3 );
然后创建all 将端点重写到EP_CATEGORIES 面具

function wpse_277843_all_endpoint() {
    add_rewrite_endpoint( \'all\', EP_CATEGORIES );
}
add_action( \'init\', \'wpse_277843_all_endpoint\' );
这确实意味着端点对类别也有效,但我们可以在以后的任何自定义行为中忽略它们。不幸的是,目前仅向自定义分类法添加端点似乎是不可能的。这只是意味着/category/category-name/all 不会扔404的。这个/all 将被忽略(或者,如果需要,可以对类别应用相同的行为)。

然后,在pre_get_posts, 如果all 在自定义分类法上访问端点,设置posts_per_page-1:

function wpse_277843_all_posts( $query ) {
    if ( $query->is_main_query() && $query->is_tax( \'game_go_series\' ) ) {
        if ( isset( $query->query_vars[\'all\'] ) ) {
            $query->set( \'posts_per_page\', -1 );
        }
    }
}
add_action( \'pre_get_posts\', \'wpse_277843_all_posts\' );
然后,如果您已经在分类法存档中,并且还不是/所有版本,则可以将模板的链接添加到/所有版本:

<?php if ( is_tax( \'game_go_series\' ) && get_query_var( \'all\', false ) === false ) : ?>
    <a href="<?php echo get_term_link( get_queried_object() ); ?>all/">
        Show All
    </a>
<?php endif; ?>

结束