如何修改Taxonomy.php以显示自定义帖子类型和自定义分类的所有帖子?

时间:2012-12-20 03:49:53

标签: wordpress archive taxonomy custom-post-type custom-taxonomy

我正在构建一个Wordpress网站,我正在试图弄清楚如何修改taxonomy.php以显示自定义类别和自定义分类中的所有帖子,但我被卡住了。情况如下:

我有一个名为'work'的自定义帖子类型。在该自定义帖子类型中,我有一个名为“项目类型”的自定义分类,我在其中创建了几个类别,称为摄影,视频,打印设计等。我设置了一个名为taxonomy.php的模板,用于管理mydomain.com/work以及mydomain.com/project-type/print-design/。问题是这些页面只显示最近的5个帖子。我需要它们显示正确类别中的所有帖子(或者在mydomain.com/work的情况下,自定义帖子类型中的所有帖子,无论类别如何)。

我发现this page about query_posts帮助我意识到我需要添加<?php query_posts( array ( 'post_type' => 'work', 'posts_per_page' => -1 ) ); ?>。现在工作页面正确加载,但所有类别页面都加载了所有工作帖子(因为我已经将post_type定义为我添加的那个片段中的工作)。

如何概括代码以使工作页面显示所有工作帖子,类别页面仅显示相关的类别帖子?以下是完整的代码:

<?php

/**
 * Project Type Taxonomy Archive
 */

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
?>

<h3 style="color:#EEEEEE"><?php echo apply_filters( 'the_title', $term->name ); ?> PROJECTS</h3>

<ul class="thumbnails">
    <div id="work">

    <?php if ( !empty( $term->description ) ): ?>
        <div class="archive-description">
        <?php echo esc_html($term->description); ?>
        </div>
    <?php endif; ?>
    <?php query_posts( array ( 'post_type' => 'work', 'posts_per_page' => -1 ) ); ?>
    <?php if ( have_posts() ): while ( have_posts() ): the_post(); ?>

    <div class="post">
        <li class="span4">
            <div class="thumbnail">
            <a href="<?php the_permalink() ?>"><div class="tint"><?php the_post_thumbnail( 'featured-thumb' ); ?></div></a>
            <br />
            <div class="thumbcaption">
                <a href="<?php the_permalink() ?>"><h3><?php the_title() ?></h3></a>
                <p> <?php the_excerpt(); ?></p>
                <p><i><?php the_terms( $post->ID, 'work_project_type' ,  ' ' ); ?></i></p>
            </div>  
            </div>
        </li>
    </div>

    <?php endwhile; ?>

    <div class="navigation clearfix">
        <div class="alignleft"><?php next_posts_link('« Previous Entries') ?></div>
        <div class="alignright"><?php previous_posts_link('Next Entries »') ?></div>
    </div>

    <?php else: ?>

    <h2 class="post-title">No Projects in <?php echo apply_filters( 'the_title', $term->name ); ?></h2>
    <div class="content clearfix">
        <div class="entry">
            <p>It seems there aren't any projects in <strong><?php echo apply_filters( 'the_title', $term->name ); ?></strong> right now. Check back later, I try to add new projects regularly.</p>
        </div>
    </div>

    <?php endif; ?>
</div>
</div>

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是不添加自定义模板。

当你转到与分类档案相关的网址时,wordpress已经将所有帖子都从数据库中删除了。通过创建单独的模板,尽管您可以更轻松地控制查询参数,例如“posts_per_page”,但不必自己进行查询会更好。

而是考虑做一个pre_get_posts过滤器。这样的事情。

// if on a certain taxonomy archive page, do not limit the posts
add_action('pre_get_posts', function($query){
    if (isset($query->query_vars['name_of_your_taxonomy'])) {
        add_filter('post_limits', function($limit){
            /*
            default will be something like this 'LIMIT 0, 10'
            but we don't want a limit so return empty string
            */
            return '';
        });
    }
});