【问题标题】:meta_query, how to search using both relation OR & AND?meta_query,如何同时使用关系 OR 和 AND 进行搜索?
【发布时间】:2013-08-26 10:46:31
【问题描述】:

已解决:请参阅下面的答案。


我有一个名为 BOOKS 的自定义帖子类型。它有几个自定义字段,命名为:TITLEAUTHORGENRERATING。如何修复下面的 meta_query 代码,以便只有 books 在自定义字段中有搜索词:titleauthorgenre 完全正确 我的搜索表单中指定的rating 会显示在结果中吗?

我制作了一个自定义搜索表单;将搜索titleauthorgenre 的文本区域;和一个将搜索rating 的下拉菜单。我在下面创建的meta_query 仅搜索titleauthorgenre。但我现在不知道如何为rating 添加代码。

这是我在视觉上想象的 meta_query 关系: (标题或作者或流派)和评级

$args = array(
        'relation' => 'OR',
          array(
             'key' => 'title',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
          array(
             'key' => 'author',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
          array(
             'key' => 'genre',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
), 
        array(
        'relation' => 'AND', 
          array(
             'key' => 'rating',
             'value' => $ratingvalue,
             'compare' => '=',
             'type' => 'NUMERIC'
          ));

非常感谢您的帮助和建议。

【问题讨论】:

标签: mysql sql wordpress meta-query


【解决方案1】:

我在一些帮助下找到了解决方案。 下面的代码完美运行。

    $args => array(
        'relation' => 'AND',
        array(
            'relation' => 'OR',
            array(
                'key' => 'title',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'author',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'genre',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            )
        ),
        array(
            'key' => 'rating',
            'value' => $ratingvalue,
            'compare' => '=',
            'type' => 'NUMERIC'

        )
    )
);

【讨论】:

  • 这不应该工作 - 它不受 WP_Meta_Query 支持。见wordpress.stackexchange.com/questions/75079/…
  • 是的,它实际上不起作用。需要一个永久的解决方案来使用这两种关系。这是非常需要的。
  • 在 WP 4.1 中,像这个答案这样的嵌套元查询现在应该可以工作了,更多信息在这里:make.wordpress.org/core/2014/10/20/…
  • @Angelica Santibanez 挖掘了一个我知道的老话题,但现在官方支持了吗?我正在努力使这项工作正常进行,希望您能提供帮助!
  • 只是补充一个旧答案:现在它在法典中得到明确支持和解释:codex.wordpress.org/Class_Reference/…
【解决方案2】:

经过反复试验,我找到了解决方案。这是合乎逻辑的,我的意思是 meta_query 不支持字段“key”的数组,但是在“key”中给出数组,我得到了完美的解决方案。我可能听起来很疯狂,但它的作用就像魅力一样。

$args => array(
    'relation' => 'AND',
    array(
        'key' => array('title','author','genre',),
        'value' => $searchvalue,
        'compare' => '='
    ),
    array(
        'key' => 'rating',
        'value' => $ratingvalue,
        'compare' => '=',
        'type' => 'NUMERIC'

    )
)

您只会收到“trim()”的警告,因为我们传递的是数组而不是字符串。取消该警告或如果您找到更好的解决方案,请添加一些内容。

【讨论】:

  • 我正在使用这个键 => array() hack,但是在 WP 4.1 中,它似乎不再受到“非官方”的支持。幸运的是,对 meta_query 的 4.1 更新现在允许所选答案正常工作。
猜你喜欢
  • 2019-10-30
  • 2015-09-04
  • 2021-05-11
  • 2018-02-28
  • 1970-01-01
  • 2018-02-06
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多