meta_key
をmeta_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を選択し、$projectID
が210
である場合、それは一種の仕事です。記者会見が表示されます。ただし、$projectID = 20
の場合、201
、202
、203
などのプロジェクトの記者会見があります(これらの数字には '20
'が含まれているのでLIKE
が機能します)。
このクエリに「整数」だけをチェックするように指示する方法はありますか。それで、 "2"はプロジェクト2
のレビューのみを表示し、201
、202
、またはそれらの中に2がある他の番号のレビューは表示しないのですか?
REGEXP
の代わりに使用するLIKE
オプションがあるのを見たことがありますが、 '整数'のみをチェックするような使い方を見つけることはできません。
私は 'IN
'も試しましたが、ここではまったくうまくいきません。
私が考えたものの、それがまったく可能かどうかわからないことの1つは、次のようなものを使用することです。
'key' => 'belongs_to_project[$i]'
そのため、カスタムフィールドの配列内の各値に対して、LIKE
ではなく$projectID
で'='
をチェックできます。そのようなオプションがあるのかどうか、そしてそれがどのように書かれるべきか私は知りません。
私の説明が十分に明確であることを願って、私がよりよく説明する必要があるかどうか私に知らせてください。
解決策は、LIKE
が数字ではなく正確な文字列を比較するように、$projectID
のリテラル値を比較する必要があることです。 $projectID
をリテラルにするには、引用符で囲む必要があります。
だから、私はこの行を変更しました:
'value' => $projectID,
に:
'value' => '"'.$projectID.'"',
これは問題を解決します。
私はあなたがIN
でcompare
を使うべきだと思いますが、これはうまくいかないとあなたは言った。そして私は何かに気づいた(これが間違いであれば許してください):あなたは配列の例を書きます
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'
)
)
);