2017-12-08 5 views
0

012 용어로 12 개의 객체를 얻고 싶습니다. get_terms; 그리고 나는 특정한 배열을 terms_ids 먼저 가져야합니다. 여기 get_terms - 'include'배열이 주어질 때 총 결과 수를 얻습니다.

지금까지 내 쿼리입니다 :

$term_args = array(
    'taxonomy' => 'coupon_store', 
    'number' => 12, 
    'include' => $location_terms, 
    'meta_query' => array(
     array(
      'key'  => '_wpc_is_featured', 
      'value' => 'on', 
      'compare' => '=', 
     ), 
    ) 
); 

$store_terms = get_terms($term_args); 

문제는 $location_terms는 3 값으로 구성되어 있기 때문에, 전체 결과 개수도 나는이 get_terms에 따라 확실히 가능하지 알고 3으로 제한되어 있다는 점이다 선적 서류 비치.

배열에서 3을 얻은 후 나머지 9 개 결과를 얻으려면 해킹이 있습니까?

UPDATE는

나는 @ 요다의 대답에 설명 된대로이 쿼리를 사용하여 달성했다. get_terms을 한 번만 사용하여 완료 할 수있는 방법이 있습니까?

답변

1

그래서 ... 기본적으로 작동하지 않습니다.

include 매개 변수는 모든 결과가 include 배열 내에 있어야하는 SQL 쿼리의 where 조건을 설정합니다.

그래서, 그게 너를 위해 좋지는 않아.

그러나 나는 당신을위한 해결책을 가지고 있습니다!

$term_args = array(
    'taxonomy' => 'coupon_store', 
    'number' => 12, 
    'include' => $location_terms, 
    'meta_query' => array(
     array(
      'key'  => '_wpc_is_featured', 
      'value' => 'on', 
      'compare' => '=', 
     ), 
    ) 
); 

$store_terms_location = get_terms($term_args); 

$term_args = array(
    'taxonomy' => 'coupon_store', 
    'number' => 12 - count($store_terms_location), // only get as many as you still need 
    'exclude' => $location_terms, 
    'meta_query' => array(
     array(
      'key'  => '_wpc_is_featured', 
      'value' => 'on', 
      'compare' => '=', 
     ), 
    ) 
); 

$store_terms_other = get_terms($term_args); 

// merge the two arrays together in order of priority 
$store_terms = array_merge($store_terms_location, $store_terms_other); 

그래서, 이것은 무엇을 커버하는 :

  • 12 개 위치 조건에 일어나
  • 우리가 이전에
  • 검사 사람을 제외 목록에서 용어의 나머지 번호를 가져옵니다 두리스트를 하나로 합치십시오.

이렇게하면 필요한 결과를 얻을 수 있습니다. 당신은 정리할 수 있고, 조건부를 사용하여 후자가 실행되어야하는지 여부를 결정할 수 있습니다. 일반적인 생각을 바탕으로 빌드하고 코드로 수행하려고하는 것을 적합하게 만듭니다.

+0

이것은 완벽합니다. 이제이 방법을 따르고 있습니다. 단 하나의 쿼리에서이 방법을 사용할 수 있는지 궁금합니다. 그래서 나는 2 차 쿼리를 피하면서 몇 초를 줄일 수있다. –

+0

하지만 기본적으로 WP_Terms :: query 버전을 직접 작성해야합니다. 기존 쿼리의 일부로이 작업을 수행 할 수있는 방법이 없습니다. 당신이 할 수있는 일은 캐싱을 살펴 보는 것입니다. 따라서 한번만 살펴보고 기억하면됩니다. 그러나 실현 가능성은 당신이 달성하고자하는 것에 달려 있습니다. – Yoda

+0

그대로 그대로 두십시오. 당분간 당신의 대답에 따라 2 개의 질문은 잘 할 것입니다. 감사합니다 –

1

당신이하려는 일은별로 의미가 없습니다.

이미을 알고 있다면 사용자가 배열에서 가장 먼저 얻게 될 3 가지 용어의 신원을 파악할 수있는 쿼리를 만드는 것은 다소 부적절합니다. 단순히 두 개의 별도 쿼리를 만들고 결과를 병합 할 수 있습니다. 데이터에 대한 자세한 내용을 모른 채

예컨대 :

$first_terms = array(
    'taxonomy' => 'coupon_store', 
    'include' => $location_terms, 
); 

$store_terms_1 = get_terms($term_args); 


$remaining_terms = array(
    'taxonomy' => 'coupon_store', 
    'number' => 9, 
    'exclude' => $location_terms, 
    'meta_query' => array(
     array(
      'key'  => '_wpc_is_featured', 
      'value' => 'on', 
      'compare' => '=', 
     ), 
    ) 
); 

$store_terms_2 = get_terms($term_args); 

$resulting_terms = array_merge($store_terms_1, $store_terms_2); 

, 훨씬 더 쉽게 할 수 없습니다.

쿼리에서 이미 용어 메타를 사용 중이므로 순서가있는 다른 용어 메타를 추가하고 을 사용하여 결과를 주문할 수 있습니다. 이 방법을 사용하면 처음 세 단어 인 을 하드 코딩 할 필요가 없으며 하나의 쿼리 만 작성하면됩니다..

예컨대 :

$store_terms = [ 
     'taxonomy' => 'coupon_store', 
     'number' => 12, 
     'meta_key' => 'coupon_store_term_order, 
     'orderby' => 'meta_value_num', 
     'meta_query' => [ 
      [ 
       'key'  => '_wpc_is_featured', 
       'value' => 'on', 
       'compare' => '=', 
      ], 
     ] 
    ]; 

이 방법, 당신은 당신의 기간 (coupon_store_term_order)에 대한 새로운 용어 메타를 설정하고 거기에 원하는 순서를 저장해야합니다. 조금 더 손을 뗄 필요가 있습니다 (예 : 정의 된 주문이없는 용어 등).

논리적으로이 세 용어가 또한 추천 용어라고 가정합니다. 그렇지 않으면 두 가지 요청을 만들고 병합하는 것이 여전히 유일한 논리적 인 방법입니다.

+0

$ location_terms는 기능이없는 ID를 포함 할 수 있으므로 예제와 관련된 가변 인자가 있습니다. 이제 3 가지 결과가 나오기 때문에 항상 의미가있는 것은 아니며 코드에 반영되어야합니다. – Yoda

+0

포인터를 보내 주셔서 감사합니다.하지만 여기에는 없습니다. 그것은 영업에 달려 있으며, 그들이 요구하는 것 이상입니다. 모든 요구 사항과 데이터를 추측 할 수는 없습니다. – yivi

+0

나도 할 수 있지만, 그 예에 불과하며 요구 사항이 중요한지 여부를 고려하지 않고 따로 버렸습니다. – Yoda

관련 문제