在每个页面上运行的自定义搜索查询

时间:2017-02-27 作者:input

我有一个自定义搜索查询,我把它放在一个插件中。主页有一个自定义的搜索表单,当用户搜索某个内容时,它会转到搜索页面并显示结果。

我的问题是,自定义查询会在网站的每个页面上运行,甚至在管理面板中。它不断抛出错误latitude and longitude not defined 在每一页上。

我用过is_search() 函数以确保该函数仅在搜索页面上运行,但不起作用。它仍在运行查询!

代码如下:

        /**
         * Custom Search on Homepage
         *
         * 
         */
        add_filter(\'posts_fields\', \'distance_query\'); 
        add_filter(\'posts_where\', \'lat_lng_define\');
        add_filter(\'posts_join\', \'lat_lng_join\');
        add_filter(\'posts_groupby\', \'having_distance\');
        add_filter(\'posts_orderby\', \'sort_distance\');

        /**
         * The Fields
         *
         * 
         */
        function distance_query( $fields ) {
            global $wpdb;

            //if(isset($_GET[\'latitude\'] )|| isset($_GET[\'longitude\'] )) {
                $lat = sanitize_text_field( $_GET[\'latitude\'] );
                $lng = sanitize_text_field( $_GET[\'longitude\'] );
            //} else {
            //  return;
            //}


           if (is_search())

               $fields .= ", 
           SOME QUERY"

            return $fields;
          }

/**
 * The Join
 *
 * 
 */
  function lat_lng_join( $join) {
    global $wpdb;
if (is_search())
     $join = " QUERY";
    return $join;
  }


    //Likewise the rest of the query
如果我设置了$GET值,主页将显示404:

 if(isset($_GET[\'latitude\'] )|| isset($_GET[\'longitude\'] )) {
            $lat = sanitize_text_field( $_GET[\'latitude\'] );
            $lng = sanitize_text_field( $_GET[\'longitude\'] );
        } else {
          return;
        }
每个页面上运行的搜索查询都使我的网站速度太慢。如有任何帮助,将不胜感激。

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

您缺少了花括号{} 围绕您的查询语句,以便无论if 陈述

因此,请尝试修改您的代码

if( is_search() ) { 
  $fields = \'...\'; 
  return $fields 
} 
与您的$join 变量

使用时请记住if 对于单个语句,不带括号是可以接受的,最好始终使用花括号。即使这只是为了让代码更一致,更易于其他程序员阅读(甚至是6个月后的你)。

您将节省大量时间来调试实际上不是错误的错误。有点像你刚刚在这里遇到的问题:)

SO网友:Anwer AR

根据需要尝试添加更多条件检查。

if ( is_search() && ! is_admin && ! is_front_page() && ! is_page() ) {

   $fields .= "SOME QUERY";

  return $fields;
}

相关推荐

Media searching ignored

我们的网站使用WordPress,有很多媒体文件。我们网站的媒体名称格式如下[Car brand\'s name]-[number].jpg, 例如Tesla-1.jpg 或Aston Martin-3.jpg. 因此,我们可以通过搜索文章的名称轻松找到文章的特定媒体。但突然间,我们找不到媒体。我们正在尝试搜索名称为的媒体,但搜索结果不变。(不搜索任何内容时的媒体屏幕)(搜索Aston Martin时的媒体屏幕)当然,在填充搜索文本框后,它会显示一个加载图标,但结果总是一样的。为什么会发生这种情况?更新+