Advanced Custom Fieldsプラグインを使用しています。 "date"フィールドが今日より前で、別のカスタムフィールド(レポート)に値があるすべての投稿を表示するクエリを実行したいと思います。
今のところ私はこれを持っていますが、私はいつも過去のイベントをすべて手に入れています。
'post_type' => 'activiteit',
'meta_key' => 'activiteit_datum',
'post_status' => 'publish',
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_query' => array(
'relation' => 'AND',
array( 'key' => 'activiteit_verslag','compare'=>'EXISTS'),
array( 'key' => 'activiteit_datum', 'compare' => '<', 'value' => $fullDate,'type' => 'DATE')
)
);
$pastActivities=query_posts($arg);
問題のコメントの文字列によると、値が空/ NULL
であっても、activiteit_verslag
キーが多数、またはすべての投稿に設定されているようです。 EXISTS
はキーの存在をチェックするだけです。値は考慮されないため、返される値が多すぎます。
あなたがやるべきことがいくつかあります。
1つ目はEXISTS
の代わりに!=
を使うことです。
array(
'key' => 'activiteit_verslag',
'value' => '',
'compare' => '!='
),
これはうまくいくはずですが、値が常に空の文字列に設定されている場合はonly、キー - の場合はonlyはすべての投稿に設定されています。
WP_Query
/WP_Meta_Query
は、キーが設定されていないか設定されているが空であるかどうかをチェックする必要があるような複雑なロジックには対応していません。結果のSQLは、ロジックが複雑になるにつれて効率が低下します。
正しい解決策は、データの保存方法をバックアップして変更することです。そのactiviteit_verslag
キーに空の値がある場合は、キーを削除します。あなたがそうするならば、上記のあなたの質問は(明らかにテストされていないが私はかなり確信している)うまくいくはずで、あなたはおそらくこの状況のための最も効率的な可能な質問を持つでしょう。
私はあなたがあなたのためにあなたの仕事をするために高度なカスタムフィールドを使っていることを認識します、しかし@ialocinはプラグインがあなたがその振る舞いを変えることを可能にするフィルタを持つかもしれないと思います。私はACF(または他の人が私のことを考えていないので間違っているので他の多くのプラグイン)を使用しないので、私はあなたがそのフックでできること、できないことを知りませんが、Coreフックsave_post
はつまんでやるべきです。
コンセプトの証明:
add_action(
'save_post',
function($pid) {
$empty = get_post_meta($pid,'delete_me',true);
if (empty($empty)) {
delete_post_meta($pid,'delete_me','');
}
}
);