问题描述
我有一个自定义帖子类型的查询:
<?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
));
?>
我想通过这些帖子循环使用 loop-books.php:
<?php get_template_part( 'loop', 'books' ); ?>
在 loop-books.php 里面,我有这些,就像常规的 loop.php,我只是改变了 have_posts 和 the_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_template_part 函数中是不可用的。我如何解决这个问题?如果我把 $ books 查询放在 loop-books.php 中,它的工作正常,但我想分开它们。
最佳解决思路
您将需要全局化 $books
(如果您想坚持 get_template_part()
) 或使用
require( locate_template( 'loop-books.php' ) );
而不是 get_template_part( 'loop', 'books' );
。 loop-books.php
中的 $books
仅由 get_template_part()
的 scope 定义。
次佳解决思路
一种替代方法:打开/关闭循环,然后使用 loop-books.php
只包含循环内容的标记。例如。:
<?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/>
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。