我制作了一个自定义表单以显示在Wordpress Woocommerce结帐页面中,用户必须在购买前选择他们的年龄。
这个想法是为了让 18 岁以下的人无法购买。
目前,代码显示表单并且已全部设置好,但由于某种原因,我需要将年龄插入限制在 18 到 99 之间的"最小"和"最大"功能不适用。我需要什么才能应用"最小"和"最大"功能?
add_action('woocommerce_after_order_notes', 'custom_checkout_field');
function custom_checkout_field($checkout)
{
echo '<div id="custom_checkout_field"><h3>' . __('Vanusepiirang') . '</h3>';
woocommerce_form_field('custom_field_name', array(
'type' => 'number',
'id' => 'vanusepiirang',
'name' => 'vanusepiirang',
'min' => 18,
'max' => 99,
'required' => 1,
'class' => array(
'my-field-class form-row-wide'
),
'label' => __('Sisestage enda vanus. Teie sünnipäeva küsime kinnituseks, et olete piisavalt vana ostukorvis olevate toodete ostmiseks.') ,
'placeholder' => __('Teie vanus') ,
),
$checkout->get_value('custom_field_name'));
echo '</div>';
}
我希望"最小"和"最大"功能应用于表单,因此数字 1-17 无法通过。
根据woocommerce_form_field函数定义,max
和 min
属性必须作为custom_attribute传递。您的最终代码必须修改如下:
add_action('woocommerce_after_order_notes', 'custom_checkout_field');
function custom_checkout_field($checkout)
{
echo '<div id="custom_checkout_field"><h3>' . __('Vanusepiirang') . '</h3>';
woocommerce_form_field('custom_field_name', array(
'type' => 'number',
'id' => 'vanusepiirang',
'name' => 'vanusepiirang',
'custom_attributes' => array(
'min' => 18,
'max' => 99,
),
'required' => 1,
'class' => array(
'my-field-class form-row-wide'
),
'label' => __('Sisestage enda vanus. Teie sünnipäeva küsime kinnituseks, et olete piisavalt vana ostukorvis olevate toodete ostmiseks.') ,
'placeholder' => __('Teie vanus') ,
),
$checkout->get_value('custom_field_name'));
echo '</div>';
}
此外,您还应该考虑到,woocommerce_form_field
函数的第一个参数是字段名称和 ID,除非您在第二个参数中单独传递 ID 参数。这意味着,由于键值生成的输入 html 'name' => 'vanusepiirang'
将包含两个不同的 name 属性。我建议从源代码中删除'name' => 'vanusepiirang'
部分。
帮助自己解决一种不同的解决方案:)
将其添加到我的"空字段检查功能"中:
else if ($_POST['custom_field_name'] < ('18'))
wc_add_notice(__('Te pole piisavalt vana nende toodete ostmiseks!') , 'error');
else if ($_POST['custom_field_name'] > ('99'))
wc_add_notice(__('Palun sisesta korrektne vanus!') , 'error');