#mysql #ajax #wordpress
#mysql #ajax #wordpress
Вопрос:
Я пытаюсь запросить базу данных WP, но получаю ошибку Call to a member function get_results() on null
. Я считаю, что мне нужно как-то зарегистрировать wpdb, но, несмотря на чтение нескольких похожих вопросов, я не могу собрать воедино то, что нужно сделать. Любая помощь приветствуется, поскольку я новичок и изучаю WordPress и Ajax.
Вызывается мой JS-файл zip-search-popup.js
(function($) {
$(document).ready(function() {
$('.zip-bar-button').click(function(event) {
event.preventDefault();
submittedZip = $("#zipcode-bar-input").val();
$.ajax({
//need an automatic URL so that this doesn't need to be updated
url: from_php.ajax_url,
type: "GET",
data: {
action : 'zip_search',
submittedZip : submittedZip,
},
success: function (response) {
console.log(response);
alert("working");
}
})
$('.zip-search-popup-con').fadeToggle(350);
})
$('.zip-search-dismiss').click(function() {
$('.zip-search-popup-con').toggle();
})
})
})(jQuery);
Я зарегистрировал свои скрипты в functions.php
, и здесь также есть моя функция SQL-запроса.
add_action('wp_enqueue_scripts', 'hyix_enqueue_custom_js');
function hyix_enqueue_custom_js() {
//enqueue zip-search-popup.js
wp_enqueue_script('zip-search-popup', get_stylesheet_directory_uri().'/js/zip-search-popup.js', array('jquery'), false, true);
wp_localize_script('zip-search-popup', 'from_php', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
//hook zip-search-popup function into ajax
add_action( 'wp_ajax_zip_search', 'ajax_zip_search' );
//same hook for users not logged in
add_action( 'wp_ajax_nopriv_zip_search', 'ajax_zip_search' );
//query for pulling in shipping data
function ajax_zip_search() {
$submitted_zip = $_REQUEST['submittedZip'];
global $wpdb;
// The SQL query
$response = $wpdb-> get_results("SELECT {$wpdb->prefix}woocommerce_shipping_zones.zone_name ".
"FROM {$wpdb->prefix}woocommerce_shipping_zone_locations ".
"INNER JOIN {$wpdb->prefix}woocommerce_shipping_zones ".
"ON {$wpdb->prefix}woocommerce_shipping_zone_locations.zone_id = {$wpdb->prefix}woocommerce_shipping_zones.zone_id ".
"WHERE location_code = '$submittedZip' ");
$response = array(
'request' => $_REQUEST,
'zip' => $submitted_zip,
'test' => 'is ok',
);
wp_send_json( $response );
// echo $response;
die();
}
Комментарии:
1. как
zip-search.php
загружается?2. @mikerojas в настоящее время этого нет. Он работал нормально, когда я вызывал его непосредственно из отправки формы, а не через Ajax. Как это должно быть загружено?
Ответ №1:
Вы должны использовать WordPress-способ использования AJAX
Все Ajax-запросы будут получены с помощью wp-admin/admin-ajax.php
, которая запускает Ajax-хуки, которые запускают ваш PHP-код. Ajax-перехват зависит от action
-параметра в вашем Ajax-запросе.
С помощью wp_localize_script() вы можете предоставить некоторые данные из PHP в Javascript, то есть ajax_url.
Поместите этот код в свой functions.php
. Сюда входит код, который обрабатывает ваш Ajax-запрос.
add_action('wp_enqueue_scripts', 'hyix_enqueue_custom_js');
function hyix_enqueue_custom_js() {
//enqueue zip-search-popup.js
wp_enqueue_script('zip-search-popup', get_stylesheet_directory_uri().'/js/zip-search-popup.js', array('jquery'), false, true);
wp_localize_script('zip-search-popup', 'from_php', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_ajax_zip_search', 'ajax_zip_search' );
add_action( 'wp_ajax_nopriv_zip_search', 'ajax_zip_search' );
function ajax_zip_search() {
$submitted_zip = $_REQUEST['submittedZip'];
// do some zip search
$response = array(
'request' => $_REQUEST,
'zip' => $submitted_zip,
'test' => 'is ok',
'foo' => 'bar'
);
wp_send_json( $response );
}
Теперь вы можете использовать ajax_url, предоставляемый wp_localize_script(). Не забудьте отправить action
-параметр:
$.ajax({
url: from_php.ajax_url,
type: "GET",
data: {
action: 'zip_search',
submittedZip: submittedZip
},
success: function (response) {
console.log(response);
alert('it works');
}
});
Комментарии:
1. Спасибо за ваш ответ. Мне все еще трудно заставить ее работать. Теперь я получаю ошибку 400. Я обновил свой первоначальный вопрос, чтобы отразить изменения. Сейчас я запускаю только два файла
zip-search-popup.js
иfunctions.php
. Я обеспокоен тем, что это проблема между дефисом и подчеркиванием, и перепробовал много разных настроек, но ничего не прошло.