Ich habe eine Abfrage nach einem benutzerdefinierten Beitragstyp:
<?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
));
?>
Und ich möchte diese Beiträge mit der Datei loop-books.php durchlaufen:
<?php get_template_part( 'loop', 'books' ); ?>
Innerhalb der loop-books.php habe ich diese, genau wie die reguläre loop.php, ich habe gerade die have_posts und die_post-Funktion geändert, um mit der $ books-Abfrage zu arbeiten:
<?php if ( $books->have_posts() ) : ?>
<?php while ($books->have_posts()) : $books->the_post(); ?>
<?php the_title(); ?><br/>
<?php endwhile; ?>
<?php endif; ?>
Aber danach bekomme ich einen PHP-Fehler:
Fatal error: Call to a member function have_posts() on a non-object in .../loop-books.php on line 1
Es sieht also so aus, als ob die Variable $ books in der Funktion get_template_part nicht verfügbar ist. Wie kann ich dieses Problem beheben? Wenn ich die $ books-Abfrage in die loop-books.php stelle, funktioniert sie einwandfrei, aber ich möchte sie trennen.
wp-query
loop
get-template-part
passatgt
quelle
quelle
$books->
aus loop-books.php zu entfernen & ich hoffe es wird funktionieren.<?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 )); ?>
und hier laden Sie dieget_template_part
Abfrage. Und danach, wenn Siereset postdata
dann denke ich, dass meine Lösung richtig funktionieren wird.Antworten:
Sie müssen entweder globalisieren
$books
(wenn Sie sich daran halten möchtenget_template_part()
) oder verwendenstatt
get_template_part( 'loop', 'books' );
. Dieses Problem wird verursacht durch$books
inloop-books.php
nur in der definiert ist , Umfang vonget_template_part()
.quelle
$books
Abfrage jedoch spezifisch für dieloop-books.php
Vorlagenteildatei ist, würde ich empfehlen, den$books = new WP_Query()
Aufruf nur in die Vorlagenteildatei einzufügen.locate_template()
Option wählen, den globalen Namespace nicht zu überladen.Eine alternative Methode: Öffnen / Schließen der Schleife und Verwenden von
loop-books.php
, um nur das Markup für den Schleifeninhalt zu enthalten . z.B:Dann innerhalb von
loop-books.php
:quelle