使用带有GET_TEMPLATE_PART循环的自定义WP_QUERY

时间:2012-11-27 作者:passatgt

我有一个自定义帖子类型的查询:

<?php
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$books = new WP_Query(array(
    \'post_type\' => \'wiki\',
    \'posts_per_page\' => \'50\',
    \'paged\' => $paged
));
?>
我想使用循环书循环浏览这些帖子。php:

<?php get_template_part( \'loop\', \'books\' ); ?>
循环书内部。php我有这些,就像常规循环一样。php,我刚刚更改了have\\u posts和\\u post函数来处理$books查询:

<?php if ( $books->have_posts() ) : ?>      
    <?php while ($books->have_posts()) : $books->the_post(); ?>
        <?php the_title(); ?><br/>
    <?php endwhile; ?>
<?php endif; ?>
但在此之后,我得到了一个php错误:

Fatal error: Call to a member function have_posts() on a non-object in .../loop-books.php on line 1
因此,看起来$books变量在get\\u template\\u part函数中不可用。如何解决此问题?如果我将$books查询放在循环books中。php工作正常,但我想将它们分开。

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

你要么需要全球化$books (如果你想坚持get_template_part() ) 或使用

require( locate_template( \'loop-books.php\' ) );
而不是get_template_part( \'loop\', \'books\' );. 此问题是由$books 在里面loop-books.php 仅在中定义scope 属于get_template_part().

SO网友:Chip Bennett

另一种方法:打开/关闭循环,然后使用loop-books.php 仅包含循环内容的标记。e、 g.:

<?php
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
// Get books query
$books = new WP_Query(array(
    \'post_type\' => \'wiki\',
    \'posts_per_page\' => \'50\',
    \'paged\' => $paged
));
// Open books loop
if ( $books->have_posts() ) :     
    while ($books->have_posts()) : $books->the_post();
        // Get loop markup
        get_template_part( \'loop\', \'books\' );
// Close books loop
    endwhile;
endif;
?>
然后,在loop-books.php:

<?php the_title(); ?><br/>

结束

相关推荐

获取最新创建的自定义类别(GET_TERM_BY和变量)(Out Loop)

我想知道为什么下面的代码不能工作?我的情况:我设置了一个名为“问题”的自定义类别。我想做的是获取最新创建的类别(即“第2卷第1期”)并获取其ID,以便运行plugin 作用z_taxonomy_image_url($currentID); 它根据以下项标识的类别输出URL:$currentID目前我有一个非常黑客的解决方案,但如果有人能找出下面代码的最后3行为什么不起作用,那就太棒了。我们也希望有替代和更清洁的解决方案。$taxonomy=wp_list_categories(\'taxonomy=iss