我需要输入woocommerce结帐页面,以在每次刷新页面时更改其名称。它的名称更改为一些随机的数字字符串。 它是这样的:
session_start();
$code = rand(10000,99999);
$_SESSION["field_name"] = $code;
但是当我调用AJAX函数来处理此表单时,它无法验证输入,它表示未填写。但它是。发生这种情况是因为在ajax调用中输入名称的变量已更改。
我在页面上所做的操作:在输入下方,我打印出它的名称。每次刷新页面时都会更改。 我在错误消息中放入了相同的变量。因此,我可以判断它们是否匹配。剧透:不是。 而且,当我单击“提交”按钮时-错误显示了相同的变量(输入的名称),但是还有另一个数字。
这是我正在处理的结帐页面: https://elmersklei.ru/checkout/
为方便起见,我默认将一种产品放入购物车。
最后输入是我正在谈论的输入。
这是我使用的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' );
}
我需要这样做,因为我正受到垃圾邮件机器人的攻击。我听说这有助于防止机器人发出虚假订单。预先谢谢你!