将Woocommerce结帐中的自定义值另存为自定义订单元数据

时间:2019-03-07 12:16:27

标签: php wordpress woocommerce checkout hook-woocommerce

在Woocommerce中,我有一个包含自定义数据的结帐页面(查看顺序)。 我需要找到一个钩子来按顺序注册一些自定义数据($totaleiva_1$totalefinitocarrello),然后我必须以电子邮件的新顺序发送它们。

我无法做到这一点。有什么建议或帮助吗?


编辑-这是我的代码:

$totaleiva_1 = 0; 
$items = $woocommerce->cart->get_cart(); 
foreach($items as $item ) { 
    $totaleiva_1 += $totalForSebeneArray[$item ['data']->get_id()]; 
} 
$totaleiva_1 = number_format($totaleiva_1, 2, '.', ''); 
$totalefinitocarrello = $totaleiva_1 + $total; echo "€"; 
echo $totalefinitocarrello; 

1 个答案:

答案 0 :(得分:0)

您将需要添加和显示2个隐藏字段,以及2个所需的值(以便在提交时将其保存并保存为自定义订单元数据)

  

您的代码也有些过时,可以简化。

这是您重新访问的代码:

$totaleiva_1 = 0; 

// Loop through cart items
foreach (WC()->cart->get_cart() as $cart_item ) { 
    $totale_iva_1 += $totalForSebeneArray[$cart_item['data']->get_id()]; 
} 

$totale_finito_carrello = wc_price( $totale_iva_1 + $total ); 

echo $totale_finito_carrello; 

// Display 2 hidden input fields
echo '<input type="hidden" id="totaleiva1" name="totaleiva1" value="'.$totale_iva_1.'">
<input type="hidden" id="tfcarrello" name="tfcarrello" value="'.$totale_finito_carrello.'">';

然后,您将使用以下方法将数据保存为自定义订单元数据

add_action('woocommerce_checkout_create_order', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( $order, $data ) {
    if( isset($_POST['totaleiva1']) && ! empty($_POST['totaleiva1']) ) {
        $order->update_meta_data( '_totale_iva_1', esc_attr( $_POST['totaleiva1'] ) );
    }
    if( isset($_POST['tfcarrello']) && ! empty($_POST['tfcarrello']) ) {
        $order->update_meta_data( '_totale_fin_carrello', esc_attr( $_POST['tfcarrello'] ) );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。


现在获取数据并在任何地方使用:

1)从订单ID 变量中,使用:

$totaleiva_1 = get_post_meta( $order_id, '_totale_iva_1', true );
$totalefinitocarrello = get_post_meta( $order_id, '_totale_fin_carrello', true );

2来自WC_Order对象:

$totaleiva_1 = $order->get_meta('_totale_iva_1');
$totalefinitocarrello = $order->get_meta('_totale_fin_carrello');

要在Woocommerce新订单通知中显示那些,ou将使用:

add_action( 'woocommerce_email_order_details', 'email_order_details_action_callback', 5, 4 );
function email_order_details_action_callback( $order, $sent_to_admin, $plain_text, $email ){
    if( $email->id === 'new_order' ) {
        if ( $tiva1  = $order->get_meta('_totale_iva_1') ) {
            echo '<p>'. __("Totale IVA") . ': ' . $tiva1 . '</p>';
        }

        if ( $tfcarr = $order->get_meta('_totale_fin_carrello') ) {
            echo '<p>'. __("Totale finito carrello") . ': ' . $tfcarr . '</p>';
        }
    }
}

在管理订单页面中显示字段:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'admin_order_after_billing_address_callback', 10, 1 );
function admin_order_after_billing_address_callback( $order ){
    if ( $tiva1  = $order->get_meta('_totale_iva_1') ) {
        echo '<p>'. __("Totale IVA") . ': ' . $tiva1 . '</p>';
    }
    if ( $tfcarr = $order->get_meta('_totale_fin_carrello') ) {
        echo '<p>'. __("Totale finito carrello") . ': ' . $tfcarr . '</p>';
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。

  

现在,我认为Woocommerce可以使用可用的设置来处理所有您的IVA自定义计算,因为您使到处都变得更加复杂。