0

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

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

我发现这个关于 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>

4

1 回答 1

1

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

当您访问与分类档案相关的 url 时,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 '';
        });
    }
});
于 2013-10-10T13:49:35.947 回答