在 WooCommerce 新订单通知中添加每公斤订单商品价格

问题描述 投票:0回答:2

我想将每公斤商品的价格添加到 admin-new-order.php 模板中。我已成功获取重量和数量,并通过将以下代码添加到

admin-new-order.php
模板文件中,在
customer-completed-order.php
email-order-items.php
模板中回显它(请参阅屏幕截图中的“104”):

$product = $item->get_product();
$product_weight = $product->get_weight();
echo $product_weight;
$qty = $item->get_quantity();
echo $qty;

我缺少的是价格变量(参见“82,80”屏幕截图),因此我可以回显如下计算:

echo ($subtotal / $product_weight / $qty);

我还没有弄清楚如何让项目小计与变量的计算相呼应。但首先我需要获取项目小计,如下面的屏幕截图所示。

enter image description here

之后我想重复一下我上面提到的计算。理想情况下,这应该仅显示在 admin-new-order.php 模板中。但如果只能通过将代码放入

email-order-items.php
中来在两封电子邮件中显示它,也可以。

php wordpress woocommerce orders email-notifications
2个回答
1
投票

建议:始终尝试使用可用的钩子,而不是覆盖模板。

以下内容将在电子邮件订单商品的 SKU 下按 Kilo 显示产品价格,仅用于新订单通知:

// Setting the email ID as a global variable
add_action('woocommerce_email_before_order_table', 'set_the_email_id_as_a_global_variable', 1, 4);
function set_the_email_id_as_a_global_variable($order, $sent_to_admin, $plain_text, $email){
    $GLOBALS['email_id'] = $email->id;
}

// Display product price by Kilo under the product SKU
add_action( 'woocommerce_order_item_meta_start', 'display_remaining_stock_quantity', 10, 3 );
function display_remaining_stock_quantity( $item_id, $item, $order ) {
    // Only for order item "line item" type
    if ( !$item->is_type('line_item') ) {
        return;
    }
    $globalsVar = $GLOBALS; // Pass $GLOBALS variable as reference

    // Target New Order Email notification 
    if( isset($globalsVar['email_id']) && $globalsVar['email_id'] === 'new_order' ) {
        $product  = $item->get_product();
        $quantity = $item->get_quantity();
        $weight   = $product->get_weight();

        if ( $weight > 0 ) {        
            if ( 'excl' === get_option( 'woocommerce_tax_display_cart' ) ) {
                $subtotal = $order->get_line_subtotal( $item );
            } else {
                $subtotal = $order->get_line_subtotal( $item, true );
            }
            $price_per_kg = $subtotal / $quantity / $weight;
            $price_args   = array('currency' => $order->get_currency());

            echo '<div>' . wc_price( $price_per_kg, $price_args ) . '/kg</div>';
        }
    }
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

确保模板

email-order-items.php
是默认的 WooCommerce 模板,未经任何修改。


-2
投票

据我了解,您想要修改

admin-new-order.php
电子邮件。

一种方法是挂钩操作

'woocommerce_email_order_details'
并输出您需要的所有信息。

示例:

if ( ! function_exists( 'phr4pp_modify_woocommerce_email_order_details' ) ) {
    function phr4pp_modify_woocommerce_email_order_details( $order, $sent_to_admin, $plain_text, $email ) {
        echo 'text here!';
    }

    add_action( 'woocommerce_email_order_details', 'phr4pp_modify_woocommerce_email_order_details', 10, 4 );
}

将优先级(

add_action()
中的第三个参数)更改为较低的数字将在其他内容之前显示文本。

上面的代码可以进入主题内的文件

functions.php

© www.soinside.com 2019 - 2024. All rights reserved.