Title: WP Geo search
Author: jhackett1
Published: <strong>December 13, 2020</strong>
Last modified: September 6, 2021

---

Search plugins

![](https://ps.w.org/wp-geo-search/assets/banner-772x250.jpg?rev=2438555)

This plugin **hasn’t been tested with the latest 3 major releases of WordPress**.
It may no longer be maintained or supported and may have compatibility issues when
used with more recent versions of WordPress.

![](https://ps.w.org/wp-geo-search/assets/icon-256x256.png?rev=2438555)

# WP Geo search

 By [jhackett1](https://profiles.wordpress.org/jhackett1/)

[Download](https://downloads.wordpress.org/plugin/wp-geo-search.zip)

 * [Details](https://wordpress.org/plugins/wp-geo-search/#description)
 * [Reviews](https://wordpress.org/plugins/wp-geo-search/#reviews)
 * [Development](https://wordpress.org/plugins/wp-geo-search/#developers)

 [Support](https://wordpress.org/support/plugin/wp-geo-search/)

## Description

A plugin to add location-aware geographical search to [WP_Query](https://developer.wordpress.org/reference/classes/wp_query/).

You can use it to power location-aware apps, such as showing a user results near
them.

### 🔎 Using it in a query

Adding a `geo_query` parameter to WP_Query will add a “distance” column to the returned
results, provided they have the right metadata.

You can then display this in your templates.

You can use a location search parameter, which will be [geocoded](https://wordpress.org/plugins/wp-geo-search/?output_format=md#geocoding)
or directly provide latitude and longitude values:

    ```
    $query = new WP_Query(array(
        "geo_query" => array(
                "location" => "London"
        )
    ))

    $query = new WP_Query(array(
        "geo_query" => array(
                "latitude" => -52.005,
                "longitude" => 0.005,
        )
    ))
    ```

Optionally, you can then filter by search radius.

By default, distances are given in miles. You can provide `"units" => "km"` if you
need kilometres.

    ```
    $query = new WP_Query(array(
        "geo_query" => array(
                "latitude" => -52.005,
                "longitude" => 0.005,
                "radius" => 10
        )
    ))
    ```

Or order by nearness:

    ```
    $query = new WP_Query(array(
        "geo_query" => array(
                "latitude" => -52.005,
                "longitude" => 0.005
        ),
        "orderby" => "geo"
    ))
    ```

### Displaying distance in templates

In a `WP_Query` loop that includes a `geo_query`, you can use two extra functions
to show distance away:

 * `jhgs_get_the_distance(object $post)` – which returns a rounded integer for the
   distance away, similar to `get_the_title()`
 * `jhgs_the_distance(string $less_than_one, string $one, string $more_than_one)`–
   which displays an approximate human-readable string, similar to `the_title()`
 * jhgs_the_distance will show one of three messages depending on whether the rounded
   distance is less than one, one, or greater than one. By default these are:
 * “Less than a mile away”
 * “About a mile away”
 * “About %s miles away”

If you need to use different units or translations, can pass three [printf-formatted](https://www.php.net/manual/en/function.printf.php)
strings to `jhgs_the_distance()` to override these messages. Put `%s` where you 
want the value.

If you need the _exact_, unrounded value, you can use `$post->distance`.

### Geocoding

[Nominatim](https://nominatim.org/)‘s service is used for geocoding location searches.

Using it is subject to an [acceptable use policy](https://operations.osmfoundation.org/policies/nominatim/)–
if you use case will involve lots of API calls, you should replace it with a paid
alternative, like [Google](https://developers.google.com/maps/documentation/geocoding/overview)‘
s.

### 📍 Populating latitude and longitude data

It looks for two [custom field](https://wordpress.org/support/article/custom-fields/)
values with the keys `latitude` and `longitude` on your posts.

It’s agnostic about how you supply this data. The simplest thing to do is type it
in using WordPress’s built-in custom field editor.

You could also hook into the `save_post` action to populate meta whenever you create
or change a post, by adding a snippet like this to your theme’s `functions.php`:

    ```
    function example_update_latlngs($post){
        $location = get_field("location", $post);
        if(isset($location)){
            update_post_meta($post, "longitude", $location["lng"]);
            update_post_meta($post, "latitude", $location["lat"]);
        }
    }

    add_action("save_post", "example_update_latlngs", 10, 3);
    ```

This example assumes you are using an [ACF Google Map](https://www.advancedcustomfields.com/resources/google-map/)
field called “location”, but the data could come from anywhere, including a custom
meta box you code yourself, so long as the post meta keys are right.

### Bulk-updating existing posts

If you have many posts that you need to add longitude and latitude meta to in bulk,
you could add something like this to `functions.php`, which will run on [theme activation](https://developer.wordpress.org/reference/hooks/after_switch_theme/):

    ```
    function example_update_all_latlngs(){
        $query = new WP_Query(array(
            "posts_per_page" => -1
        ));
        foreach($query->get_posts() as $post){
            // Function from above
            example_update_latlngs($post);
        }
    }

    add_action('after_switch_theme', 'example_update_all_latlngs');
    ```

## FAQ

### I’ve activated it, but I can’t see any changes to my website

This plugin adds extra functionality to `WP_Query` – it’s up to you to make use 
of that functionality in your theme.

## Reviews

![](https://secure.gravatar.com/avatar/5a03b25b8dfba3cb9534acc51827a2d2424ce46deaac7f3187bca66b5ddcf7b2?
s=60&d=retro&r=g)

### 󠀁[Awesome function!](https://wordpress.org/support/topic/awesome-function/)󠁿

 [rogiervanroon](https://profiles.wordpress.org/rogiervanroon/) June 3, 2022

This is truly an awesome function for WP developers! Simple and effective.

![](https://secure.gravatar.com/avatar/b0c408e23888876dc9c310a5fa562bd0810f4949bd11c37ea999604dc660849f?
s=60&d=retro&r=g)

### 󠀁[Amazing perfection.](https://wordpress.org/support/topic/amazing-perfection-2/)󠁿

 [kamihicouki](https://profiles.wordpress.org/kamihicouki/) April 6, 2021

The definitive neighborhood search plugin that easily extends WP_Query for everyone
to understand, and is fully functional. I am so happy to have found this plugin.

 [ Read all 2 reviews ](https://wordpress.org/support/plugin/wp-geo-search/reviews/)

## Contributors & Developers

“WP Geo search” is open source software. The following people have contributed to
this plugin.

Contributors

 *   [ jhackett1 ](https://profiles.wordpress.org/jhackett1/)

[Translate “WP Geo search” into your language.](https://translate.wordpress.org/projects/wp-plugins/wp-geo-search)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/wp-geo-search/), check
out the [SVN repository](https://plugins.svn.wordpress.org/wp-geo-search/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/wp-geo-search/) 
by [RSS](https://plugins.trac.wordpress.org/log/wp-geo-search/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.1

 * First release

## Meta

 *  Version **0.1**
 *  Last updated **5 years ago**
 *  Active installations **70+**
 *  WordPress version ** 4.0 or higher **
 *  Tested up to **5.8.0**
 *  PHP version ** 7.0 or higher **
 * Tags
 * [distance](https://wordpress.org/plugins/tags/distance/)[geo](https://wordpress.org/plugins/tags/geo/)
   [location](https://wordpress.org/plugins/tags/location/)[nominatim](https://wordpress.org/plugins/tags/nominatim/)
 *  [Advanced View](https://wordpress.org/plugins/wp-geo-search/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  2 5-star reviews     ](https://wordpress.org/support/plugin/wp-geo-search/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/wp-geo-search/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/wp-geo-search/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/wp-geo-search/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/wp-geo-search/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/wp-geo-search/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/wp-geo-search/reviews/)

## Contributors

 *   [ jhackett1 ](https://profiles.wordpress.org/jhackett1/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/wp-geo-search/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://github.com/jhackett1/wp-geo-search)