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 шт):

Автор решения: alenkins

Если вам необходимо выполнить какой-то код до загрузки страницы, то логично использовать хук, который срабатывает до загрузки страницы. Например, довольно универсально будет использовать хук wp, который срабатывает сразу после определения глобальной переменной $wp

Кроме того, стоит избегать именования функций зарезервированными словами, в данном случае это exit, в php эта функция уже определена и попытки создания своей с таким же именем будут приводить к ошибкам

В итоге имеем что-то вроде:

<?php
add_action( 'wp', 'myprefix_exit' );

function myprefix_exit() {
    delete_option( 'data' );
}
?>
→ Ссылка
Автор решения: Simon

Если Вам нужно чтобы данные были удалены после нажатия на кнопку, то логично было бы дождаться ответа от сервера, были ли удалены данные.

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, к примеру. Не стоит принебрегать безопасностью.

→ Ссылка