为了账号安全,请及时绑定邮箱和手机立即绑定

WooCommerce 订单电子邮件更改/从产品元中删除“延期交货:#”

WooCommerce 订单电子邮件更改/从产品元中删除“延期交货:#”

PHP
炎炎设计 2023-05-12 14:53:01
我在我的 woocommerce 网站上自定义了延期交货文本,并且还想将相同的文本添加到订单确认电子邮件中。例如,我有我的购物车和结帐,在每个产品的(变体)元下显示“库存”或“定制”。为了获得结果,我将以下代码添加到cart.php模板文件中,并在模板文件中添加了类似的代码review-order.php以使其显示在结帐页面上:// Backorder notification.if ( $_product->backorders_require_notification() && $_product->is_on_backorder( $cart_item['quantity'] ) ) {    echo wp_kses_post( apply_filters( 'woocommerce_cart_item_backorder_notification', '<p class="cart_stock_notification made-to-order">' . esc_html__( 'Made-To-Order', 'woocommerce' ) . '</p>', $product_id ) );}else if ( !$_product->backorders_require_notification() && !$_product->is_on_backorder( $cart_item['quantity'] ) ) {    echo wp_kses_post( apply_filters( 'woocommerce_cart_item_backorder_notification', '<p class="cart_stock_notification made-to-order">' . esc_html__( 'Made-To-Order', 'woocommerce' ) . '</p>', $product_id ) );}else {    echo wp_kses_post( apply_filters( 'woocommerce_cart_item_backorder_notification', '<p class="cart_stock_notification in-stock">' . esc_html__( 'In Stock', 'woocommerce' ) . '</p>', $product_id ) );}现在我希望在我的订单确认电子邮件中显示同样的内容。我特别希望它出现在客户电子邮件中,但管理员电子邮件也可以。现在,任何延期交货的产品都在产品元数据中显示为“延期交货:#”,表示延期交货的产品数量。我想删除那个延期交货的元数据,并用购物车和结帐页面上使用的相同逻辑替换它,这样它将在电子邮件中显示相同的库存状态。set_backorder_meta我知道延期交货的元是从中的函数应用的class-wc-order-item-product.php,但我不想编辑类文件,因为它会被更新覆盖。我也不想只更改文本,我需要更改逻辑。如果我可以禁用 set_backorder_meta 应用于电子邮件,我想我可以挂钩woocommerce_order_item_meta_end或只是编辑email-order-items.php模板文件(我都可以)。我的问题是我似乎无法检查项目“backorders_require_notification”和/或“is_on_backorder”。有没有办法在电子邮件确认中禁用默认的延期交货元数据并添加自定义元数据以检查产品是否处于延期交货状态(并且需要延期交货通知),然后显示自定义文本?
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

在email-order-items.php模板中,wc_display_item_meta()使用了函数。


如果我们进一步看,我们会看到这个函数在wc-template-functions.php


https://github.com/woocommerce/woocommerce/blob/master/includes/wc-template-functions.php


所以我们可以通过钩子覆盖输出woocommerce_display_item_meta,通过参数我们可以获得关于产品的必要信息。


function filter_woocommerce_display_item_meta ( $html, $item, $args ) { 

    // Get product

    $product = $item->get_product();

    

    // Html

    if ( $product->backorders_require_notification() && $product->is_on_backorder( $item['quantity'] ) ) {

        $html = '<ul class="wc-item-meta"><li><strong class="wc-item-meta-label" style="float: left; margin-right: .25em; clear: both">Made-To-Order</strong></li></ul>';       

    } else if ( !$product->backorders_require_notification() && !$product->is_on_backorder( $item['quantity'] ) ) {

        $html = '<ul class="wc-item-meta"><li><strong class="wc-item-meta-label" style="float: left; margin-right: .25em; clear: both">Made-To-Order</strong></li></ul>';

    } else {

        $html = '<ul class="wc-item-meta"><li><strong class="wc-item-meta-label" style="float: left; margin-right: .25em; clear: both">In stock</strong></li></ul>';

    }

    

    return $html;

}

add_filter( 'woocommerce_display_item_meta', 'filter_woocommerce_display_item_meta', 10, 3 );

提示:为了使输出更加动态,您可以通过 args 重写输出(您可以在 中看到这是如何完成的wc-template-functions.php)



查看完整回答
反对 回复 2023-05-12
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信