2014-09-15 4 views
0

온라인 전자 상거래를 만들었습니다. 판매용 전자 서적과 전자 잡지를 만들었습니다. 하위 카테고리가있는 "전자 책"제품 카테고리가 있으며, 잡지에는 "emagazines "범주에는"여성 ","남성 "및"비즈니스 "와 같은 하위 범주가 있습니다. emagazines의 경우 저장소의 전체 잡지 섹션에 대한 쿼리를 수정하기위한 pre_get_posts 함수를 만들었습니다. 다음 코드는 내가 문제는 내가 범주은 "emagazines"을 목표로 한 후, 내 기능 만 eMagazines 범주에 영향을 미치고하지 "여성", "남자"와 같은 아이들 범주, "비즈니스"이다pre_get_posts를 사용하여 아동용 Woocommerce 카테고리를 생성하는 방법

 function magazine_filter($query) { 
      if (!is_admin() && $query->is_main_query() && $query->query_vars['product_cat'] == 'emagazines' : 

       // My code goes here 

      endif ; 
     } 

     add_action('pre_get_posts','magazine_filter'); 

을 가지고있다 확실한 해결책은 수동으로 내 모든 하위 범주를 대상으로하는 것이지만 이것은 너무 깁니다. 나는이 함수가 동적이기를 원하기 때문에이 함수는 항상 "eMagazines"카테고리의 모든 하위 카테고리를 대상으로합니다.

도와주세요

답변

0

이 테스트는 완료되었지만 이와 비슷한 방법이 유효합니다. 이것은 처음에 당신이 찾고있는 용어를 잡고 (쉽게 식별하기 위해), 대상 용어의 후손 인 모든 용어를 포착합니다. 나는 원래 부모 용어는 쿼리의 결과로 반환되는 경우 기억, 그래서 그렇지 않은 경우, 용어 쿼리를 다음 줄의 주석을 해제 할 수 없습니다

function magazine_filter($query) { 
    $emag = get_term_by('slug', 'emagazines', 'product_cat'); 
    $tree = get_terms('product_cat', array(
     'fields'=>'ids', //Should be 'ids' not 'id' 
     'hide_empty'=>false, 
     'child_of'=>$emag->term_id 
    )); 
    //$tree[] = $emag->term_id; //Uncomment this if the emagazines term ID isn't included. 
    if (!is_admin() && $query->is_main_query() && in_array($query->query_vars['product_cat'], $tree)) : 

      // My code goes here 

    endif ; 
} 
add_action('pre_get_posts','magazine_filter'); 

편집 : 여기get_terms에 대한 설명서의를 . 원래 'fields'인수는 'ids' 대신 'id'으로 설정되어 문제를 일으켰습니다. '[slug``에 질의 - $'의 경우> query_vars을 id'`을 '

$tree = get_terms('product_cat', array(
    'fields'=>'id=>slug', 
    'hide_empty'=>false, 
    'child_of'=>$emag->term_id 
)); 
//$tree[$emag->term_id] = $emag->slug; //Uncomment this if the emagazines term slug isn't included. 
+0

가'변경하는 것이 좋습니다 :

나는 용어 ​​슬러그 인 경우에 $query->query_vars['product_cat'] 반환하지만,에 변경을 고려 모르겠어요 product_cat ']'이 슬러그로 카테고리를 참조하고 있습니다. – maiorano84

+0

get_terms()는 pre_get_posts에서 작동합니까? 가능하다면 $ tree는 빈 배열 인 것처럼 보이는 것을 반환합니다. 나는 'id'를 'slug'로 바꾼다 – TafMak

+0

나는 당신의 분류가 실제로 불려지는 것을 추측하고 있었다. 'product_cat'으로 등록 되었습니까? 또는 다른 것? – maiorano84

관련 문제