Выдает ошибку сервера 500
Ajax:
jQuery(document).ready(function($) {
$(document).on('change', '#menu_order', function(event) {
var plugin_url = $(this).data('url'),
product_id = $(this).data('product-id'),
product_new_menu_order = $(this).val();
jQuery.post(
plugin_url,
{
'action': 'update_product',
'data': {
// 'action': 'update_product',
'product_id': product_id,
'product_new_menu_order': product_new_menu_order,
},
},
function(response){
alert('The server responded: ' + response);
}
);
});
});
И сам update:
$product_id = $_POST['product_id'];
$product_new_menu_order = $_POST['product_new_menu_order'];
function update_product() {
$product = array(
'ID' => $product_id ,
'menu_order' => $product_new_menu_order,
);
wp_update_post( $product );
wp_die();
}
add_action('wp_ajax_update_product', 'update_product');
add_action('wp_ajax_nopriv_update_product', 'update_product');
Вот, в файл апдейта заходит, принимает нужные данные, id поста, и новый порядок. Вот только хуки не отрабатывают, не позволяют обновить продукт, ошибка сервера 500.
Как исправить?
Перенесите инициализацию переменных $product_id и $product_new_menu_order в тело функции update_product(). Значения post-переменных передаются ajax-ом непосредственно в функцию update_product().
Переменной plugin_url в вашем ajax запросе должно быть присвоено значение http://url-вашего-сайта/wp-admin/admin-ajax.php, так как именно там находится обработчик AJAX.
Вместо wp_die() лучше использовать wp_send_json_success() и wp_send_json_error().
Исправьте сам ajax-запрос:
jQuery.post(
plugin_url,
{
action: 'update_product',
product_id: product_id,
product_new_menu_order: product_new_menu_order
},
function(response){
alert('The server responded: ' + response);
}
);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей