我想将每公斤商品的价格添加到 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);
我还没有弄清楚如何让项目小计与变量的计算相呼应。但首先我需要获取项目小计,如下面的屏幕截图所示。
之后我想重复一下我上面提到的计算。理想情况下,这应该仅显示在 admin-new-order.php 模板中。但如果只能通过将代码放入
email-order-items.php
中来在两封电子邮件中显示它,也可以。
建议:始终尝试使用可用的钩子,而不是覆盖模板。
以下内容将在电子邮件订单商品的 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 模板,未经任何修改。
据我了解,您想要修改
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
。