我有一个自定义帖子类型的查询:
<?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工作正常,但我想将它们分开。
最合适的回答,由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/>