Get_template_part döngüsüyle özel bir WP_Query kullanma


9

Özel bir yazı türü için bir sorgu var:

<?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
));
?>

Ve ben loop-books.php kullanarak bu mesajlar arasında döngü istiyorum:

<?php get_template_part( 'loop', 'books' ); ?>

Döngü-books.php içinde ben, sadece normal loop.php gibi, ben sadece $ kitap sorgusu ile çalışmak için have_posts ve the_post işlevini değiştirdim:

<?php if ( $books->have_posts() ) : ?>      
    <?php while ($books->have_posts()) : $books->the_post(); ?>
        <?php the_title(); ?><br/>
    <?php endwhile; ?>
<?php endif; ?>

Ama bundan sonra bir php hatası alıyorum:

Fatal error: Call to a member function have_posts() on a non-object in .../loop-books.php on line 1

Yani $ books değişkeni get_template_part işlevi içinde mevcut değil gibi görünüyor. Bu sorunu nasıl çözebilirim? Ben döngü-books.php içinde $ books sorgu koymak onun iyi çalışıyor, ama ben onları ayırmak istiyorum.


$books->loop-books.php dosyasını kaldırmayı deneyin ve umarım işe yarayacaktır.
Rohit Pande

Eğer $ books-> kısmını kaldırırsanız benim için iyi değil bu yüzden varsayılan bir sorgu kullanır.
passatgt

gibi bir şey kullanıyorsanız: <?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 )); ?>ve burada get_template_partsorguyu yüklersiniz. Ve bundan sonra eğer reset postdatabenim çözümümün düzgün çalışacağını düşünüyorum.
Rohit Pande

Yanıtlar:


5

Küreselleşmeniz $books(bağlı kalmak istiyorsanız get_template_part()) ya da

require( locate_template( 'loop-books.php' ) );

yerine get_template_part( 'loop', 'books' );. Bu sorun kaynaklanır $booksiçinde loop-books.phpsadece tanımlanmış olan kapsam içinde get_template_part().


2
Bu. $booksSorgu loop-books.phpşablon parçası dosyasına özgü olsa da, sadece $books = new WP_Query()şablon parçası dosyasının içine çağrı koymak tavsiye ederim .
Chip Bennett

Teşekkürler. Ne düşünüyorsun, hangisi daha iyi çözüm?
passatgt

Aynı, aynı @Chip - Ben de aynı dosyaya koymak ve ilk etapta sorunu önlemek istiyorum. OP'nin ikisini ayırmak istediğini akılda tutarak bu cevabı verdi.
Johannes Pille

1
@passatgt Daha iyi olduğu sürece, yukarıdaki yorumlara bakın, bir dosyaya gitmeyi ve onunla bitirmeyi tercih ederim. Onları ayırmanız gerekiyorsa, locate_template()genel ad alanını karıştırmamak için bu seçeneğe giderdim .
Johannes Pille

Tamam teşekkürler. Ben onları ayırmak istiyorum nedeni ben de diğer kategoriler / taksonomiler dayalı diğer sorguları ile aynı döngü kullanmak istiyorum
passatgt

8

Alternatif bir yöntem: döngüyü açar / kapatır ve loop-books.phpyalnızca döngü içeriğinin işaretlemesini içermek için kullanın . Örneğin:

<?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;
?>

Sonra, içinde loop-books.php:

<?php the_title(); ?><br/>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.