Intereting Posts
Получение array_merge (): Аргумент # 2 не является массивом в register_post_type Как создать подпись HMAC-SHA1 для использования с WP REST API и OAuth1 Как добавить класс в заголовок виджетов Отключить редактор WP для определенных шаблонов страниц WP_query перехватывает перед выполнением поискового запроса Facebook и WordPress Я использую пользовательские поля (для добавления почти 5 изображений и их названий)? Поле настроек не отображается на общей странице параметров add_rewrite_rule permalinks break в WordPress 4.5 Несколько областей динамического содержимого на странице Как показать отдельную страницу в качестве домашней страницы Как удалить стили аудиоплеера, добавленные mediaelement.js JavaScript? Как разрешить пользователю вводить текст, запускать код python и возвращать результат? Очистка изображений, удаление неиспользуемых размеров изображений, прикрепленных к типу сообщения Перемещение jQuery в нижний колонтитул без использования де-регистра в WordPress

AJAX в WordPress, отправка данных коордов в MySQL и отображение на карте

Я провел несколько месяцев, пытаясь понять, как получить геолокацию пользователей и передать их в MySQL, и поэтому после отображения с маркерами на карте. Я уже застрял в передаче данных через ajax на php. И есть поиск и исследования, а также запрос в stackoverflow. И, как кажется, мой код правильный.

Кажется, что AJAX имеет особый способ работы с WORDPRESS.

Здесь код, который существует в template-maps.php :

  var pos; var infoWindow = new google.maps.InfoWindow({map: map}); // Try HTML5 geolocation. if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { pos = { lat: position.coords.latitude, lng: position.coords.longitude }; infoWindow.setPosition(pos); infoWindow.setContent('You are here'); map.setCenter(pos); $.ajax({ type: 'POST', data: { action : 'my_action', pos : pos}, url: '/wp-admin/admin-ajax.php' }); }, function() { handleLocationError(true, infoWindow, map.getCenter()); }); } else { // Browser doesn't support Geolocation handleLocationError(false, infoWindow, map.getCenter()); }; 

Что мне нужно написать с помощью WordPress Codex, чтобы заставить AJAX работать?

Здесь изменения, которые я сделал до сих пор, создавая плагин для function my_function () добавления function my_function () :

 <?php add_action( 'wp_ajax_my_action', 'my_function' ); add_action( 'wp_ajax_nopriv_my_action', 'my_function' ); $translation_array = array( 'admin_uri' => admin_url('admin-ajax.php') , ); wp_localize_script( 'script-handle', 'object_name', $translation_array ); function my_function(){ $lat = isset($_POST['pos']['lat']) ? $_POST['pos']['lat'] : null; $lng = isset($_POST['pos']['lng']) ? $_POST['pos']['lng'] : null; var_dump($_POST['pos']); } ?> 

И вот Уведомление, которое я получаю от плагина:

Примечание: wp_localize_script был вызван неправильно. Сценарии и стили не должны регистрироваться или помещаться в очередь до тех пор, пока не появятся wp_enqueue_scripts, admin_enqueue_scripts или login_enqueue_scripts. Дополнительную информацию см. В разделе «Отладка в WordPress». (Это сообщение было добавлено в версии 3.3.0.) В /…/wp-includes/functions.php в строке 4146

и этот:

Примечание. Неопределенный индекс: pos в /…/wp-content/plugins/zaeplug-userslocation/zaeplug-userslocation.php в строке 26 NULL

Solutions Collecting From Web of "AJAX в WordPress, отправка данных коордов в MySQL и отображение на карте"

Вы не можете и не должны напрямую пинговать любой файл PHP внутри вашей темы или папки с плагинами. Это небезопасно и, что самое главное, почти никогда не будет работать, поскольку у вас нет доступа к ядру WordPress.

Вместо этого создайте обработчик Admin-Ajax и обработайте там свой код.

Чтобы создать один, все, что вам нужно сделать, это добавить эти строки в файл functions.php вашей темы:

 add_action( 'wp_ajax_my_action', 'my_function' ); add_action( 'wp_ajax_nopriv_my_action', 'my_function' ); function my_function(){ // Your php code here } 

Теперь измените ваш запрос ajax на ping файл admin-ajax.php :, и включите действие в свои данные:

 $.ajax({ type: 'POST', data: { action : 'my_action', pos : pos}, url: '/wp-admin/admin-ajax.php' }); 

Тем не менее, я предлагаю вам использовать wp_localize_script для передачи admin_url() вашей функции Ajax.

Допустим, вы внесли свой файл JS в очередь:

 add_action( 'wp_enqueue_scripts', 'my_localization_function'); function my_localization_function(){ // Enqueue your script wp_enqueue_script( 'script-handle', 'my-script-url' ); } 

Затем вы можете локализовать его. Добавьте это после того, как вы внесете в очередь свой скрипт:

 $translation_array = array( 'admin_uri' => admin_url('admin-ajax.php') , ); wp_localize_script( 'script-handle', 'object_name', $translation_array ); 

Теперь ваш вызов Ajax может быть следующим:

 $.ajax({ type: 'POST', data: { action : 'my_action', pos : pos}, url: object_name.admin_uri });