Php 在Woocommerce中的任何位置保存和显示特定的支付网关附加字段
“我正在使用特定的付款网关”字段显示“我正在使用特定的付款网关”Php 在Woocommerce中的任何位置保存和显示特定的支付网关附加字段,php,wordpress,woocommerce,checkout,payment-method,Php,Wordpress,Woocommerce,Checkout,Payment Method,“我正在使用特定的付款网关”字段显示“我正在使用特定的付款网关” 如何保存和显示订单和电子邮件通知上的选项?添加“woocommerce\u checkout\u update\u order\u meta”、“custom\u checkout\u field\u update\u order\u meta”操作 函数自定义\签出\字段\更新\订单\元$order\ id { if!空$\u POST['field\u slug']{ 更新_post_meta$order_id,'Some k
如何保存和显示订单和电子邮件通知上的选项?添加“woocommerce\u checkout\u update\u order\u meta”、“custom\u checkout\u field\u update\u order\u meta”操作 函数自定义\签出\字段\更新\订单\元$order\ id { if!空$\u POST['field\u slug']{ 更新_post_meta$order_id,'Some key',清理_text_field$_post['field_slug'] } }
要在订单详细信息或电子邮件模板页面中获取此值,您可以使用get_post_meta$order_id“Some key”,false 添加动作“woocommerce\u checkout\u update\u order\u meta”、“自定义\u checkout\u field\u update\u order\u meta” 函数自定义\签出\字段\更新\订单\元$order\ id { if!空$\u POST['field\u slug']{ 更新_post_meta$order_id,'Some key',清理_text_field$_post['field_slug'] } } 要在订单详细信息或电子邮件模板页面中获取此值,您可以使用get_post_meta$order_id“Some key”,false 延续 以下是完整的方法: 向BACS付款添加一个带有选项的下拉列表 需要字段验证选项 将所选选项另存为订单自定义元数据 在所有订单和电子邮件通知中显示所选的订单总计选项 在账单详细信息下方的管理订单编辑页面上显示所选选项。 守则:
// 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文件。测试和工作
在签出页面上:
在订单接收页面上的订单查看和电子邮件通知:
在管理订单页面上:
延续
以下是完整的方法:
向BACS付款添加一个带有选项的下拉列表
需要字段验证选项
将所选选项另存为订单自定义元数据
在所有订单和电子邮件通知中显示所选的订单总计选项
在账单详细信息下方的管理订单编辑页面上显示所选选项。
守则:
// 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文件。测试和工作
在签出页面上:
在订单接收页面上的订单查看和电子邮件通知:
在管理订单页面上:
当您使用现有代码时,如果您没有对其进行真正的更改,只需使用问题中的链接来解释代码的作用……此外,如果此代码有用,请不要忘记在您选择代码的地方向上投票。在提出新问题之前,请对此线程上以前的问题提供一些现有答案的反馈。当您使用现有代码时,如果您没有对其进行真正的更改,请使用问题中的链接解释代码的作用……此外,如果此代码有用,请不要忘了在您选择答案线程的位置上投票。在提出新问题之前,请给一些反馈,对你以前的问题在这个线程现有的答案。伟大的解决方案!谢谢你的详细介绍。这个答案值得更多的投票。很好的解决方案!谢谢你的详细评论。这个答案值得更多的投票。