Eu tenho uma consulta para um tipo de postagem personalizado:
<?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
));
?>
E eu quero percorrer esses posts usando o loop-books.php:
<?php get_template_part( 'loop', 'books' ); ?>
Dentro do loop-books.php eu os tenho, assim como o loop.php normal, apenas alterei a função have_posts e the_post para trabalhar com a consulta $ books:
<?php if ( $books->have_posts() ) : ?>
<?php while ($books->have_posts()) : $books->the_post(); ?>
<?php the_title(); ?><br/>
<?php endwhile; ?>
<?php endif; ?>
Mas depois disso, recebo um erro php:
Fatal error: Call to a member function have_posts() on a non-object in .../loop-books.php on line 1
Parece que a variável $ books não está disponível dentro da função get_template_part. Como posso resolver esse problema? Se eu colocar a consulta $ books dentro do loop-books.php, está funcionando bem, mas quero separá-las.
wp-query
loop
get-template-part
passatgt
fonte
fonte
$books->
loop-books.php e espero que funcione.<?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 )); ?>
e aqui você carrega aget_template_part
consulta. E depois disso, se vocêreset postdata
, acho que minha solução funcionará corretamente.Respostas:
Você precisará globalizar
$books
(se quiser manterget_template_part()
) ou usarem vez de
get_template_part( 'loop', 'books' );
. Este problema é causado por$books
emloop-books.php
que está sendo definido apenas no âmbito daget_template_part()
.fonte
$books
consulta for específica para oloop-books.php
arquivo de parte do modelo, eu recomendaria apenas colocar a$books = new WP_Query()
chamada dentro do arquivo de parte do modelo.locate_template()
opção, para não bagunçar o espaço para nome global.Um método alternativo: abra / feche o loop e use
loop-books.php
para conter apenas a marcação do conteúdo do loop. por exemplo:Então, dentro de
loop-books.php
:fonte