programing

리피터 필드 값의 wp_meta_meta

showcode 2023. 3. 11. 09:40
반응형

리피터 필드 값의 wp_meta_meta

커스텀 필드가 있는 워드 프레스 사이트를 가지고 있습니다.테이블로서 리피터필드를 조회해야 합니다.다음과 같습니다.

        | param_1 | param_2 | param_2  | param_4
        |    20   |   20    | 20       |   20
        |    555  |   680   | 56       |    0
        |    5555 |   45    | 56       |    1
        |    69   |   0     | 45       |    0

같은 줄의 쿼리와 일치하는 경우에만 결과를 얻으려면 이 리피터를 쿼리해야 합니다.

메타 쿼리는 다음과 같습니다.

[post_type] => product
[posts_per_page] => -1
[orderby] => title
[order] => ASC
[meta_query] => Array (
    [relation] => AND
    [0] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_0
        [value] => 25
        [compare] => <=
        [type] => NUMERIC
        )
    [1] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_1
        [value] => 56
        [compare] => >=
        [type] => NUMERIC
        )
    [2] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_2
        [value] => 56
        [compare] => >=
        [type] => NUMERIC
        )
    [3] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_3
        [value] => 0
        [compare] => =
        [type] => NUMERIC
        )
    )

이 코드를 통해 생성됩니다.

if( $product_search_by_param_active ){
function my_posts_where( $where ){


    $where = str_replace("AAA_param_value_", "%_param_value_", $where);
    $where = str_replace("meta_key = 'BBBproduct_params_values_", "meta_key LIKE 'product_params_values_", $where);


    return $where;
}
add_filter('posts_where', 'my_posts_where');


$range_angine_settings = get_field('param_search_range_settings');
$search_args['meta_query'] = array();
$search_args['meta_query'] ['relation'] = 'AND';


foreach( $range_angine_settings as $rangekey => $search_range ){
    ${'range-'.$rangekey} = $_GET['range-'.$rangekey]? $_GET['range-'.$rangekey] : '0';
    if ( $_GET['range-'.$rangekey] ) $has_range_query = true; 
    //$pre_prama_value = 'product_params_values_'.strval($rangekey).'_param_value_AAA';

    if( isset($_GET['range-'.$rangekey])){
        $search_args['meta_query'][] = array(
                "key" => 'BBBproduct_params_values_AAA_param_value_'.strval($rangekey),
                "value"    => $search_range['search_metric_ranges'][${'range-'.$rangekey}]['range_value'],
                "compare"  => $search_range['product_search_logic'],
                'type'    => 'NUMERIC'
        );      
    }
}
}

문제는 '%' 때문에 쿼리가 같은 줄에 일치하지 않아도 결과가 나온다는 것입니다.

위의 예에서는 결과를 얻을 수 없지만, 모든 조건이 다른 라인에서 충족되기 때문에 결과를 얻을 수 있습니다.

이 쿼리 킹을 생성하여 줄 번호별로 결과를 제공하는 방법이 있습니까?

커스텀 필드에는 CMB2를 사용하는 것이 좋습니다.https://github.com/CMB2/CMB2

언급URL : https://stackoverflow.com/questions/59480994/wp-query-and-meta-query-for-repeater-field-values

반응형