我正在构建一个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>
答案 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 '';
});
}
});