Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义WP_查询未按预期工作_Php_Wordpress - Fatal编程技术网

Php 自定义WP_查询未按预期工作

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

我尝试使用自定义WP_查询,但结果不正确

我想做的是创建一个自定义表单,使用radius搜索过滤注册到“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 );
你能发现什么问题吗


任何帮助都将不胜感激。谢谢大家!

这可能是比较之间的功能有问题。我建议您查看正在生成的确切查询,以及比较是否实际是比较浮点,而不是字符串(这可能会产生意外的结果)

请看一下对上一个非常类似的查询所做的故障排除

问题引述如下:

由于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 );