在 Woocommerce 中验证并保存特定支付网关的附加结帐字段
Validate and save additional checkout field for specific payment gateway in Woocommerce
我需要在客户 select BACS 网关 时显示文本输入字段,并且我希望将输入字段值附加到订单和电子邮件通知中 。
我正在使用 答案代码,我已将 select 字段更改为输入文本字段:
add_filter( 'woocommerce_gateway_description', 'gateway_bacs_custom_fields', 20, 2 );
function gateway_bacs_custom_fields( $description, $method_id ){
//
if( $method_id == 'bacs' ){
ob_start(); // Start buffering
echo '<div class="bacs-fields" style="padding:10px 0;">';
woocommerce_form_field( 'field_slug', array(
'type' => 'text',
'label' => __("Udfyld EAN", "woocommerce"),
'class' => array('form-row-wide'),
'required' => true,
), '');
echo '<div>';
$description .= ob_get_clean(); // Append buffered content
}
return $description;
}
它在显示该字段的结帐页面上工作正常。
但是输入的文本值没有保存到订单和电子邮件通知中。
如何在订单和电子邮件通知中保存和附加这个输入的文本值?
由于您使用的答案代码只是在 BACS 付款说明下的结帐中显示一个字段,因此缺少很多步骤:
您需要(仅当BAC是选定的付款方式):
- 验证字段
- 将输入的值保存到订单中
- 在收到的订单和订单视图(我的账户)中显示字段值
- 在电子邮件通知中显示字段值
- 在管理员编辑订单页面显示字段值
所以你可以看到你问的问题很大(太宽泛)并且需要针对第 3、4 和 5 点提出一个额外的新问题,您将需要说出你想输出的地方(位置).
第 1 步和第 2 步的所有代码:
add_filter( 'woocommerce_gateway_description', 'gateway_bacs_appended_custom_text_fields', 10, 2 );
function gateway_bacs_appended_custom_text_fields( $description, $payment_id ){
if( $payment_id === 'bacs' ){
ob_start(); // Start buffering
echo '<div class="bacs-fields" style="padding:10px 0;">';
woocommerce_form_field( 'udfyld_ean', array(
'type' => 'text',
'label' => __("Udfyld EAN", "woocommerce"),
'class' => array('form-row-wide'),
'required' => true,
), '');
echo '<div>';
$description .= ob_get_clean(); // Append buffered content
}
return $description;
}
// Process the field (validation)
add_action('woocommerce_checkout_process', 'udfyld_ean_checkout_field_validation');
function udfyld_ean_checkout_field_validation() {
if ( $_POST['payment_method'] === 'bacs' && isset($_POST['udfyld_ean']) && empty($_POST['udfyld_ean']) )
wc_add_notice( __( 'Please enter your "Udfyld EAN" number.' ), 'error' );
}
// Save "Udfyld EAN" number to the order as custom meta data
add_action('woocommerce_checkout_create_order', 'save_udfyld_ean_to_order_meta_data', 10, 4 );
function save_udfyld_ean_to_order_meta_data( $order, $data ) {
if( $data['payment_method'] === 'bacs' && isset( $_POST['udfyld_ean'] ) ) {
$order->update_meta_data( '_udfyld_ean', sanitize_text_field( $_POST['udfyld_ean'] ) );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。经过测试并有效。
To get this custom field value from $order
the WC_Order
object you will use:
$udfyld_ean = $order->get_meta('_udfyld_ean');
Or from $order_id
the order ID you can use WordPress get_post_meta()
function:
$udfyld_ean = get_post_meta( $order_id, '_udfyld_ean', true );
字段验证(选择BACS作为支付方式):
输入的字段值被保存到订单元数据(wp_postmeta
table中的phpMyAdmin视图):
我需要在客户 select BACS 网关 时显示文本输入字段,并且我希望将输入字段值附加到订单和电子邮件通知中 。
我正在使用
add_filter( 'woocommerce_gateway_description', 'gateway_bacs_custom_fields', 20, 2 );
function gateway_bacs_custom_fields( $description, $method_id ){
//
if( $method_id == 'bacs' ){
ob_start(); // Start buffering
echo '<div class="bacs-fields" style="padding:10px 0;">';
woocommerce_form_field( 'field_slug', array(
'type' => 'text',
'label' => __("Udfyld EAN", "woocommerce"),
'class' => array('form-row-wide'),
'required' => true,
), '');
echo '<div>';
$description .= ob_get_clean(); // Append buffered content
}
return $description;
}
它在显示该字段的结帐页面上工作正常。
但是输入的文本值没有保存到订单和电子邮件通知中。
如何在订单和电子邮件通知中保存和附加这个输入的文本值?
由于您使用的答案代码只是在 BACS 付款说明下的结帐中显示一个字段,因此缺少很多步骤:
您需要(仅当BAC是选定的付款方式):
- 验证字段
- 将输入的值保存到订单中
- 在收到的订单和订单视图(我的账户)中显示字段值
- 在电子邮件通知中显示字段值
- 在管理员编辑订单页面显示字段值
所以你可以看到你问的问题很大(太宽泛)并且需要针对第 3、4 和 5 点提出一个额外的新问题,您将需要说出你想输出的地方(位置).
第 1 步和第 2 步的所有代码:
add_filter( 'woocommerce_gateway_description', 'gateway_bacs_appended_custom_text_fields', 10, 2 );
function gateway_bacs_appended_custom_text_fields( $description, $payment_id ){
if( $payment_id === 'bacs' ){
ob_start(); // Start buffering
echo '<div class="bacs-fields" style="padding:10px 0;">';
woocommerce_form_field( 'udfyld_ean', array(
'type' => 'text',
'label' => __("Udfyld EAN", "woocommerce"),
'class' => array('form-row-wide'),
'required' => true,
), '');
echo '<div>';
$description .= ob_get_clean(); // Append buffered content
}
return $description;
}
// Process the field (validation)
add_action('woocommerce_checkout_process', 'udfyld_ean_checkout_field_validation');
function udfyld_ean_checkout_field_validation() {
if ( $_POST['payment_method'] === 'bacs' && isset($_POST['udfyld_ean']) && empty($_POST['udfyld_ean']) )
wc_add_notice( __( 'Please enter your "Udfyld EAN" number.' ), 'error' );
}
// Save "Udfyld EAN" number to the order as custom meta data
add_action('woocommerce_checkout_create_order', 'save_udfyld_ean_to_order_meta_data', 10, 4 );
function save_udfyld_ean_to_order_meta_data( $order, $data ) {
if( $data['payment_method'] === 'bacs' && isset( $_POST['udfyld_ean'] ) ) {
$order->update_meta_data( '_udfyld_ean', sanitize_text_field( $_POST['udfyld_ean'] ) );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。经过测试并有效。
To get this custom field value from
$order
theWC_Order
object you will use:$udfyld_ean = $order->get_meta('_udfyld_ean');
Or from
$order_id
the order ID you can use WordPressget_post_meta()
function:$udfyld_ean = get_post_meta( $order_id, '_udfyld_ean', true );
字段验证(选择BACS作为支付方式):
输入的字段值被保存到订单元数据(wp_postmeta
table中的phpMyAdmin视图):