J'ai une requête pour un type de message personnalisé:
<?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
));
?>
Et je veux parcourir ces messages en utilisant le loop-books.php:
<?php get_template_part( 'loop', 'books' ); ?>
À l'intérieur du loop-books.php, je les ai, tout comme le loop.php normal, je viens de changer les has_posts et la fonction_post pour travailler avec la requête $ books:
<?php if ( $books->have_posts() ) : ?>
<?php while ($books->have_posts()) : $books->the_post(); ?>
<?php the_title(); ?><br/>
<?php endwhile; ?>
<?php endif; ?>
Mais après cela, j'obtiens une erreur php:
Fatal error: Call to a member function have_posts() on a non-object in .../loop-books.php on line 1
Il semble donc que la variable $ books ne soit pas disponible dans la fonction get_template_part. Comment puis-je résoudre ce problème? Si je mets la requête $ books à l'intérieur de loop-books.php, cela fonctionne bien, mais je veux les séparer.
wp-query
loop
get-template-part
passatgt
la source
la source
$books->
loop-books.php et j'espère que cela fonctionnera.<?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 )); ?>
et ici vous chargez laget_template_part
requête. Et après cela, si vous,reset postdata
je pense que ma solution fonctionnera correctement.Réponses:
Vous devrez soit globaliser
$books
(si vous voulez vous en tenirget_template_part()
), soit utiliserau lieu de
get_template_part( 'loop', 'books' );
. Ce problème est dû$books
au faitloop-books.php
qu'il n'est défini que dans le cadre deget_template_part()
.la source
$books
requête est spécifique auloop-books.php
fichier de partie de modèle, je recommanderais simplement de placer l'$books = new WP_Query()
appel dans le fichier de partie de modèle.locate_template()
option de ne pas encombrer l'espace de noms global.Une autre méthode: ouvrir / fermer la boucle, puis utiliser
loop-books.php
pour ne contenir que le balisage du contenu de la boucle. par exemple:Ensuite, à l'intérieur de
loop-books.php
:la source