我正在为wordpress和woocommerce创建一个插件。在我的插件中,我使用'woocommerce_before_checkout_form'代码在结帐表单上方插入了一个输入框。完成订单后,我希望能够将该输入的值添加到订单的元数据中。为此,我在我的插件的functions.php文件中创建了这段代码:
add_action( 'woocommerce_checkout_update_order_meta', 'add_input_meta', 1, 2 );
function add_input_meta( $order_id, $posted ) {
$inputsData = $_POST['InputBox'];
update_post_meta( $order_id, 'my_key', $inputsData);
}
问题是,每次都返回NULL。我创建了下面的代码,看看$ _POST的值是什么,它带来了'array(0){}'
function debugthing( $content ) {
$content .=var_dump($_POST);
return $content;
die();
}
add_filter( 'the_content', 'debugthing' );
我已经筋疲力尽了所有关于造成这种情况的想法。有人可以帮忙吗?
$ _ POST,甚至php://输入返回一个空数组或绝对没有。
答案 0 :(得分:2)
woocommerce_before_checkout_form
不是添加输入字段的右钩子。因为这个钩子在表格之外。这解释了为什么您在$_POST
<form
内的任何一个钩子
woocommerce_form_field
以添加字段... process_checkout()
函数。woocommerce_after_checkout_validation
- 用于输入验证... woocommerce_checkout_order_processed
- 创建订单,添加元数据...
// add form fields
add_action( 'woocommerce_checkout_before_customer_details', 'woocommerce_checkout_before_customer_details' );
function woocommerce_checkout_before_customer_details() {
$args = array(
'type' => 'text',
'label' => 'My Custom field',
'description' => 'This is custom field',
'placeholder' => '',
'required' => true,
);
woocommerce_form_field( 'InputBox' , $args ); // you can call woocommerce_form_field as many as you want...
}
// validate your form field(s)
add_action( 'woocommerce_after_checkout_validation', 'woocommerce_after_checkout_validation' );
function woocommerce_after_checkout_validation() {
// $_POST['InputBox'] will be visible here...
// do your validations here... forget this hook if you don't need to validate...
// wc_add_notice( __( 'Invalid message!', 'woocommerce' ), 'error' );
// call wc_add_notice if you want to invalidate the form.
}
add_action( 'woocommerce_checkout_order_processed', 'woocommerce_checkout_order_processed' );
function woocommerce_checkout_order_processed( $order_id ) {
// we now have $order_id, you can now add your meta data....
}
答案 1 :(得分:0)
像这样更改你的钩子优先级。
add_action( 'woocommerce_checkout_update_order_meta', 'add_input_meta', 99, 2 );