2014-11-11 2 views
0

"location"이라는 사용자 지정 분류가있는 "services"라는 사용자 지정 게시 유형이 있습니다. 각 게시물은 "위치 A"또는 "위치 B"로 분류됩니다.WordPress 쿼리 - 날짜순 및 카테고리 별 대체 주문

"서비스"게시물 유형의 모든 게시물을 쿼리하고 날짜순으로 정렬해야합니다. 그러나 단순히 날짜별로 나열하기보다는, 나는 같은, 각 카테고리에 의해 대체 게시물하려는 : "위치 A"에서

  1. 최신 게시물을
  2. "위치 B"
  3. 2 최신 포스트에서
  4. 최신 포스트 "위치 A"에서
  5. "위치 B", "위치 A"에서
  6. 3 최신 포스트에서
  7. 2 최신 포스트
  8. 등 "위치 B"에서
  9. 3 최신 포스트 ...

이렇게하려면 다음 쿼리를 수정할 수 있습니까? 또는 일부 고급 데이터베이스 조인/병합 (해당 방법에 익숙하지 않은)을 수행해야합니까?

<?php $args = array(
     'post_type' => 'services', 
     'posts_per_page' => '-1', 
     'order_by' => 'date', 
     'order' => 'DESC', 
      'tax_query' => array(
       array(
        'taxonomy' => 'location', 
        'field' => 'slug', 
        'terms' => array ('location-a', 'location-b') 
       ) 
      ) 
     ); 
     $query = new WP_Query($args); 

     if (have_posts()) : while($query->have_posts()) : $query->the_post(); ?> 

추가 참고 :

  • 가 각 범주에서 게시물의 짝수, 그래서 당신이 게시물이 부족하면 나는, 위치 A로부터 게시물을 나열 계속 쿼리를 필요가 없습니다 위치 B에서, 그 반대의 경우도 마찬가지입니다.
  • 게시물이 두 카테고리 모두로 분류되면 어떻게됩니까? 을 두 번 표시하고 싶지 않습니다.
  • 사용자 지정 분류 "위치"는 여러 가지 다른 게시물 유형에서 공유됩니다. 하지만 한 번에 한 가지 유형의 게시물 만 조회하려고합니다.
  • 특정 게시물을 끈적 거리게 할 수있는 기능을 유지해야합니다.

이것은 가능합니까? 정말 고마워.

+0

나는 내 코드를 테스트하고 다시 테스트했으며 작동합니다. 나는 당신이 어딘가에서 당신의 가치관을 실수했다고 생각합니다. 나는 그것이 더 유용 할 것이므로 WPSE에 나의 대답을 옮겼다. –

+0

흠, 아마 내가 그랬다. 올바른 결과를 얻는다면, 나는 실수를 저질렀을 것입니다. 코드로 다시 테스트하고 자세히 살펴 보겠습니다. 답변을 삭제 한 것으로 보이지만 코드를 작동시킬 수 있다면 코드가보다 간소화되어 올바른 것으로 표시하고 싶습니다. – LBF

+0

관심있는 사람들에게 @PieterGoosen 코드가 작동했으며 아래 답변보다 약간 더 효율적입니다. 물론 그 대답은 정확합니다. Pieter의 코드는 다음에서 찾을 수 있습니다. http://wordpress.stackexchange.com/questions/168053/custom-query-alternate-posts-by-category – LBF

답변

0

작동하는 경우 코드를 확인하십시오. 죄송합니다. 코드가 너무 깁니 다

<?php 
$a1 = get_posts(array(
    'post_type' => 'services', 
    'posts_per_page' => '-1', 
    'order_by' => 'date', 
    'order' => 'DESC', 
    'tax_query' => array(
     array(
      'taxonomy' => 'location', 
      'field' => 'slug', 
      'terms' => 'location-a' 
     ) 
    ), 
    'fields' => 'ids' // only get post IDs. 
)); 
$a2 = get_posts(array(
    'post_type' => 'services', 
    'posts_per_page' => '-1', 
    'order_by' => 'date', 
    'order' => 'DESC', 
    'tax_query' => array(
     array(
      'taxonomy' => 'location', 
      'field' => 'slug', 
      'terms' => 'location-b' 
     ) 
    ), 
    'fields' => 'ids' // only get post IDs. 
)); 
if (count($a1) >= count($a2)) { 

    $count = count($a1); 

} else { 
    $count = count($a2); 

} 

$newArray = array(); 
for ($i = 0; $i < $count; $i++) { 
    $newArray[] = $a1[$i]; 
    $newArray[] = $a2[$i]; 
} 


$wp_query = new WP_Query(array(
    'post_type' => 'product', 
    'post__in' => $newArray, 
    'orderby' => 'post__in' 
)); 

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

     echo get_the_title() . '<br>'; 
    endwhile; 
endif; 
?> 
+0

이 작업은 올바른 쿼리와 함께 하나의 쿼리로 수행 할 수 있습니다. 그냥 팁,'query_posts'를 사용하지 마십시오. 여기에 사용할 올바른 함수는'WP_Query' 또는'get_posts'입니다. –

+0

@ Pieter Goosen Thanx는 조언을 구합니다. 앞으로 여러분 모두에게 도움이 될 좋은 해결책을 게시 할 수 있습니다. – ManuA

+0

나는 chnegs를 만들었습니다. Pieter가 제안한대로 – ManuA

관련 문제