WooCommerce订单电子邮件更改/从产品meta中删除“ backordered:#”

问题描述 投票:1回答:1

我已经在woocommerce网站上自定义了缺货订单文本,并且还希望将相同的文本添加到订单确认电子邮件中。

例如,我有购物车和结帐栏,显示每个产品的此结果:

Cart Screenshot


[为了得到结果,我在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 ) );
}

现在,我希望在订单确认电子邮件中显示相同的内容。我特别希望在客户电子邮件中使用它,但管理员电子邮件也可以。

现在,订单确认显示为:

Email Confirmation Screenshot


正如您所看到的,任何待补产品在产品元数据中都显示为“待补产品:#”,以表示待补产品的数量。

我想删除该缺货的meta并将其替换为购物车和结帐页面上使用的相同逻辑,以便它将在电子邮件中显示相同的库存状态。

[我知道set_backorder_meta中的class-wc-order-item-product.php函数正在应用补缺的meta,但是我不想编辑类文件,因为它将被更新覆盖。

我也不想只更改文本,我需要更改逻辑。如果我可以禁止set_backorder_meta应用于电子邮件,我想我可以加入woocommerce_order_item_meta_end或只编辑email-order-items.php模板文件(对我来说都很好)。

我的问题是,我似乎无法检查项目“ backorders_require_notification”和/或“ is_on_backorder”。

是否有办法在电子邮件确认中禁用默认的缺货订单元并添加自定义元,以检查产品是否处于缺货状态(并需要缺货通知),然后显示自定义文本?

php wordpress woocommerce hook-woocommerce email-notifications
1个回答
0
投票

email-order-items.php60 - 65中的模板中。使用wc_display_item_meta()功能。

如果进一步看,我们将看到此函数位于

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

因此我们可以通过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文件的url中所见)

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