在循环之前包括模板

时间:2011-10-26 作者:user8503

这是我的分类/归档页面

我想在循环之前包含一个模板

但我无法根据类别获取帖子,它只在每个页面上显示最新的帖子。

当我在循环之前删除这条线时

<?php include( TEMPLATEPATH . \'/includes/tb/hot_posts.tpl.php\' ); ?>
它工作顺利,但在循环之前我需要这个模板

这是代码(存档/类别)

<div class="Hot_post">

<?php include( TEMPLATEPATH . \'/includes/tb/hot_posts.tpl.php\' ); ?>

<?php if (have_posts()) : $count = 0; ?>
这是模板中的代码(包括/tb/hot\\u posts.tpl.php)

 <?php query_posts(\'meta_key=post_views_count&order=DESC\'); ?> 
 <?php if ( have_posts() ) : while (   have_posts() ) : the_post(); ?> 
请引导我

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

尝试并添加

<?php wp_reset_query(); ?> 
在模板的末尾。http://codex.wordpress.org/Function_Reference/wp_reset_query

SO网友:Chip Bennett

您的问题与包含模板零件文件无关(顺便说一下,您应该使用get_template_part()locate_template()), 一切都与Doing It Wrong 关于query_posts().

如果试图覆盖主循环查询,则需要确保操作正确。如果需要维护默认查询上下文和追加查询参数,则必须维护默认$wp_query. 最简单的方法如法典所述:

global $wp_query;
$args = array_merge( $wp_query->query, array( \'post_type\' => \'product\' ) );
query_posts( $args );
要使用自定义参数,例如:

// Globalize $wp_query
global $wp_query;
// Define custom query args
$custom_query_args = array(
    \'meta_key\' => \'post_views_count\',
    \'order\' => \'DESC\'
);
// Merge custom query args with default query
$custom_query = array_merge( $wp_query->query, $custom_query_args );
// Query posts based on modified query arguments
query_posts( $custom_query );
如果碰巧您打算执行辅助循环,那么您不想使用query_posts() 但需要使用WP_Query()get_posts().

结束