wp_query und meta_query für Repeater-Feldwerte

Lesezeit: 2 Minuten

Benutzer-Avatar
matisa

Ich habe eine WordPress-Site mit benutzerdefinierten Feldern. Ich muss ein Repeater-Feld als Tabelle abfragen. Es sieht so aus:

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

Ich muss diesen Repeater nur dann abfragen, um ein Ergebnis zu erhalten, wenn er mit der Abfrage in derselben Zeile übereinstimmt

Meine Metaabfrage sieht so aus:

[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
        )
    )

Sie wird durch diesen Code erstellt:

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'
        );      
    }
}
}

Das Problem ist, dass ich aufgrund des ‘%’ ein Ergebnis bekomme, auch wenn die Abfrage nicht in derselben Zeile übereinstimmt.

Im obigen Beispiel sollen keine Ergebnisse erzielt werden, aber da jede Bedingung in einer anderen Zeile erfüllt wird, erhalte ich ein Ergebnis.

Gibt es eine Möglichkeit, diesen Abfragekönig zu erstellen, um Ergebnisse nach Zeilennummer anzuzeigen?

Für mich bevorzuge ich die Verwendung von CMB2 für benutzerdefinierte Felder
https://github.com/CMB2/CMB2

  • Sieht interessant aus. Ich verwende dafür tatsächlich einen Filter.

    – Matissa

    11. August 2020 um 9:22 Uhr

1386100cookie-checkwp_query und meta_query für Repeater-Feldwerte

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy