我尝试使用自定义WP_Query,但结果不对。
我想要做的是创建一个自定义表单来过滤使用" WP Job Manager"注册的作业。使用半径搜索。
这是我的疑问:
$args = array(
'post_type' => 'job_listing',
'post_status' => array( 'publish' ),
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'geolocation_long',
'value' => array($maxLong,$minLong),
'compare' => 'between',
'type' => 'numeric',
),
array(
'key' => 'geolocation_lat',
'value' => array($maxLat,$minLat),
'compare' => 'between',
'type' => 'numeric',
),
),
);
$the_query = new WP_Query( $args );
你能发现任何问题吗?
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
这可能是比较BETWEEN
功能的问题。我建议您查看生成的确切查询以及比较是否实际比较浮动,而不是字符串(这可能会产生意外结果)。
在wordpress.stackexchange.com上查看针对非常类似查询所做的故障排除。
以下是问题引用:
由于postmeta值存储为字符串,我认为我应该转换为DECIMAL,但由于缺少DECIMAL参数/精度参数,它似乎只是修剪了字符串中的十进制值。
并查看Rarst的回答:
您可以过滤生成的SQL并添加所需的精度参数。
通过在查询中添加以下内容,为get_posts()
启用过滤器:
'suppress_filters' => false,
和
add_filter('get_meta_sql','cast_decimal_precision');
function cast_decimal_precision( $array ) {
$array['where'] = str_replace('DECIMAL','DECIMAL(10,3)',$array['where']);
return $array;
}
请注意OP对此建议的评论:
尝试了两种解决方案,看起来它们将它们作为字符串与单引号(wp 3.1.1)进行比较,对此有什么想法?尝试原始的SQL确实工作。
请使用进一步的调查结果更新您的问题,以便我们为您提供帮助。
答案 1 :(得分:0)
更改$ minlong和$ maxlong
$args = array(
'post_type' => 'job_listing',
'post_status' => array( 'publish' ),
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'geolocation_long',
'value' => array($minLong,$maxLong),
'compare' => 'between',
'type' => 'numeric',
),
array(
'key' => 'geolocation_lat',
'value' => array($minLat,$maxLat),
'compare' => 'between',
'type' => 'numeric',
),
),
);
$the_query = new WP_Query( $args );