2012-04-22 3 views
0

내 플러그인에서 단축 코드를 만들었으므로 잘 작동합니다. 단축 코드는 일부 매개 변수를 가져와 출력이있는 사용자 지정 루프를 만들어야합니다. 매개 변수의wordpress query (shortcode)는 항상 첫 번째 게시물을 반환합니다.

하나는 내가 모든 게시물 ($markers = '-1') 때로는 하나의 ($markers = '1') 또는 ($markers = 'x') muliple의 데이터가 필요합니다 occations에 출력에 얼마나 많은 게시물 ($ 마커)에 대한 루프

$args=array(
       'meta_key'=>'_mykey', 
       'post_status'=>'publish', 
       'post_type'=>'post', 
       'orderby'=>'date', 
       'order'=>'DESC', 
       'posts_per_page'=>$markers, 

); 

    $wp_query = new WP_Query(); 
      $wp_query->query($args); 

if ($wp_query->have_posts()) : while (($wp_query->have_posts())) : $wp_query->the_post(); 

// do the loop using get_the_id() and $post->id 

endwhile;endif; 
wp_reset_query();//END query 

입니다.

단일 페이지/게시물에서 모두 훌륭하게 작동하지만 내 문제는이 기능이 둘 이상의 게시물 (! is_single) 및 ($ markers = '1')이있는 장소에있을 때 항상 문제의 데이터를 반환한다는 것입니다. 최신 게시물 및 올바른 하나가 아닙니다. (예 : 기본 wordpress 테마에서 10 개의 게시물을 표시합니다 - 모두 동일한 데이터입니다)

분명히 $post->ID의 문제입니다. wp 루프 바깥 쪽에서 맞춤 루프를 수행 할 때 올바른 게시물 ID를 가질 수 있습니까? 아니, 내가) (get_the_id 사용하지 말아야 작동하는 것 같다하지만, 한 -

나는

global $post; 
$thePostIDtmp = $post->ID; //get the ID before starting new query as temp id 
$wp_query = new WP_Query(); 
$wp_query->query($args); 
// Start Custom Loop 

if (!is_single()){ 
$post_id_t = $thePostIDtmp;} 
else { 
$post_id_t = $post->ID;} 

하여 문제를 ovverride 다음 $post_id_t을 사용하려고? 또는 쿼리를 사용하지 말고 get_posts를 사용해야합니까 ??

모든 아이디어/솔루션/생각 ??

답변

1

$ wp 개체를 덮어 쓰지 않고 query_posts (http://codex.wordpress.org/Function_Reference/query_posts)를 사용합니다. 페이지에 원하는만큼 많은 루프를 포함 할 수 있어야합니다. 이 문제가있는 경우 전화하기 바로 전에 http://codex.wordpress.org/Function_Reference/wp_reset_query을 사용할 수 있습니다.

나는 이것을 발견한다 : http://blog.cloudfour.com/wordpress-taking-the-hack-out-of-multiple-custom-loops/ 도 약간의 고통을 앗아 간다.

+0

답변 주셔서 감사합니다 - 나는 내 경우에는 도움이되지 않는 query_posts() 또는 get_posts()를 사용해야 할 것이라고 생각합니다. 확실히 이유는 확실하지 않습니다. –

+0

게시 ID를 반향 출력 해 보았습니다. 그래서 언제 변화하는지 알 수 있습니다. if 문 내에서이를 반향 출력하면 tmp 변수를 설정할 때 상황을 파악하는 데 도움이 될 수 있습니다. – matpol

0

WordPress에는 기본적으로 두 가지 종류의 쿼리가 있습니다. 주 루프를 변경하는 것과 그렇지 않은 두 가지가 있습니다. 범주 아카이브 페이지를 표시하는 데 사용되는 것과 같은 기본 루프를 변경하려면 query_posts을 사용하십시오. 그것은 당신이 정확히 그것을 해줍니다. 기본 쿼리의 매개 변수를 삭제, 변경 및 추가하여 일반 페이지의 결과를 변경합니다. query_posts에는 drawbacks이 (가) 개 있습니다.

그런 다음 데이터베이스에서 물건을 가져 와서 예를 들어 놀러 다니는 데 사용되는 쿼리가 있습니다. 사이드 바에 최신 게시물 제목이나 현재 게시물의 첨부 파일을 표시합니다.

그과 같이 메인 루프 독립적으로 사용자 정의 루프를 구축하는 새로운 WP_Query 객체를 생성하려면 다음을 수행

// The Query 
$the_query = new WP_Query($args); 

// The Loop 
while ($the_query->have_posts()) : $the_query->the_post(); 
    echo '<li>'; 
    the_title(); 
    echo '</li>'; 
endwhile; 

// Reset Post Data 
wp_reset_postdata(); 

그런 다음 WP_Query의 동생처럼 get_posts()있다. 그것은 제 의견으로는 더 쉬운 인터페이스를 가지고 있고 더 쉬운 결과를 가진 배열을 반환합니다. 그것은 다음과 같습니다 get_the_id 같은 foreach는 템플릿 태그 내부

$myposts = get_posts($args); 
foreach($myposts as $post) : setup_postdata($post); 
    echo "<li>"; 
    the_title(); 
    echo "</li>"; 
endforeach; 

() 작동합니다.

+0

감사합니다. 나는 당신의 제안 된 방법을 살펴볼 것입니다. 내 문제는 쿼리가 작동하지 않습니다 - 내 문제는 그것이 첫 번째 게시물을 반복해서 반환한다는 것입니다. 기본적으로 - 콘텐츠의 "정상적인"wp 루프 안에 - 내 단축 코드를 실행하지만 'posts_per_page'=> 1로 설정하면 항상 첫 번째 (동일한) 게시물을 반환합니다. get_the_id()는 $ post-> ID와 마찬가지로 작동하지만 항상 같은 게시물의 값을 반환합니다. 그렇지 않으면 다른 페이지에서도 아무 문제가 없습니다 (워드 프레스 루프는 항상 1 ..). –

+0

"내 문제는 쿼리가 작동하지 않는다는 것만은 아닙니다. 내 문제는 쿼리가 작동하지 않는 것처럼 들리지만 제 첫 번째 게시물을 반복해서 반환한다는 것입니다." 기본 쿼리에서 벗어나십시오. 새 WP_Query 객체를 만들거나 get_posts()를 사용하면 문제가 없습니다. –

+0

글쎄, 불행히도 지금 AFK를 얻을 필요가 있지만 최대한 빨리 시도 할 것입니다. 설명 된 쿼리를 제외한 모든 쿼리에서 내 쿼리가 정상적으로 작동합니다. 나는 설명하려고 노력할 것이다, 나는 2 개의 예제 포스트를 가지고있다. 하나는 $ markers = -1이고 다른 하나는 = 1이다. get_posts를 사용하면 - 첫 번째 것은 post_meta에 대해 동일한 데이터를 제공하고 두 번째 것은 훌륭하게 작동합니다. 새 게시물 객체로 변경하면 첫 번째 객체가 올바르게 작동하고 두 번째 객체는 첫 번째 마커를 제공합니다. 메타 데이터로 첫 번째 게시물 .. 조금 혼란 스럽다는 것을 알고, 내가 돌아 오면 곧 예제를 게시하려고합니다. –

관련 문제