我已经在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 ) );
}
现在,我希望在订单确认电子邮件中显示相同的内容。我特别希望在客户电子邮件中使用它,但是管理员电子邮件也可以。
现在,任何待补产品都在产品元数据中显示为“待补产品:#”,以表示待补产品的数量。
我想删除该缺货的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”。
有没有一种方法可以禁用电子邮件确认中的默认缺货订单元,并添加自定义元,以检查产品是否处于缺货状态(并需要缺货通知),然后显示自定义文本?
答案 0 :(得分:1)
在60 - 65行的email-order-items.php
模板中。使用wc_display_item_meta()
函数。
如果进一步看,我们会发现此函数位于
中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
中看到它的完成方式)