用自定义代码替换WordPress搜索

时间:2017-05-11 作者:Rod0n

我正在服务器中构建一个Solr实例,我想用它替换wordpress搜索。我测试了一些Solr Wordpress插件,但它们没有我需要的灵活性和简单性。

因此,我想做的是从用户那里获取搜索查询,然后向Solr服务器发出请求,Solr服务器将返回一个wp\\U帖子id列表。然后我将此列表传递给wp\\U query,并向用户显示项目。

代码可能如下所示:

        $url = \'http://{SOLR_IP}:{SOLR_PORT}/solr/{CORE_NAME}/select?indent=on&q={ DESIRED_QUERY }&wt=json\';
        $result = file_get_contents($url);
        $data = json_decode($result, true);

        $ids = array();
        foreach ($data[\'response\'][\'docs\'] as $item)
            array_push($ids, $item[\'id\']);


        $args = array(
           \'post__in\'      => $ids
        );
        $the_query = new WP_Query( $args );
问题是:我不知道该把这段代码放在哪里,以便以干净的方式替换原始的搜索查询。我一直在看这两个搜索。php和searchform。但是我真的不知道该怎么做。

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

对不起,我的英语不好。我认为您必须使用内置查询挂钩将您的帖子ID发送到主查询。它使用pre_get_posts 钩这将允许您在创建查询之后和执行之前更改查询。

add_action(\'pre_get_posts\', \'my_search_query\');
function my_search_query($query) {
    if($query->is_search() && $query->is_main_query() && get_query_var(\'s\', false)) {   
        // Get the "s" query arg from the initial search
        $desired_query = get_query_var(\'s\', false);

        // Your code
        $url = \'http://{SOLR_IP}:{SOLR_PORT}/solr/{CORE_NAME}/select?indent=on&q={ DESIRED_QUERY }&wt=json\';
        $result = file_get_contents($url);
        $data = json_decode($result, true);

        $ids = array();
        foreach ($data[\'response\'][\'docs\'] as $item)
        {
            array_push($ids, $item[\'id\']);          
        }

        // Update the main query
        $query->set(\'post__in\' => $ids);
    }
    return $query;
}
您将使用Solr系统中的新ID更新主查询。可能有更好的方法来获取搜索查询,如使用get_search_query 但我不确定该函数是否在pre_get_posts

结束

相关推荐

Search query with Ajax

我正在运行一个$wpdb 选择查询并从文本框中获取其参数。结果显示只要我按下搜索按钮,但我想用Ajax做同样的事情,而不刷新页面。我什么都试过了,但页面仍在刷新。jQuery代码:jQuery(document).ready(function() { jQuery(\"#Submityourskill\").click(function(){ jQuery.post(yes.ajaxurl,{action : \'doit\'},