gpt4 book ai didi

php - 在 Woocommerce 的任何地方保存并显示特定的支付网关附加字段

转载 作者:行者123 更新时间:2023-12-05 00:47:37 27 4
gpt4 key购买 nike

我正在使用 "Additional field on checkout for specific payment gateway in Woocommerce " 答案代码,它会在结帐页面中显示特定支付网关的附加下拉字段。

如何在订单和邮件通知中保存和显示选项?

最佳答案

Continuation of "Additional field on checkout for specific payment gateway in Woocommerce"

以下是完整的方法:

  1. 添加带有 BACS 付款选项的下拉菜单
  2. 字段验证(必选)
  3. 将所选选项保存为订单自定义元数据
  4. 在任何地方(订单和电子邮件通知)显示所选的订单总数
  5. 在账单详情下方的管理员订单编辑页面上显示所选选项。

代码:

// BACS payement gateway description: Append custom select field
add_filter( 'woocommerce_gateway_description', 'gateway_bacs_custom_fields', 20, 2 );
function gateway_bacs_custom_fields( $description, $payment_id ){
//
if( 'bacs' === $payment_id ){
ob_start(); // Start buffering

echo '<div class="bacs-options" style="padding:10px 0;">';

woocommerce_form_field( 'bacs_option', array(
'type' => 'select',
'label' => __("Fill in this field", "woocommerce"),
'class' => array('form-row-wide'),
'required' => true,
'options' => array(
'' => __("Select something", "woocommerce"),
'Option 1' => __("Choice one", "woocommerce"),
'Option 2' => __("Choice two", "woocommerce"),
),
), '');

echo '<div>';

$description .= ob_get_clean(); // Append buffered content
}
return $description;
}

// Checkout custom field validation
add_action('woocommerce_checkout_process', 'bacs_option_validation' );
function bacs_option_validation() {
if ( isset($_POST['payment_method']) && $_POST['payment_method'] === 'bacs'
&& isset($_POST['bacs_option']) && empty($_POST['bacs_option']) ) {
wc_add_notice( __( 'Please Select an option for "Direct Bank Transfer" payment, please.' ), 'error' );
}
}

// Checkout custom field save to order meta
add_action('woocommerce_checkout_create_order', 'save_bacs_option_order_meta', 10, 2 );
function save_bacs_option_order_meta( $order, $data ) {
if ( isset($_POST['bacs_option']) && ! empty($_POST['bacs_option']) ) {
$order->update_meta_data( '_bacs_option' , esc_attr($_POST['bacs_option']) );
}
}

// Display custom field on order totals lines everywhere
add_action('woocommerce_get_order_item_totals', 'display_bacs_option_on_order_totals', 10, 3 );
function display_bacs_option_on_order_totals( $total_rows, $order, $tax_display ) {
if ( $order->get_payment_method() === 'bacs' && $bacs_option = $order->get_meta('_bacs_option') ) {
$sorted_total_rows = [];

foreach ( $total_rows as $key_row => $total_row ) {
$sorted_total_rows[$key_row] = $total_row;
if( $key_row === 'payment_method' ) {
$sorted_total_rows['bacs_option'] = [
'label' => __( "Bank wire option", "woocommerce"),
'value' => esc_html( $bacs_option ),
];
}
}
$total_rows = $sorted_total_rows;
}
return $total_rows;
}

// Display custom field in Admin orders, below billing address block
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_bacs_option_near_admin_order_billing_address', 10, 1 );
function display_bacs_option_near_admin_order_billing_address( $order ){
if( $bacs_option = $order->get_meta('_bacs_option') ) {
echo '<div class="bacs-option">
<p><strong>'.__('BACS option').':</strong> ' . $bacs_option . '</p>
</div>';
}
}

代码在您的事件子主题(或事件主题)的functions.php 文件中。经过测试并且有效。

结帐页面:

enter image description here


在收到订单页面(在订单 View 和电子邮件通知上):

enter image description here


在管理员订单页面上:

enter image description here

关于php - 在 Woocommerce 的任何地方保存并显示特定的支付网关附加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56253265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com