在自定义元搜索查询中组合多个单词

时间:2018-09-11 作者:Nitin Jain

我正在尝试为我的书店创建自定义搜索。我有两个名为vbs\\u author和vbs\\u publisher的自定义元字段,其中包含该产品(书)的作者和出版商的名称。

到目前为止,我得到的是:

$s = get_search_query(); 
$args = array(
                \'post_type\' => \'product\',
                \'meta_query\' => array(
                    \'relation\' => \'OR\',
                        array(
                            \'key\'     => \'vbs_author\',
                            \'value\'   => $s,
                            \'compare\' => \'LIKE\'
                        ),
                        array(
                            \'key\'     => \'vbs_publisher\',
                            \'value\'   => $s,
                            \'compare\' => \'LIKE\'
                        )
                )
            );
$the_query = new WP_Query( $args );
当我搜索作者时XYZ 或出版商ABC 就个人而言,结果很好。但当我在同一个搜索中合并作者和出版商时,例如XYZ ABC, 虽然它们是vbs_authorvbs_publisher 对于同一产品,查询返回0个结果。

我尝试将关系更改为AND 但还是没用。。。

1 个回复
最合适的回答,由SO网友:Max Yudin 整理而成

按空格拆分搜索查询,并将“比较”更改为“IN”,以便能够使用元值数组:

<?php

$s = get_search_query();

$s_array = explode( \' \', $s ); // search query array

$args = array(
    \'post_type\'  = > \'product\',
    \'meta_query\' = > array(
        \'relation\' => \'OR\',
        array(
            \'key\'     => \'vbs_author\',
            \'value\'   => $s_array, 
            \'compare\' => \'IN\', // note the change
        ),
        array(
            \'key\'     => \'vbs_publisher\',
            \'value\'   => $s_array,
            \'compare\' => \'IN\', // note the change
        ),
    )
);
也许在此之后您需要删除重复项。

结束

相关推荐

必需:在文件search.php中找到Get_BloInfo(‘模板_url’)。改用GET_TEMPLATE_DIRECTORY_URI

主题检查错误→REQUIRED: get_bloginfo(\'template_url\') was found in the file search.php. Use get_template_directory_uri() instead. Line 21: <img src=\'<?php echo get_bloginfo(\'template_url\') ?>/img/no_results_found.png\'/> 我采取了行动并进行了更改,但该图