2016-08-26 11 views
1

다음과 같은 문제가 있습니다. WooCommerce와 함께 Wordpress 사이트를 개설하여 책 만있는 웹샵을 제공합니다.Woocommerce : 주문 분류별 주문

내가 수 있도록하고 싶습니다

(여러 제품이 저자 나 출판사를 공유 할 수있는) 내가 '출판사'와 '저자'와 같은 분류 체계에 따라 일부 제품 속성을 만든

'제목'및 '가격'과 같은 Woocommerce 기본 입력란뿐만 아니라 이러한 분류 필드에서도 내 제품을 정렬 할 수 있습니다. 예를 들어 말은 :

게시자 DESC에 의해 저자 ASC 또는 순서로 순서는 지금까지 내가 발견으로 워드 프레스의 핵심 기능이 작업을 수행 할 수있는 방법이 없습니다. 어떤 사람들은 택 소노 미 필드별로 정렬하는 것이 의미가 없기 때문에 이것을 말하고 있지만 위의 예에서는 왜 저자를 기준으로 정렬하지 않는지 이해할 수 없습니다.

나는 sortby meta_value로 놀았지만, 이것은 분류법이 아닌 직접적인 후 메타를 쿼리하는 것입니다.

나는 php에 대한 지식을 가지고 있으므로, functions.php 파일에 추가 코드가 포함 된 솔루션을 사용하게됩니다.

답변

1

나는이 문제를 해결하는 방법을 방법을 발견 : 그것은 Woocommerce URL을 추가 할 수있는 시스템 필드 "제목"과 "가격"을 기준으로 정렬하기 위해 사용하는 방법과 동일 그래서 약간의 코드를 수정 https://gist.github.com/jayarnielsen/12f3a586900aa6759639

query-param "sortby"다음과 같이 구성된 값 : "field"- "direction" "pa_tax1"이라는 제품 속성을 오름차순으로 정렬하려면 url에 추가해야합니다. sortby = pa_tax1-asc

add_filter('posts_clauses', 'posts_clauses_with_tax', 10, 2); 
function posts_clauses_with_tax($clauses, $wp_query) { 
    global $wpdb; 

    // Array of taxonomies you want to sort on 
    // in case of Woocommerce Properties, be sure to add the pa_ prefix 
    $taxonomies = array('pa_tax1', 'pa_tax2', 'pa_tax3'); 

    // If no orderby query param is found, do nothing 
    if(!isset($wp_query->query['orderby'])) { 
     return $clauses; 
    } 

    // Explode the orderby query-param 
    $orderQuery = explode('-', $wp_query->query['orderby']); 
    $orderBy = []; 
    $orderBy['field'] = $orderQuery[0]; 
    $orderBy['direction'] = (isset($orderQuery[1])) ? strtoupper($orderQuery[1]) : 'ASC'; 

    // Only add clauses, if the sortby field is in our array 
    if(in_array($orderBy['field'], $taxonomies)) { 
     $clauses['join'] .= " 
      LEFT OUTER JOIN {$wpdb->term_relationships} AS rel2 ON {$wpdb->posts}.ID = rel2.object_id 
      LEFT OUTER JOIN {$wpdb->term_taxonomy} AS tax2 ON rel2.term_taxonomy_id = tax2.term_taxonomy_id 
      LEFT OUTER JOIN {$wpdb->terms} USING (term_id) 
     "; 

     $clauses['where'] .= " AND (taxonomy = '".$orderBy['field']."' OR taxonomy IS NULL)"; 
     $clauses['groupby'] = "rel2.object_id"; 
     $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) "; 
     $clauses['orderby'] .= ('ASC' == strtoupper($orderBy['direction'])) ? 'ASC' : 'DESC'; 

     return $clauses; 
    } 
    else { 
     return $clauses; 
    } 
} 
관련 문제