0

Wordpress のカスタム投稿タイプの予約拡張機能に取り組んでいます。管理者は、オブジェクトが予約される日付を選択できます。予約日は、「予約」というキーと「yymmdd」形式の日付を持つ新しいカスタム フィールドとして保存されます。そのため、1 つのオブジェクトに、同じキーで複数の値を持つ複数のカスタム フィールドを設定できます。

ここで、特定の日付に利用可能なオブジェクトを照会する必要があります。以下は、私の最後の試みの 1 つです。

$args = array(
    'post_type' => 'object',
    'meta_query' => array(
        array(
            'key' => 'booking',
            'value' => array('131020', '131021', '131022'),
            'compare' => 'NOT IN'
        )
    )
);
$query = new WP_Query( $args );

私の論理では、131020 から 131022 まで利用可能なオブジェクトを探しています。ただし、WordPress が行うことは、利用可能な複数の値を個別に比較することです。そのため、要素が 131019 と 131020 で予約されている場合でも、131019 は上記の値に含まれていないため、WordPress はそれを利用可能として返します。

私が必要としているのは、「複数の値が上記の数字の中にない場合は、投稿を返す」というロジックです。

また、すべての日付に対してシリアル化された配列だけを使用しようとしましたが、これも機能しませんでした。簡単なトリックがあると確信していますが、多くの調査を行った後、ここで立ち往生しています。

何か案は?ありがとう

4

1 に答える 1

0

他の多くのアプローチの後、最終的に次の「解決策」にたどり着きました。すべての日付を配列として保存し、利用可能にする必要がある日付ごとに NOT LIKE を使用していました。上記のコードは次のようになります。

$args = array(
    'post_type' => 'object',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'booking',
            'value' => '131020',
            'compare' => 'NOT LIKE'
        ),
        array(
            'key' => 'booking',
            'value' => '131021',
            'compare' => 'NOT IN'
        ),
        array(
            'key' => 'booking',
            'value' => '131022',
            'compare' => 'NOT IN'
        )
    )
);
$query = new WP_Query( $args );

はじめに注意relation => 'AND'。私が理解しているように、これはデフォルトですが、ここで「OR」を使用すると、これも機能しません。

両方のアプローチに関するコメントにはまだ満足しています。

于 2013-09-27T07:27:03.817 に答える