Php WordPress同时运行两个查询
这是一个事件网站,处理每个事件相对于用户位置的位置,并在搜索结果中显示距离 我使用扩展来允许我根据距离进行查询。但是,它不能很好地处理Php WordPress同时运行两个查询,php,mysql,wordpress,geolocation,Php,Mysql,Wordpress,Geolocation,这是一个事件网站,处理每个事件相对于用户位置的位置,并在搜索结果中显示距离 我使用扩展来允许我根据距离进行查询。但是,它不能很好地处理tax\u query之类的事情。因此,我想知道是否有一种方法可以运行WP\u GeoQuery来查询一定距离内的事件,然后通过正常的WP\u query来运行结果,以过滤正确的分类法和其他参数 以下是地理查询: $url = "http://freegeoip.net/json/". $_SERVER['REMOTE_ADDR'] .''; $geo = jso
tax\u query
之类的事情。因此,我想知道是否有一种方法可以运行WP\u GeoQuery
来查询一定距离内的事件,然后通过正常的WP\u query
来运行结果,以过滤正确的分类法和其他参数
以下是地理查询:
$url = "http://freegeoip.net/json/". $_SERVER['REMOTE_ADDR'] .'';
$geo = json_decode(file_get_contents($url), true);
$geo_query = new WP_GeoQuery(array(
// location stuff
'latitude' => $geo[latitude], // User's Latitude (optional)
'longitude' => $geo[longitude], // User's Longitude (optional)
// radius breaks the query if using tax_query too
'radius' => 25 // Radius to select for in miles (optional)
));
下面是正常的WP_查询:
// add query for title
function title_filter( $where, &$wp_query ) {
global $wpdb;
if ( $search_term = $wp_query->get( 'title_like' ) ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( like_escape( $search_term ) ) . '%\'';
}
return $where;
}
add_filter( 'posts_where', 'title_filter', 10, 2 );
// dates to and from
function date_from( $from ) {
$from = str_replace("meta_key = 'date_%_start-date'", "meta_key LIKE 'date_%_start-date'", $from);
return $from;
}
add_filter('posts_where', 'date_from');
function date_to( $to ) {
$to = str_replace("mt1.meta_key = 'date_%_end-date'", "mt1.meta_key LIKE 'date_%_end-date'", $to);
return $to;
}
add_filter('posts_where', 'date_to');
// convert date to yyyymmdd
$date1 = str_replace('/', '-', $_POST['when']);
$when = date("Ymd", strtotime($date1));
$date2 = str_replace('/', '-', $_POST['when-2']);
$when2 = date("Ymd", strtotime($date2));
?>
<h1>Search</h1>
<div class="events">
<?php $args = array(
// general
'post_type' => 'event',
'post_status' => 'publish',
'posts_per_page' => 2,
'paged' => $paged,
// what input
'title_like' => $_POST['what'],
// category filter
'tax_query' => array(
array(
'taxonomy' => 'main-cat',
'field' => 'slug',
'terms' => $_POST['main-cat']
)
),
// date filter
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'date_%_start-date',
'value' => $when,
'compare' => '>=',
'type' => 'DATE'
),
array (
'key' => 'date_%_end-date',
'value' => $when2,
'compare' => '<=',
'type' => 'DATE'
)
),
);
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query( $args );
$wp_query->query('posts_per_page=2&post_type=event'.'&paged='.$paged);
//添加标题查询
函数标题\u过滤器($where,&$wp\u查询){
全球$wpdb;
如果($search\u term=$wp\u query->get('title\u like')){
$where.='和'$wpdb->posts.'.post_title像\''%'.esc_sql(像\'escape($search\u term)).%\';
}
返回$where;
}
添加过滤器('posts\u where','title\u filter',10,2);
//往返日期
功能日期\从($from){
$from=str_replace(“meta_key='date_%\u start-date'”,“meta_key类似'date_%\u start-date'”,$from);
返回$from;
}
添加_过滤器('posts_where','date_from');
功能日期_至($to){
$to=str_replace(“mt1.meta_key='date\uu%\u end-date'”,“mt1.meta_key类似'date\uu%\u end-date'”,$to);
将$100退还给;
}
添加_过滤器('posts_where','date_to');
//将日期转换为yyyymmdd
$date1=str_replace('/','-',$_POST['when']);
$when=日期(“Ymd”,标准时间($date1));
$date2=str_replace(“/”、“-”、$_POST['when-2']);
$when2=日期(“Ymd”,标准时间($date2));
?>
搜索
您是否尝试在循环之后重置查询,wp_reset_query()?我的意思是,我希望运行这两个查询并返回一组结果,而不是在一个页面上返回两组结果。如果您希望作为一个结果用户元查询,可以通过这个函数get_post_meta(post_id,meta_key,true)在循环中获取post meta。如果你想从lat_lng_post中获取信息,我想你应该使用wpdb的自定义查询,你能给我提供该表的结构它是如何与wp_posts表连接的吗?好的,试试这个数组('post_per_page'=>2,'paged'=>paged,'post_type'=>event','meta query=>array('relations'=>'和')('key'=>'lat'、'value'=>'44.444'、'compare'=>'=')、数组('key'=>'long'、'value'=>'50.456'、'compare'=>'=>'='));$query=new Wp_query($args)没问题,希望我能帮到你:)