web-dev-qa-db-ja.com

Meta_key値の配列に対して単一の数値をチェックする方法

meta_keymeta_valuesの配列と照らし合わせてチェックすることに関する多くの情報があるようですが、私は反対のことをしたいのです。

私はプロジェクトのあるサイトとプレスレビューを持っています。クライアントがレビューを追加すると、リストから関連プロジェクトを選択するためのカスタムフィールド(ACF)が表示されます。

特定のプロジェクトに関連するすべてのプレスレビューを1ページにまとめて表示しようとしています。私はプロジェクトIDを持っていて、欲しいプレスレビューを選択するために$ argsを使ったクエリを使います。

私の現在の$args

$args = array(
    'post_type'     =>  'pressreview',
    'order'         =>  DESC,
    'meta_query' => array(
        array(
            'key' => 'belongs_to_project',
            'value' => $projectID,
            'compare'   => 'LIKE'
        )
    )
);

問題は、カスタムフィールド 'belongs_to_project'がID付きの配列を返すことです。 1回のプレスレビューでは複数のプロジェクトに関することがあるため、クライアントにそのフィールドのリストから複数のプロジェクトを選択させます。典型的な配列は次のようになります。

Array ( [0] => 210 [1] => 202 ).

$projectIDがその配列の中にあるかどうかを調べます。

現在の設定では、クライアントがリストから202と210を選択し、$projectID210である場合、それは一種の仕事です。記者会見が表示されます。ただし、$projectID = 20の場合、201202203などのプロジェクトの記者会見があります(これらの数字には '20'が含まれているのでLIKEが機能します)。

このクエリに「整数」だけをチェックするように指示する方法はありますか。それで、 "2"はプロジェクト2のレビューのみを表示し、201202、またはそれらの中に2がある他の番号のレビューは表示しないのですか?

REGEXPの代わりに使用するLIKEオプションがあるのを見たことがありますが、 '整数'のみをチェックするような使い方を見つけることはできません。

私は 'IN'も試しましたが、ここではまったくうまくいきません。

私が考えたものの、それがまったく可能かどうかわからないことの1つは、次のようなものを使用することです。

'key' => 'belongs_to_project[$i]'

そのため、カスタムフィールドの配列内の各値に対して、LIKEではなく$projectID'='をチェックできます。そのようなオプションがあるのか​​どうか、そしてそれがどのように書かれるべきか私は知りません。

私の説明が十分に明確であることを願って、私がよりよく説明する必要があるかどうか私に知らせてください。

3
Els

解決策は、LIKEが数字ではなく正確な文字列を比較するように、$projectIDのリテラル値を比較する必要があることです。 $projectIDをリ​​テラルにするには、引用符で囲む必要があります。

だから、私はこの行を変更しました:

'value' => $projectID,

に:

'value' => '"'.$projectID.'"',

これは問題を解決します。

6
Els

私はあなたがINcompareを使うべきだと思いますが、これはうまくいかないとあなたは言った。そして私は何かに気づいた(これが間違いであれば許してください):あなたは配列の例を書きます

Array ( [0] => 210 [1] => 202 ).

つまり、arrayの値はNUMERICで、Default型は 'CHAR'です。だからあなたは試すことができます

$args = array(
    'post_type'     =>  'pressreview',
    'order'         =>  DESC,
    'meta_query' => array(
         array(
            'key' => 'belongs_to_project',
            'value' => $projectID,
            'compare'   => 'IN',
            'type'     => 'NUMERIC'
         )
     )
);
0
Kika