组合一个数组的Meta_Query键值

时间:2017-07-11 作者:Faye

我的搜索工作正在进行,但客户只是提出了一个我没有考虑的请求。如果你按名字(如john)或姓氏(如doe)搜索,这绝对会带来你的结果。但如果你搜索他们的全名(如john doe),你会得到0个结果。

我环顾四周,但似乎找不到一种方法将搜索结果与“first\\u name last\\u name”进行比较。

我浏览了论坛上的类似问题,但它们没有帮助/似乎完全朝着不同的方向发展。如果有人有任何知识,或者能给我指出正确的线索,我将不胜感激。

以下是我的代码摘要:

$args = array(
    \'role\'           => \'Subscriber\',
    \'meta_query\'     => array(
        array(
                \'key\'     => \'membership_class\',
                \'value\'   => \'Full\',
                \'compare\' => \'=\',
                \'type\'    => \'CHAR\',
            ),
        array(
            \'relation\' => \'OR\',
            array(
                \'key\'     => \'first_name\',
                \'value\'   => $usersearch,
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\'     => \'last_name\',
                \'value\'   => $usersearch,
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\'     => \'personal_city\',
                \'value\'   => $usersearch,
                \'compare\' => \'LIKE\',
                \'type\'    => \'CHAR\',
            ),
            array(
                \'key\'     => \'personal_province\',
                \'value\'   => $usersearch,
                \'compare\' => \'LIKE\',
                \'type\'    => \'CHAR\',
            ),
            array(
                \'key\'       => \'treatments\',
                \'value\'     => $usersearch,
                \'compare\'   => \'LIKE\',

            ),



        ),

    ),
);

2 个回复
最合适的回答,由SO网友:dbeja 整理而成

如果使用IN运算符并将搜索词拆分为单词数组,会怎么样:

$args = array(
    \'role\'           => \'Subscriber\',
    \'meta_query\'     => array(
        array(
                \'key\'     => \'membership_class\',
                \'value\'   => \'Full\',
                \'compare\' => \'=\',
                \'type\'    => \'CHAR\',
            ),
        array(
            \'relation\' => \'OR\',
            array(
                \'key\'     => \'first_name\',
                \'value\'   => explode( \' \', $usersearch ),
                \'compare\' => \'IN\'
            ),
            array(
                \'key\'     => \'last_name\',
                \'value\'   => explode( \' \', $usersearch ),
                \'compare\' => \'IN\'
            ),
            array(
                \'key\'     => \'personal_city\',
                \'value\'   => $usersearch,
                \'compare\' => \'LIKE\',
                \'type\'    => \'CHAR\',
            ),
            array(
                \'key\'     => \'personal_province\',
                \'value\'   => $usersearch,
                \'compare\' => \'LIKE\',
                \'type\'    => \'CHAR\',
            ),
            array(
                \'key\'       => \'treatments\',
                \'value\'     => $usersearch,
                \'compare\'   => \'LIKE\',

            ),



        ),

    ),
);

SO网友:Faye

我今天蹲下来解决了这个问题。希望我的成功能帮助其他人。

因为元查询数组需要一个真正的meta\\u键,所以实际上需要为用户创建一个,并用您想要传递的信息填充它。请参见add_user_meta 函数获取更多信息。

因此,在运行搜索之前,我有以下几点:

<?php 
$allusers = get_users(array(
    \'role\' => \'subscriber\',

));

foreach ($allusers as $user) {
    $firstName = get_user_meta($user->ID, \'first_name\', true);
    $lastName = get_user_meta($user->ID, \'last_name\', true);

    $full_name = $firstName . \' \' . $lastName . \' \';

    $uid = $user->ID;


    add_user_meta( $uid, \'full_name\', $full_name );


}
?>
在这里,我调用了所有用户,然后为他们定义了所有新的元用户,我的自定义值包括用户的名字和姓氏(忽略我对自定义变量的使用而不是标准变量,我在这个页面上有很多用户查询,只是想确保我没有引起任何冲突)。

然后在我的搜索查询中,我又添加了一个查询。。。

array(
    \'key\'     => \'full_name\',
    \'value\'   => $usersearch,
    \'compare\' => \'LIKE\'
),
这让我对约翰、多伊和约翰·多伊这三个人都进行了搜索。

结束

相关推荐

custom search result page

我所做的,我创建搜索。php<?php get_header(); ?> <div class=\"wapper\"> <div class=\"contentarea clearfix\"> <div class=\"content\"> <h1 class=\"search-title\"> <?php echo $wp_query->found_posts; ?>&#