Поэтому я следовал очень простому руководству, чтобы понять, как работают вызовы AJAX в WordPress. Вот все соответствующие фрагменты кода:
На functions.php
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue() {
wp_enqueue_script( 'ajax-script', get_template_directory_uri() .'/js/my_query.js', array('jquery') );
// in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
wp_localize_script( 'ajax-script', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
}
На my_query.js
jQuery(document).ready(function($) {
console.info('myquery');
var data = {
'action': 'my_action',
'whatever': ajax_object.we_value // We pass php values differently!
};
// We can also pass the url value separately from ajaxurl for front end AJAX implementations
jQuery.post(ajax_object.ajax_url, data, function(response) {
alert('Got this from the server: ' + response);
});
});
и внизу admin-ajax.php
add_action( 'wp_ajax_my_action', 'my_action' );
function my_action() {
global $wpdb;
$whatever = intval( $_POST['whatever'] );
$whatever += 10;
echo $whatever;
wp_die();
}
Это охватывает все пункты руководства, но при загрузке страницы администратора я получаю ошибку 400, в то время как я должен получать предупреждение, верно?
Любые идеи будут по-настоящему оценены, я в своем уме.
Спасибо.
400 обычно связан с неправильным форматированием запроса. Дважды проверьте, что у вас есть все, что вам нужно. О чем следует подумать: токен CSRF, тип данных и т. д.
Если учебник рекомендует редактировать admin-ajax.php, я бы предложил попробовать другой. Как сказал Айорос, это неправильный способ регистрации обратных вызовов AJAX в WordPress.






Кажется, вы добавили свой собственный код в конце admin-ajax.php. Это нет правильный способ сделать это. В общем, вы никогда не должны редактировать основной/административный файл WordPress, потому что он будет перезаписан при обновлении WordPress (помимо других причин).
Даже игнорируя это, причина, по которой он не работает, заключается в том, что admin-ajax.php выполняется только при фактическом запросе, поэтому ваш обратный вызов будет зарегистрирован слишком поздно. Вы должны добавить свой add_action и относительный обратный вызов в functions.php вашей темы или в плагин, чтобы ваши действия были зарегистрированы в нужное время.
В документации не указано, куда делся my_action. Я по глупости предположил, что если вы указываете на файл, вам нужно что-то в этом файле, чтобы поймать его. теперь понял спасибо
Подождите, вы редактировали
admin-ajax.php? Вы не должны редактировать какие-либо основные/административные файлы WordPress, они будут перезаписаны, как только вы обновите WP. Обратный вызов вашего действия должен быть добавлен вfunctions.phpвашей темы или в плагин.