Как сохранить переменные сессии после вызова ajax? - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно ввести информацию на странице оформления заказа в woocommerce, чтобы изменить ее имя при каждом обновлении страницы.Это имя меняется на какую-то случайную строку чисел.Это выглядит так:

session_start();
$code = rand(10000,99999);
$_SESSION["field_name"] = $code;

Но когда я вызываю функцию AJAX для обработки этой формы, она не может проверить ввод, он говорит, что он не заполнен.Но это.Это происходит потому, что переменная имени входа изменилась при вызове ajax.

Что я сделал на странице: прямо под входом я печатаю его имя.Он меняется при каждом обновлении страницы.Я поместил ту же переменную в сообщении об ошибке.Так что я могу сказать, если они совпадают.Спойлер: это не так.И когда я нажимаю на кнопку отправки - ошибка показывает ту же переменную (имя входа), но она имеет другие цифры.

Вот страница оформления заказа, над которой я работаю: https://elmersklei.ru/checkout/

Для вашего удобства я по умолчанию кладу один товар в корзину.

Последний ввод - это тот, о котором я говорю.

Вот хук functions.php, который яused:

add_filter( 'woocommerce_checkout_get_value' , 'clear_checkout_fields' );
/**
* Add the field to the checkout
*/
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

session_start();
$code = rand(10000,99999);
$_SESSION["field_name"] = $code;

function my_custom_checkout_field( $checkout ) {

session_start();




echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';

woocommerce_form_field( $_SESSION["field_name"], array(
    'type'          => 'text',
    'class'         => array('my-field-class form-row-wide'),
    'label'         => __('Fill in this field'),
    'placeholder'   => __('Enter something'),
    ), $checkout->get_value( 'my_field_name' ));

echo '</div>';

 print $_SESSION["field_name"];

}

/**
* Process the checkout
*/
add_action('woocommerce_checkout_process',             
'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {

session_start();



// Check if set, if its not set add an error.
if ( ! $_POST[$_SESSION["field_name"]] )
    wc_add_notice( __( $_SESSION["field_name"] ), 'error' );
}

Мне нужно это сделать, потому что меня атакует спам-бот.Я слышал, что это помогает предотвратить ложные заказы ботом.Заранее спасибо!

...