web-dev-qa-db-ja.com

クエリ文字列から配列への配列の追加 WP meta_query

クエリ文字列から配列として値を収集しています。それからそれらの値を集めて、それらを 'meta_query'の値に入れます。

WP_Queryから何も出力されないという問題があります。 meta_queryの2番目の配列に問題があるようです。

比較を 'LIKE'に変更しようとしましたが、クエリの内容ではなくすべての内容が表示されます。また、関係[OR)を削除しようとしましたが、結果には影響しません。

変数を出力すると、正しい配列が得られます。

クエリ文字列:

?variable[]=value1&variable[]=value2

PHPコード:

<?php
$variable_selected = $_GET['variable'];

$filter = array(
    'post_type' => 'my_custom_post_type',
    'meta_query' => array(
        'relation' => 'OR',
         array(
            'key' => 'my_post_field',
            'value' => $variable_selected,
            'compare' => 'IN'
            )
        )

    );

    $posts = new WP_Query( $filter  );

これに関するどんな助けでも素晴らしいでしょう。

1
Mike Boory

URLクエリ文字列$_GET['variable']?variable[]=value1&variable[]=value2および$_GET['variable'][0]は、これら2つのキー値を返す必要があるため、この$_GET['variable'][1]は配列です。

議論の後でそれを動的にする編集

$meta_query = array();
if ( ! empty( $_GET["variable"] ) ) {
    if ( is_array( $_GET["variable"] ) ) {
        $meta_query['relation'] = 'OR';
        foreach ( $_GET["variable"] as $value ) {
            $meta_query[] = array(
                'key' => 'my_post_field',
                'value' => sanitize_text_field( (string) $value ),
                'compare' => '='
            );
        }
    } else {
        $meta_query = array(
            'key' => 'my_post_field',
            'value' => sanitize_text_field( (string) $_GET["variable"] ),
            'compare' => '='
        );
    }
}
$filter = array(
    'post_type' => 'my_custom_post_type',
    'meta_query' => array(
        'relation' => 'OR',
        $meta_query
    )
);
$posts = new WP_Query( $filter );

私はそれをテストしていたので、私はオペレータを=に変更しました、そして、それは私のローカルインストールで働いた。

meta_compare(string) - 'meta_value'をテストするための演算子。可能な値は '='、 '!='、 '>'、 '> ='、 '<'、 '<='、 'LIKE'、 'NOT LIKE'、 'IN'、 'NOT IN'、 'BETWEENです。 '、' NOT BETWEEN '、' NOT EXISTS '、' REGEXP '、' NOT REGEXP '、または' RLIKE '。デフォルト値は '='です。 - コーデックス

1
Samuel Elh