Taxonomy Overview Page?

时间:2013-08-21 作者:neoian

我正在寻找一种创建分类法概述页面的方法。因此,假设您在某个页面(domain.com/my\\u tax/myterm)上,它会在“myterm”类别中显示不同的内容类型。帖子、页面和自定义内容类型。所有这些都通过了分类学。php。

我可以很好地完成这项工作,但当查看内容类型“Posts”的分类法归档时,它最终会转到此概述页面,而不是一个工作的Posts归档。因此,目前无法查看一种内容类型的所有帖子并获得一个工作归档。

我尝试添加<?php if ( is_post_type_archive() ) { ?>..normal loop..<? } ?> 但是分页会中断,并且在检测当前的post类型时存在相当大的问题。

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

如果你想做的只是display all post types on the taxonomy archive, 然后,您可以通过在pre_get_posts. 假设分类法foobar:

function wpse111033_filter_pre_get_posts( $query ) {
    if ( $query->is_main_query() && $query->is_tax( \'foobar\' ) ) {
        $query->set( \'post_type\', \'any\' );
    }
}
add_action( \'pre_get_posts\', \'wpse111033_filter_pre_get_posts\' );
电话里说“如果我在foobar 分类法存档,我是主要查询对象,然后查询所有帖子类型,而不仅仅是post 岗位类型。“”

根据此注释编辑:

假设有Post Type X和Post Type Y/taxonomy\\u name/term1会列出术语1的帖子,以及包含该术语的Post Type X和Post Type Y中的帖子(在帖子下的主要内容区域)。

为此,您需要创建一个自定义taxonomy.php, 这就完成了您要完成的任务,或者创建一个自定义页面模板。

现在假设您在/taxonomy\\u name/term1/page/2上,我不希望运行2个post-type循环,我希望taxonomy页面正常工作。

这将很棘手,但完全有可能。该过程如下所示:

创建自定义taxonomy.phppre_get_posts 回调以包括所有帖子类型$pagedis_paged() 有条件确定您是在第一页上还是在“分页”页上,如果! is_paged(), 那么你就在第一页了,所以如果is_paged(), 然后,您位于第一页以外的另一页,因此请偏移帖子,并显示一个正常循环taxonomy.php

/**
 * Simplified markup for taxonomy archive index
 */

get_header();

// First page
if ( ! is_paged() ) {
    ?>
    <ul>
    <?php
    if ( have_posts() ) : while ( have_posts() ) : the_post();
        ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php
    endwhile; endif;
    ?>
    </ul>
    <?php
}
// Subsequent pages
else {
    if ( have_posts() ) : while ( have_posts() ) : the_post();
        // Normal loop output here
    endwhile; endif;
}

get_footer();

pre_get_posts

function wpse111033_filter_pre_get_posts( $query ) {
    if ( $query->is_main_query() && $query->is_tax( \'foobar\' ) ) {
        // Include all post types
        $query->set( \'post_type\', \'any\' );
        // On the first page, 
        // display all posts
        if ( ! $query-is_paged() ) {
            $query->set( \'posts_per_page\', \'-1\' );
        }
        // On subsequent pages,
        // offset posts
        else {
            // You could do: $query->set( \'offset\', \'-10\' );
            // But this will break pagination,
            // so we need to fix it again
            $query->set( \'posts_per_page\', \'10\' );
            $page_offset = ( ( $query->query_vars[\'paged\']-1 ) * 10 ) - 10;
            $query->set( \'offset\', $page_offset );
        }
    }
}
add_action( \'pre_get_posts\', \'wpse111033_filter_pre_get_posts\' );

found_posts

但是弄乱页面偏移量会破坏查询分页(因为WordPress不会考虑它),因此我们需要另一个修复:

function wpse111033_filter_found_posts( $found_posts, $query ) {
    if ( $query->is_main_query() && $query->is_tax( \'foobar\' ) ) {
        if ( $query->is_paged() ) {
            // Get the right posts
            return $found_posts + 10;
        }
    }
}
add_filter( \'found_posts\', \'wpse111033_filter_found_posts\', 10, 2 );

SO网友:gmazzap

当您使用以下链接时domain.com/my_tax/myterm 这称为“分类法归档”,由

  1. taxonomy-{$taxonomy}-{$term}.php 如果不存在taxonomy-{$taxonomy}.php 如果不存在taxonomy.php 如果不存在archive.php 如果不存在index.php
根据Template Hierarchy

如果您有一个类别(类别是帖子的内置分类法)并使用链接http://domain.com/category/my_category_term (链接可能因您的重写设置而异)

这是also 与其他分类法归档一样,分类法归档由与自定义分类法相同的文件处理。

如果要将某个分类法存档与其他分类法存档隔离开来,请使用模板层次结构,并创建一个名为category.php (如果要隔离“类别”分类法),此文件将处理所有类别请求。

如果您希望帖子(默认帖子类型)的归档,无论它们属于什么分类法,请创建一个home.php 文件(请记住,模板层次结构是您的朋友)。

调用此存档的url取决于您在下的设置中设置的内容Settings > Readings > Front page displays

如果您已设置Your latest posts 触发posts归档的url(因此包括“home.php”文件)是您的主页url,例如。http://domain.com.

如果您已设置A static page (select below) 您必须为选择一个选项Posts page 和选择页面。假设您在这里选择一个名为“Posts”(slug“Posts”)的页面,现在调用urlhttp://domain.com/posts 将显示您的帖子索引(使用home.php 作为模板)

结束