WordPress

wp query — Lokalizacje w pobliżu przy użyciu zaawansowanych pól niestandardowych, map?

  • 22 grudnia, 2021
  • 5 min read
wp query — Lokalizacje w pobliżu przy użyciu zaawansowanych pól niestandardowych, map?


dobry wieczór, drogi RobbTe

dziękuję za wiadomość

szukam rozwiązania do wysyłania zapytań do pobliskich lokalizacji na podstawie podanej wartości lat i lng, używając pola map ACF. Jedyne, co obecnie mam, to wartość wyszukiwania lat i lng (której chcę użyć do wyszukiwania pobliskich lokalizacji) i wiem, że ACF przechowuje informacje o szerokości/długości dla każdej lokalizacji w tablicy, którą można uzyskać przez

<?php    
$google_map = get_field('adres');
$lat = $google_map['lat'];
$lng = $google_map['lng'];
?>

Jak mogę wysyłać zapytania do postów (lokalizacji) CPT i wyświetlać tylko lokalizacje, które są w pobliżu (w promieniu) o danej szerokości i długości?

niesamowite: cóż, obecnie pracuję nad bardzo, bardzo podobną rzeczą. Używam zapytania, które działa przeciwko punktowi Overpass-turbo-entpoint (patrz poniżej) – i myślę, że może to być również pomocne dla Ciebie. Zobacz moje podejście – jako przykład.

zaczynamy: mam zamiar stworzyć wtyczkę do wordpressa, która będzie oferować dane wyjściowe następujących danych… dane z Neaby-search:

czy możemy stworzyć zapytanie, które pokaże wszystkie szkoły znajdujące się w pobliżu – innymi słowy

przykład: o co mi chodzi. jak utworzyć prośbę o wyszukanie wszystkich szkół – w okolicy – powiedzmy Monachium – na przykład w promieniu 10 km!?

wynik pokazujący wszystkie szkoły wokół określonego punktu – innymi słowy; wszystko w Monachium – w obszarze /(promieniu) powiedzmy 10 kilometrów możemy stworzyć zapytanie działające na Overpass-turbo.eu

Warto przeczytać!  Narzędzie do zarządzania linkami i tworzenia stron

np tak: najpierw zobacz zamierzony osm – wyszukiwanie w pobliżu, które działa pod wiaduktem-Turbo.eu -API

[out:csv(::id,::type,::lon,::lat,amenity,name,"addr:postcode","addr:city","addr:street","addr:housenumber","contact:website",website,"contact:email")]
[timeout:600];

area[name="München"];
nwr(area)[name="Marienplatz"];
nwr["amenity"="school"](around:10000);
out center;

zwraca wyniki:

@id @type   @lon    @lat    amenity name    addr:postcode   addr:city   addr:street addr:housenumber    contact:website website contact:email
312793352   node    11.5815046  48.1322045  school  Schulverbund München    80469   München Kohlstraße  5           
703266518   node    11.5746643  48.1387135  school  EAM School of International Business                           
1096318121  node    11.5827303  48.1368214  school  Otto-Falckenberg-Schule 80539   München Stollbergstraße 7a       
1096318127  node    11.5822067  48.1376239  school  Otto-Falckenberg-Schule 80539   München Falckenbergstraße   2        
1142514805  node    11.5665710  48.1353750  school  Evangelisches Bildungszentrum   80331   München Herzog-Wilhelm-Straße   24        [email protected]
1576527684  node    11.5728245  48.1336093  school  Theresia-Gerhardinger-Grundschule am Anger                       
1576528339  node    11.5721671  48.1333479  school  Theresia-Gerhardinger-Gymnasium am Anger                           
2493656150  node    11.5814603  48.1366835  school  Förderschule an der Herrnstraße 80539   München Herrnstraße 21          
2654727020  node    11.5812823  48.1365482  school  Grundschule an der Herrnstraße 

cóż, myślę, że najpierw powinienem zadbać o utworzenie struktury wtyczki WordPress: Skonfiguruj podstawową strukturę wtyczki WordPress, w tym główny plik PHP i wszelkie dodatkowe pliki lub foldery, których możesz potrzebować.

Zarejestruj widget: następnie muszę zdefiniować pewien rodzaj niestandardowej klasy widżetów, która rozszerza klasę WP_Widget dostarczoną przez WordPress.

Warto przeczytać!  Owiń opis i podmenu w opakowaniu

Wprowadzić w życie the Logika widgetu: W niestandardowej klasie widżetów zaimplementuj logikę pobierania danych z interfejsu API Overpass i sformatuj je do wyświetlenia.

Wyświetlacz the Widżet: Zarejestruj funkcję wywołania zwrotnego, aby wyświetlić zawartość widżetu, w tym wszelkie znaczniki HTML niezbędne do wyświetlenia danych.

Oto podstawowy zarys podejścia do każdego kroku:

<?php
/*
Plugin Name: osm Nearby Schools Widget
Description: Widget to display nearby schools using Overpass API.
Version: 0.9
Author: osm-fan 
*/

// Step 2: well - first of all - we ought to register the Widget propperly
class Nearby_Schools_Widget extends WP_Widget {
    // Constructor
    public function __construct() {
        parent::__construct(
            'nearby_schools_widget', // Base ID
            'Nearby Schools Widget', // Name
            array( 'description' => 'Displays nearby schools using Overpass API' ) // Args
        );
    }

    // Step 4: we ought to display the Widget
    public function widget( $args, $instance ) {
        // Widget output
        echo $args['before_widget'];
        echo $args['before_title'] . 'Nearby Schools' . $args['after_title'];
        echo '<ul>';
        
        // Step 3: Implement the Widget Logic
        $schools = $this->get_nearby_schools();
        foreach ($schools as $school) {
            echo '<li>' . $school->name . '</li>';
        }
        
        echo '</ul>';
        echo $args['after_widget'];
    }

    // Step 3: here we  implement the Widget Logic
    private function get_nearby_schools() {
        $url="
        $data = array(
            'data' => '[out:json][timeout:25];(node["amenity"="school"](around:10000,48.1351,11.5820););out;',
        );

        $response = wp_remote_post( $url, array(
            'body' => $data,
        ) );

        if ( is_wp_error( $response ) ) {
            return array();
        }

        $body = wp_remote_retrieve_body( $response );
        $schools = json_decode( $body );

        return $schools->elements;
    }
}

// Step 2: Register the Widget
function register_nearby_schools_widget() {
    register_widget( 'Nearby_Schools_Widget' );
}
add_action( 'widgets_init', 'register_nearby_schools_widget' );

hmm – cóż – myślę, że to mógłby być pierwszy krok w tym kierunku: myślę, że ten kod konfiguruje wtyczkę WordPress, która tworzy widżet o nazwie „OSM-Nearby Schools Widget”

Warto przeczytać!  Jak korzystać z Headline Analyzer w WordPress, aby poprawić tytuły SEO

Cóż, widget pobiera pobliskie szkoły za pomocą interfejsu API Overpass w promieniu 10 km od współrzędnych Monachium (48,1351 szerokości geograficznej i 11,5820 długości geograficznej) i wyświetla je na nieuporządkowanej liście. Być może będziemy musieli dostosować współrzędne, a następnie uruchomić je względem zapytania Overpass API, aby spełnić jeszcze bardziej szczegółowe wymagania.

drogi RobbTe, być może to będzie pomocne również dla ciebie. Chcę się tym tylko z tobą podzielić. BTW: Czy masz jakieś dodatkowe pomysły – co dodać do wtyczki (logika)?

miłego dnia.


Źródło