delete_option() не успевает удалить запись с БД до загрузки страницы
Нужно удалить опции с БД до загрузки страницы. Представленный код снизу не успевает сделать это.
ФРОНТ
$( '#escape' ).click( function() {
$.post( ajaxurl, { action: 'exit_pref' }, function( ready ) {
if ( ready ) location.href = url
} )
} );
БЕК
add_action( 'wp_ajax_exit_pref', 'exit_pref' );
function exit_pref() {
delete_option( 'data_pref' );
}
ФРОНТ (успевает загрузить data)
<?php $select = wp_unslash( get_option( 'data_pref' ) ); ?>
Ответы (2 шт):
Если вам необходимо выполнить какой-то код до загрузки страницы, то логично использовать хук, который срабатывает до загрузки страницы.
Например, довольно универсально будет использовать хук wp, который срабатывает сразу после определения глобальной переменной $wp
Кроме того, стоит избегать именования функций зарезервированными словами, в данном случае это exit, в php эта функция уже определена и попытки создания своей с таким же именем будут приводить к ошибкам
В итоге имеем что-то вроде:
<?php
add_action( 'wp', 'myprefix_exit' );
function myprefix_exit() {
delete_option( 'data' );
}
?>
Если Вам нужно чтобы данные были удалены после нажатия на кнопку, то логично было бы дождаться ответа от сервера, были ли удалены данные.
add_action( 'wp_ajax_exit_pref', 'exit_pref' );
function exit_pref() {
if( delete_option('data') ) {
wp_send_json_success('Deleted');
}
wp_die();
}
Внутри вашего аякс запроса добавьте так же проверку для data.success.
$( '#escape' ).click( function() {
jQuery.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'exit_pref'
},
success: function (data) {
if(data.success) {
location.href = url
} else {
alert('Error');
}
}
});
});
В целом, запрос немного странноват, так как по-сути вы никаких данных на сервер не передаете.
И вообще почитайте про Ajax в WordPress. Есть ряд вещей про которые я не стал писать, но неплохо бы чтобы они были, я говорю о nonce, к примеру. Не стоит принебрегать безопасностью.