0

我正在为 Wordpress 中的自定义帖子类型开发某种预订扩展。管理员可以选择预订对象的日期。预订日期保存为新的自定义字段,键为“booking”,日期格式为“yymmdd”。因此,一个对象可以有多个自定义字段,它们具有相同的键,但具有多个值。

现在我需要查询特定日期可用的对象。以下是我最后的尝试之一。

$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 上被预订,WordPress 仍将其返回为可用,因为 131019 不在上述值中。

我需要的是一个逻辑,上面写着“如果在提到的数字中没有多个值,则返回帖子”

我还尝试对所有日期仅使用序列化数组,但这也不起作用。我相信可能有一个简单的技巧,但在做了很多研究之后,我被困在这里。

有任何想法吗?谢谢

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'开头。据我了解,这是默认设置,但如果您在此处使用“或”,这也不起作用。

仍然对这两种方法的任何评论感到高兴。

于 2013-09-27T07:27:03.817 回答