WordPress meta_query search by area (lat, lng)

I have area (lat0, lat1, lng0, lng1). Why my wp_query not working?

        $new_query->query( array(
            'post_type' => 'object',
            'meta_query' => array(
        array(
            'relation' => 'AND',
        array(
            'key' => 'lat',
            'compare' => 'BETWEEN',
            'value' => array($lat0, $lat1),
            'type' => 'DECIMAL',
        ),
        array(
            'key' => 'lng',
            'compare' => 'BETWEEN',
            'value' => array($lng0, $lng1),
            'type' => 'DECIMAL',
        )
    ),
                        ),

                    )
                );

I get some result if I use:

Read More
        array(
            'key' => 'lat',
            'compare' => '<=',
            'value' => $lat0,
            'type' => 'DECIMAL',
        ),

But this code not working:

         array(
            'relation' => 'AND',
        array(
            'key' => 'lat',
            'compare' => '>=',
            'value' => $lat0,
            'type' => 'DECIMAL',
        ),
            array(
            'key' => 'lat',
            'compare' => '<=',
            'value' => $lat1,
            'type' => 'DECIMAL',
        )
    ),

Can I use wp_query for search by area. And if this wrong way, what I can do?

Related posts

1 comment

  1. Fixed

                        global $wpdb;
            $querystr = "
            SELECT *
            FROM $wpdb->posts
            INNER JOIN $wpdb->postmeta m1
              ON ( $wpdb->posts.ID = m1.post_id )
            INNER JOIN $wpdb->postmeta m2
              ON ( $wpdb->posts.ID = m2.post_id )
            INNER JOIN $wpdb->postmeta m3
              ON ( $wpdb->posts.ID = m3.post_id )
            WHERE
            $wpdb->posts.post_type = 'object'
            AND $wpdb->posts.post_status = 'publish'
            AND ( m1.meta_key = 'lat' AND m1.meta_value < $lat0 )
            AND ( m1.meta_key = 'lat' AND m1.meta_value > $lat1 )
            AND ( m2.meta_key = 'lng' AND m2.meta_value < $lng0 )
            AND ( m2.meta_key = 'lng' AND m2.meta_value > $lng1 )
            AND ( m3.meta_key = 'city' AND m3.meta_value = $city_string )
            GROUP BY $wpdb->posts.ID
            ORDER BY $wpdb->posts.post_date
            DESC;
            ";
             $pageposts = $wpdb->get_results($querystr, OBJECT);
    

Comments are closed.