我有一个自定义搜索查询,我把它放在一个插件中。主页有一个自定义的搜索表单,当用户搜索某个内容时,它会转到搜索页面并显示结果。
我的问题是,自定义查询会在网站的每个页面上运行,甚至在管理面板中。它不断抛出错误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;
}
每个页面上运行的搜索查询都使我的网站速度太慢。如有任何帮助,将不胜感激。
最合适的回答,由SO网友:bynicolas 整理而成
您缺少了花括号{}
围绕您的查询语句,以便无论if
陈述
因此,请尝试修改您的代码
if( is_search() ) {
$fields = \'...\';
return $fields
}
与您的
$join
变量
使用时请记住if
对于单个语句,不带括号是可以接受的,最好始终使用花括号。即使这只是为了让代码更一致,更易于其他程序员阅读(甚至是6个月后的你)。
您将节省大量时间来调试实际上不是错误的错误。有点像你刚刚在这里遇到的问题:)