34

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


我有一个名为BOOKS的自定义帖子类型。它有几个自定义字段,命名为:TITLE, AUTHOR, GENRE, RATING。如何修复下面的代码,meta_query以便只有在自定义字段中具有搜索词书籍titleauthorgenre rating

我制作了一个自定义搜索表单;将通过title,author和搜索的文本区域genre;和一个将搜索rating. 我在下面所做的meta_query仅搜索title,authorgenre. 但我现在很难为如何添加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'
          ));

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

4

2 回答 2

73

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

    $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'

        )
    )
);
于 2013-08-24T15:28:51.047 回答
6

经过一番反复试验,我找到了解决方案。这是合乎逻辑的,我的意思是 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()”的警告,因为我们传递的是数组而不是字符串。禁止该警告或如果您找到更好的解决方案,请添加一些内容。

于 2014-07-15T07:01:32.137 回答