programing

WC_Product_에서 사용자 지정 메타데이터 사용Woocommerce 3에 대한 쿼리

easyjava 2023. 9. 16. 10:07
반응형

WC_Product_에서 사용자 지정 메타데이터 사용Woocommerce 3에 대한 쿼리

저는 메타데이터를 기반으로 우커머스 제품을 가져올 때 표준어 프레스 WP_Query를 사용했습니다.제 제품은 트랙이고 메타컬럼(장르, 악기, 무드 등)이 많습니다.WP_Query를 사용하면 양식의 사용자 입력을 기반으로 메타 요구사항에 맞는 제품을 검색하는 메타_Query를 만들 수 있습니다.이 모든 것이 잘 작동합니다.

이제 WP_Query 대신 wp_get_products를 사용하고 싶습니다. 왜냐하면 그것은 새로운 제품 가져오기 방식이고 예전 방식보다 미래에 더 적합해야 하기 때문입니다.하지만 meta_query를 그 함수에 어떻게 전달해야 할지 모르겠어요.github에서 wc_get_products가 버전 2.8부터 메타를 지원한다고 발표했습니다.제가 이것에 대해 찾을 수 있는 유일한 정보는 https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query 에서 찾을 수 있습니다. (바로 마지막 단락입니다.

저는 WP_Query에서와 같이 각각 키, 값 및 비교를 위한 3개의 키-값 쌍을 포함하는 배열 배열로 메타 쿼리를 전달하려고 했습니다.메타를 추가하려고 했습니다.Meta: meta-field-name, 이것은 실제 필드의 이름이며, 단지 이름 자체만 'meta' 접두사가 없는 것과 다른 일부 품종들입니다.그러나 이 방법 중 어떤 것도 작동하지 않습니다.이 '사용자 지정 파라미터 지원'이 메타 필드가 아닌 사용자 지정 파라미터만 참조하는지, 아니면 제가 뭔가 잘못하고 있는지 누가 말해줄 수 있나요?

에서 제품 사용자 지정 메타데이터를 처리하려면 다음과 같이 하십시오.WC_Product_Query (테이블에 위치), 관련 문서의 마지막 단락에서 설명한 바와 같이, 조용하고 간단하며 작동합니다.

그러나 meta_query를 확장하는 함수에 설정하지 않으면 에서와 같이 여러 값과 비교 인수를 처리하지 않습니다.

다음과 같은 맞춤형 제품 메타키의 경우_volume m3(m3) 단위로 제품이 취하는 부피를 처리하기 위해, 다음 코드는 그 관습을 가능하게 할 것입니다.meta_key구체적으로compare인수 "than":

add_filter( 'woocommerce_product_data_store_cpt_get_products_query', 'handling_custom_meta_query_keys', 10, 3 );
function handling_custom_meta_query_keys( $wp_query_args, $query_vars, $data_store_cpt ) {
    $meta_key = '_volume'; // The custom meta_key

    if ( ! empty( $query_vars[$meta_key] ) ) {
        $wp_query_args['meta_query'][] = array(
            'key'     => $meta_key,
            'value'   => esc_attr( $query_vars[$meta_key] ),
            'compare' => '>', // <=== Here you can set other comparison arguments
        );
    }
    return $wp_query_args;
}

코드가 작동합니다.활성 하위 테마(또는 활성 테마)의 php 파일입니다.

이제 이 사용자 정의에 대한 쿼리를 수행합니다._volumemetakey: 특정 인수를 기반으로 볼륨이 다음보다 모든 제품을 구하려면:

$queried_products = wc_get_products( array( '_volume' => '0.2' ) );

테스트를 거쳐 작동합니다.

보다시피, WordPress를 통해 여전히 많은 Woocommerce 개발자들이 하는 일이나 심지어 SQL 쿼리계속 사용할 수 있습니다.WPDB스..

은 곧 이며, 이 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔWC_Product_Query그리고.WC_Order_query맘에 들다WP_Query더 많은 특징과 가능성을 가지고 있습니다.

이 작은 기능을 추가하여 이 모든 것을 해결할 수 있습니다.

add_filter( 'woocommerce_product_data_store_cpt_get_products_query', static function($wp_query_args, $query_vars, $data_store_cpt){
    if ( ! empty( $query_vars['meta_query'] ) ) {$wp_query_args['meta_query'][] = $query_vars['meta_query'];}
    return $wp_query_args;
}, 10, 3 );

이제 meta_query를 wc_get_products에 전달하면 지원됩니다 :).그들은 아마 나를 고용해야 할거에요 ㅋㅋㅋ

언급URL : https://stackoverflow.com/questions/51102357/use-custom-meta-data-in-a-wc-product-query-on-woocommerce-3

반응형