get_template_part 루프와 함께 사용자 정의 WP_Query 사용


9

맞춤 게시물 유형에 대한 검색어가 있습니다.

<?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와 같이 $ books 쿼리와 함께 작동하도록 have_posts 및 the_post 함수를 변경했습니다.

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

get_template_part 함수 내에서 $ books 변수를 사용할 수없는 것처럼 보입니다. 이 문제를 어떻게 해결할 수 있습니까? loop-books.php 안에 $ books 쿼리를 넣으면 정상적으로 작동하지만 분리하고 싶습니다.


$books->loop-books.php에서 제거를 시도하면 효과가 있기를 바랍니다.
Rohit Pande

$ books-> 부분을 제거하면 기본 쿼리를 사용하므로 나에게 좋지 않습니다.
passatgt 2011

다음과 같은 것을 사용하는 경우 <?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내 솔루션이 제대로 작동한다고 생각합니다.
Rohit Pande

답변:


5

당신은 세계화하거나 $books(고집하고 싶다면 get_template_part()) 사용해야합니다.

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

대신에 get_template_part( 'loop', 'books' );. 이 문제에 의해 발생 $books으로 loop-books.php만 정의되고 영역get_template_part().


2
이. 경우 비록, $books쿼리에 고유 한 loop-books.php템플릿 부품 파일, 난 그냥 두는 것이 좋습니다 $books = new WP_Query()템플릿 부분 파일 내의 전화를.
칩 베넷

감사. 당신의 의견은 무엇입니까?
passatgt

똑같은 @Chip-나는 또한 같은 파일에 넣고 처음부터 문제를 피할 것입니다. OP가이 두 가지를 분리하고 싶어한다는 점을 염두에두고 대답했습니다.
Johannes Pille

1
@passatgt 어느 쪽이 더 낫다면, 위의 주석을 참조하십시오. 하나의 파일로 가서 그것을 끝내겠습니다. 그것들을 분리해야한다면 locate_template()전역 네임 스페이스를 어지럽히 지 않는 옵션을 사용합니다.
Johannes Pille

알았어 고마워. 내가 너무 다른 카테고리 / 분류 체계에 따라 다른 쿼리와 같은 루프를 사용하기 원하기 때문에 내가 그들을 분리해서 할 이유는
passatgt

8

다른 방법 : 루프를 열고 닫은 다음 루프 내용에 대한 마크 업loop-books.php 만 포함 하는 데 사용 합니다. 예 :

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

그런 다음 내부 loop-books.php:

<?php the_title(); ?><br/>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.