У меня есть запрос для пользовательского типа сообщения:
<?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, он работает нормально, но я хочу разделить их.
wp-query
loop
get-template-part
passatgt
источник
источник
$books->
из loop-books.php, и я надеюсь, что это будет работать.<?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 )); ?>
и здесь вы загружаетеget_template_part
запрос. И после этого, если вы,reset postdata
то я думаю, что мое решение будет работать правильно.Ответы:
Вам нужно будет либо глобализироваться
$books
(если вы хотите придерживатьсяget_template_part()
), либо использоватьвместо
get_template_part( 'loop', 'books' );
. Эта проблема обусловлена$books
вloop-books.php
настоящее время определяется только в объеме отget_template_part()
.источник
$books
запрос относится кloop-books.php
файлу части шаблона, я бы порекомендовал просто поместить$books = new WP_Query()
вызов в файл части шаблона.locate_template()
вариант, чтобы не загромождать глобальное пространство имен.Альтернативный метод: открыть / закрыть цикл, а затем использовать,
loop-books.php
чтобы содержать только разметку для содержимого цикла. например:Тогда внутри
loop-books.php
:источник