web-dev-qa-db-ja.com

meta_query compare> =動作していませんが、<=動作していますか?

次のコードを実行しようとしています。

$today123 = date('Ymd');
$args123 = array (
        'post_type' => 'myType',
        'meta_query' => array(
            'relation'=>'AND',
            array(
                'key'       => 'date',//this is a custom field, not the std 'date' field of wp
                'compare'   => '>=',
                'value'     => $today123,
            )
        ),
        'posts_per_page' => 10,
        'orderby' => 'meta_value_num',
        'order' => 'ASC' 
);
$variable=new WP_Query($args123);

カスタムフィールドに基づいて自分のカスタム投稿タイプをフィルタリングするには、意図したとおりにループ内でクエリを使用し、2つのvar_exportを使用して出力をチェックアウトします。

クエリは私のmeta_queryを完全に無視しています(orderbyを削除しようとしましたが、それがなくてもメタクエリーは単純に適用されません)。

だから私はコードを少し強化し、さまざまな状況でさまざまな結果をチェックアウトして、私は何かを見つけました、

使用する場合

'compare'   => '>=',

それは無視されます、そしてそれは持っていないものであっても全ての投稿を返します。

'meta_date' >= date('Ymd')

しかし、私が同じコードを使っているなら、

'compare'   => '<=',

魔法のように、フィルタは適用されて動作します。

ここに何か足りないかもしれませんが、date( 'Ymd')以上のmeta_dateの値を持つ 'myType'投稿を取得し、それらをASC順にmeta_dataでソートする必要があります。

比較 '<='が機能し、比較 '> ='が機能しないのはなぜですか。どのように私は私の望ましい結果を達成することができますか?

編集:

"面白い"発見:私がorderbyしないで注文した場合、比較> =作品...

1
Yuri Scarbaci

徹底的な調査ともっと多くのデバッグとコードの強化の後、私はメタフィールド名として "date"を使うとwordrpessクエリ自体の中に "date"と混同する多くの "混乱"を引き起こすことを発見しました。 「それ自体、これを避けるために、解決策は単にメタフィールドの名前をdateからmeta_dateに変更することです。そうすることで、フィールドに対するすべてのクエリが意図したとおりに機能するようになります。

2
Yuri Scarbaci