当前位置: 首页 > 知识库问答 >
问题:

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

锺离边浩
2023-03-14

我已经在我的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 ) );
}

现在我想要同样的事情显示在我的订单确认电子邮件。我特别希望它在客户的电子邮件,但管理电子邮件也可以。

现在,任何延迟订购的产品在product meta中都出现为“backorderd:#”,以表示延迟订购的产品数量。

我想删除那个backordered元,并用在购物车和结账页面上使用的相同逻辑替换它,这样它将在电子邮件上显示相同的库存状态。

我知道backordered元是从类-wc-order-item-product.php中的set_backorder_meta函数应用的,但我不想编辑类文件,因为它会被更新覆盖。

我也不想只是改变文本,我需要改变逻辑。如果我可以禁用set_backorder_meta应用于电子邮件,我想我可以挂接到woocommerce_order_item_meta_end或者只编辑email-order-items.php模板文件(我都可以)。

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

有没有一种方法可以在电子邮件确认中禁用默认的缺货元,并添加自定义元来检查产品是否缺货(并且需要缺货通知),然后显示自定义文本?

共有1个答案

鲜于华容
2023-03-14

email-order-items.php模板中的第60-65行。使用wc_display_item_meta()函数。

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

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 );

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

 类似资料:
  • 根据订购的产品,我需要发送两封不同的“新订单”电子邮件。这种情况下,产品存储在不同的位置,我需要发送一封电子邮件,其中只包含存储1中的产品,另一封邮件包含存储2中的产品。如果仅订购了位于存储1的产品,则不应发送电子邮件2,反之亦然。 存储信息是每个产品上的自定义元字段。 我添加了一个自定义电子邮件类,它是的副本,但仅在需要时更改了名称。 我一直在寻找钩子和过滤器,但我不能一路走下去。我也一直在考虑

  • 我正试图阻止woo-commerce发送邮件时,订单状态更改。这些订单是亚马逊的,我的插件从亚马逊同步到Woo-Commerce。在这样做的时候,亚马逊和woo-commerce的邮件都收到了,这激怒了客户。因此,我想停止电子邮件功能停止时,状态从我的插件更改。要更改状态的代码是 有没有可以设置的标志来避免发送邮件? 任何种类的帮助都是非常感谢的。

  • 基于在Woocommerce电子邮件通知中显示产品图像的应答代码,我编写了以下代码以在Woocommerce电子邮件通知中显示产品图像。 我对订单电子邮件中的WooCommerce订单项目表有这个问题,产品缩略图需要移动到产品标题的左侧,标题应该整齐地放在右侧。 我们必须改变订单项表列的宽度,这样才能很好地适应。这也需要移动响应。 以下是我试图实现的目标的截图: 这就是我所拥有的: 要考虑的事情,

  • 好的,基本上我们在我们的WooCommerce商店中使用ACF创建了一个自定义字段,以便为特定的产品添加一个“发货延迟”通知。

  • 在WooCommerce中,我试图获取特定的产品属性值,并将其显示在管理新订单电子邮件通知的主题行中。 我发现了以下代码,但我对如何使其工作知之甚少: 我也试过这个(其中是我属性的slug): 但这对他们来说是行不通的。 如何从WooCommerce电子邮件主题中的订单项获取并显示特定的产品属性值?

  • 所以我已经为一个在线商店做了一个自定义管理订单模板(重新设计和重新安排了很多)。我已经知道“show image=>false/true”这不是我要找的答案,因为我完全改变了我的电子邮件模板中的一切。现在我的问题是不知道如何展示产品形象。 欢迎任何帮助,因为我是编码的新手。 编辑:这是我现在存在的错误: 下面是我的代码: