gpt4 book ai didi

wordpress - 如何计算 WooCommerce 编辑订单中的自定义订单总额?

转载 作者:行者123 更新时间:2023-12-01 23:25:19 27 4
gpt4 key购买 nike

目前,我正在从事 WooCommerce (5.2.2) 项目。我的客户想在后端(不是为客户)为预付款创建一个自定义输入字段,以便当我的客户收到客户的预付款(交付目的)时,他们可以手动添加并从后端订购总计自动调整。所以我编写了一个代码并在后元表中创建了一个自定义字段并使用该元表值来计算总订单,它有效但我必须刷新两次才能获得订单的总新值。这是我的代码并告诉我如何修复它 -

add_action( 'manage_shop_order_posts_custom_column' ,  array(&$this,'add_custom_column_content'), 11, 2 );

add_action( 'woocommerce_admin_order_totals_after_discount', array(&$this, 'vp_add_sub_total'), 10, 1);

add_action( 'woocommerce_process_shop_order_meta', array(&$this, 'save_order_custom_field_meta_data'), 12, 2 );


// Output a custom editable field in backend edit order pages under general section
function editable_order_custom_field( $order ){

// Get "Delivery Type" from meta data (not item meta data)
$updated_advance_payment = $order->get_meta('_advance_payment');

// Replace "Delivery Type" value by the meta data if it exist
$advancePayment = $updated_advance_payment ? $updated_advance_payment : ( isset($item_value) ? $item_value : '');

// Display the custom editable field
woocommerce_wp_text_input(
array(
'id' => 'advance_payment',
'label' => __("Advance Payment:", "woocommerce"),
'value' => $advancePayment,
'wrapper_class' => 'form-field-wide',
)
);
}

// Save the custom editable field value as order meta data and update order item meta data
function save_order_custom_field_meta_data( $post_id, $post ){
if( isset( $_POST[ 'advance_payment' ] )){
update_post_meta( $post_id, '_advance_payment', sanitize_text_field( $_POST[ 'advance_payment' ] ) );

// Update the existing item meta data
if( isset( $_POST[ 'item_id_ref' ] ) ){
wc_update_order_item_meta( $_POST[ 'item_id_ref' ], 'Advance Payment', $_POST[ 'advance_payment' ] );
}
}
}

//Display Advance Payment and calculate
function vp_add_sub_total( $the_order ) {
global $post, $the_order;
if ( empty( $the_order ) || $the_order->get_id() !== $post->ID ) {
$the_order = wc_get_order( $post->ID );
}
?>

<tr>
<td class="label">Advance Payment:</td>
<td width="1%"></td>
<td class="total"><?php echo wc_price(get_post_meta($post->ID, "_advance_payment", true));?></td>
</tr>

<?php

$getTotal = $the_order->get_total();

$updateTotal = $getTotal - get_post_meta($post->ID, "_advance_payment", true);

$the_order->set_total($updateTotal);

$the_order->save();

}

注意:我为这笔预付款创建了一个小插件。

视频链接供引用:https://www.awesomescreenshot.com/video/3589010?key=b26b5951753bfdc8a969b53f526a36d1

最佳答案

您需要在显示前计算Advance Payment。您可以使用 woocommerce_admin_order_item_headers 操作 Hook 。

add_action( 'woocommerce_admin_order_item_headers', 'calculate_advance_payment', 10, 1);
add_action( 'woocommerce_admin_order_totals_after_discount', 'vp_add_sub_total', 10, 1);
add_action( 'woocommerce_process_shop_order_meta', 'save_order_custom_field_meta_data', 12, 2 );
add_action( 'woocommerce_admin_order_data_after_order_details', 'editable_order_custom_field' );

// Output a custom editable field in backend edit order pages under general section
function editable_order_custom_field( $order ){

// Get "Delivery Type" from meta data (not item meta data)
$updated_advance_payment = $order->get_meta('_advance_payment');

// Replace "Delivery Type" value by the meta data if it exist
$advancePayment = $updated_advance_payment ? $updated_advance_payment : ( isset($item_value) ? $item_value : '');

// Display the custom editable field
woocommerce_wp_text_input(
array(
'id' => 'advance_payment',
'label' => __("Advance Payment:", "woocommerce"),
'value' => $advancePayment,
'wrapper_class' => 'form-field-wide',
)
);
}

// Save the custom editable field value as order meta data and update order item meta data
function save_order_custom_field_meta_data( $post_id, $post ){
if( isset( $_POST[ 'advance_payment' ] )){
update_post_meta( $post_id, '_advance_payment', sanitize_text_field( $_POST[ 'advance_payment' ] ) );

// Update the existing item meta data
if( isset( $_POST[ 'item_id_ref' ] ) ){
wc_update_order_item_meta( $_POST[ 'item_id_ref' ], 'Advance Payment', $_POST[ 'advance_payment' ] );
}
}
}

function calculate_advance_payment( $the_order ) {
$getTotal = $the_order->get_total();
$updateTotal = $getTotal - get_post_meta($the_order->get_id(), "_advance_payment", true);
$the_order->set_total($updateTotal);
$the_order->save();
}

function vp_add_sub_total( $the_order ) {
global $post, $the_order; ?>
<tr>
<td class="label">Advance Payment:</td>
<td width="1%"></td>
<td class="total"><?php echo wc_price(get_post_meta($post->ID, "_advance_payment", true));?></td>
</tr><?php
}

关于wordpress - 如何计算 WooCommerce 编辑订单中的自定义订单总额?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67344353/

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