問題描述
我有一個自定義帖子型別的查詢:
<?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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。