Задача: сделать так, чтобы определенный input менял атрибуты name и id на рандомные после каждого захода на сайт. Вот, собственно переменная:
session_start();
$code = rand(10000,99999);
$_SESSION["field_name"] = $code;
Но есть одно но! Когда я нажимаю кнопку submit, сессия сбрасывается и соответственно переменная меняется. Форма выдает ошибку о том что input не заполнен.
Для удобства на странице я сделал вот что: прямо под нужным мне input'ом я вывел его имя. Оно каждый раз меняется. Когда мы отправляем форму, в сообщение ошибки отправки (появляется вверху страницы) я тоже вывел ту же самую переменную. Она меняется после нажатия на submit.
Вот страница: https://elmersklei.ru/checkout/
для вашего удобства, я добавил дефолтный товар в корзину.
Самый последний input - это оно.
Вот код который я вставляю в functions.php:
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' );
}
Вы спросите зачем? Я - отвечу. Дело в том что сайт атакуют конкуренты. Происходит накрутка ПФ с помощью бота. Если Input будет каждый раз иметь разные имена это должно его остановить.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей