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
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.
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”
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.