我需要在结帐页面上为动态创建的字段创建验证。
class Myclass ()
{
private $_active_fields;
public function generate_fields () {
/**
/* Some previous logic to create an $items array based on products in the cart.
*/
$items = array(
"question-7" => array(
"option 1-1",
"option 1-2",
),
"question-4" => array(
"option 2-1",
"option 2-2",
),
);
foreach( $items as $key => $val ) {
woocommerce_form_field('box_field-'.$key, array(
'type' => 'radio',
'options' => $val,
....
),
$checkout->get_value( 'box_field-'.$key ));
$this->_active_fields[] = 'box_field-'.$key;
}
var_dump($this->_active_fields) // lists correctly all added items
}
public function add_fields () {
add_action( 'woocommerce_after_order_notes', array( $this, 'generate_fields' ) );
}
public function generate_validation () {
$fields = $this->_active_fields;
var_dump($fields); // Empty array
foreach ( $fields as $key => $val ) {
if ( ! $_POST[$val] {
wc_add_notice( 'Please fill field'.$val, 'error' );
}
}
}
public function add_validation() {
add_action( 'woocommerce_checkout_process', array( $this, 'generate_validation' ) );
}
}
所以我运行以下代码
$form = new Myclass();
$form->add_fields();
$form->add_validation();
当我尝试访问方法中的$_active_fields
属性时generate_valiadation()
,它是空的。但是,如果我var_dump($this->_active_fields)
在方法结束时调用generate_fields()
,它会正确列出所有生成的字段键。
所以我想我做错了什么。关于如何设置$_active_fields
内部generate_fields()
并获取其值的任何想法generate_valiadation()
?