이 질문이 오래 되었더라도 Google 검색에서 온 사람이보다 유연한 답변을 요구할 경우를 대비하여 여기에 설명하겠습니다.
시간이 지남에, 내가 할 수있는 솔루션 경제력 WP_Query
이나 글로벌 쿼리 무관합니다. 사용자 정의를 사용하는 경우 WP_Query
에만 사용하도록 제한하고 있습니다 include
또는 require
당신의 변수를 사용할 수 있도록 $custom_query
하지만, (나를 위해 대부분의 경우입니다!) 어떤 경우에는 내가 만든 템플릿 부분은 전역 쿼리에서 사용되는 몇 배 (예 : 아카이브 템플릿) 또는 사용자 정의에서 WP_Query
(앞 페이지에서 사용자 정의 포스트 유형을 쿼리 등). 그 말은 내가 상관없이 쿼리의 종류 세계적으로 액세스 할 수 카운터를 필요. 워드 프레스는이 사용할 수 있도록하지만, 여기가 일부 후크 덕분에 일어날 수 있도록하는 방법은 없습니다.
당신의 functions.php이 배치
/**
* Create a globally accessible counter for all queries
* Even custom new WP_Query!
*/
// Initialize your variables
add_action('init', function(){
global $cqc;
$cqc = -1;
});
// At loop start, always make sure the counter is -1
// This is because WP_Query calls "next_post" for each post,
// even for the first one, which increments by 1
// (meaning the first post is going to be 0 as expected)
add_action('loop_start', function($q){
global $cqc;
$cqc = -1;
}, 100, 1);
// At each iteration of a loop, this hook is called
// We store the current instance's counter in our global variable
add_action('the_post', function($p, $q){
global $cqc;
$cqc = $q->current_post;
}, 100, 2);
// At each end of the query, we clean up by setting the counter to
// the global query's counter. This allows the custom $cqc variable
// to be set correctly in the main page, post or query, even after
// having executed a custom WP_Query.
add_action( 'loop_end', function($q){
global $wp_query, $cqc;
$cqc = $wp_query->current_post;
}, 100, 1);
이 솔루션의 장점은 사용자 지정 쿼리를 입력하고 일반 루프로 돌아 오면 어느 쪽이든 올바른 카운터로 재설정된다는 것입니다. 쿼리 내에 있으면 (워드 프레스에서는 항상 그렇습니다), 카운터는 정확할 것입니다. 기본 쿼리가 동일한 클래스로 실행되기 때문입니다!
예 :
global $cqc;
while(have_posts()): the_post();
echo $cqc; // Will output 0
the_title();
$custom_query = new WP_Query(array('post_type' => 'portfolio'));
while($custom_query->have_posts()): $custom_query->the_post();
echo $cqc; // Will output 0, 1, 2, 34
the_title();
endwhile;
echo $cqc; // Will output 0 again
endwhile;