Php 自定义WP_查询未按预期工作
我尝试使用自定义WP_查询,但结果不正确 我想做的是创建一个自定义表单,使用radius搜索过滤注册到“WP Job Manager”的作业 这是我的疑问:Php 自定义WP_查询未按预期工作,php,wordpress,Php,Wordpress,我尝试使用自定义WP_查询,但结果不正确 我想做的是创建一个自定义表单,使用radius搜索过滤注册到“WP Job Manager”的作业 这是我的疑问: $args = array( 'post_type' => 'job_listing', 'post_status' => array( 'publish' ), 'meta_query' => array( 'relation' => 'AND', array
$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 );
你能发现什么问题吗
任何帮助都将不胜感激。谢谢大家! 这可能是比较之间的功能有问题。我建议您查看正在生成的确切查询,以及比较是否实际是比较浮点,而不是字符串(这可能会产生意外的结果) 请看一下对上一个非常类似的查询所做的故障排除 问题引述如下: 由于postmeta值存储为字符串,我想我应该转换为十进制,但由于缺少十进制参数/精度参数,它似乎只是从字符串中删除了十进制值 和评论的答案: 您可以过滤生成的SQL并添加所需的精度参数 通过向查询中添加以下内容,为
get_posts()
启用筛选器:
'suppress_filters' => false,
以及:
不过,请注意OP对这一建议的评论:
尝试了这两种解决方案,看起来它将它们作为带单引号的字符串进行比较(wp 3.1.1),对此有何想法?不过,尝试原始sql确实奏效
请用进一步的调查结果更新您的问题,以便我们能够帮助您。更改$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 );
你有什么错误?这肯定有助于排除故障。我同意@nyedikeke所说的,并提供了$maxLong、$minLong的var_转储。这可能是一个变量类型的问题。此外,文档还规定比较“BETWEEN”和类型“NUMERIC”应使用所有大写字母,尽管我真的不知道这是否重要。:)谢谢你抽出时间。我没有得到任何错误,它没有显示任何结果,尽管我检查了数据库,它应该给出5个结果@GregBurkett我试过了,但也没用$maxLong、$minLong等都是51.509865和-0.118092的坐标,谢谢你的时间,这没用,但你是对的!我需要改变这些值,它们的顺序不对!谢谢你谢谢你的回答!很抱歉,我在搜索此类问题时没有看到该问题!无论如何,启用过滤器并插入过滤器以转换十进制精度解决了我的问题!非常感谢你,朋友@PedroPinto没问题,很乐意帮忙!感谢您接受此答案:)。
$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 );