Php “更改/删除商业订单电子邮件”;延期交货:“延期交货”;来自产品元

Php “更改/删除商业订单电子邮件”;延期交货:“延期交货”;来自产品元,php,wordpress,woocommerce,hook-woocommerce,email-notifications,Php,Wordpress,Woocommerce,Hook Woocommerce,Email Notifications,我已经在我的woocommerce网站上定制了缺货文本,还想在订单确认电子邮件中添加相同的文本 例如,我的购物车和收银台在每个产品的(变体)元下显示“库存”或“定制” 为了得到结果,我在cart.php模板文件中添加了以下代码,并在review order.php模板文件中添加了类似的代码,以使其显示在签出页面上: //缺货通知。 如果($\u产品->延期订单\u需要通知()&&&$\u产品->延期订单($cart\u项目['quantity'])){ echo wp_kses_post(应用过

我已经在我的woocommerce网站上定制了缺货文本,还想在订单确认电子邮件中添加相同的文本

例如,我的购物车和收银台在每个产品的(变体)元下显示“库存”或“定制”

为了得到结果,我在
cart.php
模板文件中添加了以下代码,并在
review order.php
模板文件中添加了类似的代码,以使其显示在签出页面上:

//缺货通知。
如果($\u产品->延期订单\u需要通知()&&&$\u产品->延期订单($cart\u项目['quantity'])){
echo wp_kses_post(应用过滤器('woocommerce_cart_item_backorder_notification','p class=“cart_stock_notification made to order”>'。esc_html_('made to order','woocommerce')。

',$product id)); } 如果(!$产品->缺货订单\u需要通知()&&&!$产品->缺货订单($cart\u项目['quantity')){ echo wp_kses_post(应用过滤器('woocommerce_cart_item_backorder_notification','p class=“cart_stock_notification made to order”>'。esc_html_('made to order','woocommerce')。

',$product id)); } 否则{ echo wp_kses_post(应用过滤器('woocommerce_cart_item_backorder_notification','p class=“cart_stock_notification in stock”>'。esc_html_('in stock','woocommerce')。

',$product id)); }

现在,我想在我的订单确认电子邮件中显示同样的内容。我特别想在客户电子邮件上看到,但是管理员电子邮件也可以

现在,任何延期订购的产品都会在产品元中显示为“延期订购:#”,以表示延期订购产品的数量

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

我知道backordered meta是通过
class wc order item product.php
中的
set\u backorder\u meta
函数应用的,但我不想编辑类文件,因为它将被更新覆盖

我也不想仅仅改变文本,我需要改变逻辑。如果我可以禁用set\u backorder\u meta应用于电子邮件,我想我可以挂接到
woocommerce\u order\u item\u meta\u end
,或者编辑
email order items.php
模板文件(这两种方式我都可以)

我的问题是,我似乎无法检查项目“缺货通知”和/或“缺货”


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

email order items.php
在线模板中。使用
wc\u display\u item\u meta()
函数

如果我们进一步查看,我们将看到该函数位于
wc template functions.php

因此,我们可以通过
woocommerce\u display\u item\u meta
hook覆盖输出,并通过参数获得有关产品的必要信息

function filter\u woocommerce\u display\u item\u meta($html,$item,$args){
//获得产品
$product=$item->get_product();
//Html
如果($product->backorders\u require\u notification()&&&&$product->is\u on\u backorder($item['quantity'])){
$html='
  • 定制; }如果(!$product->backorders\u require\u notification()&&&&!$product->处于缺货状态($item['quantity')){ $html='
    • 定制; }否则{ $html='
      • 库存; } 返回$html; } 添加过滤器('woocommerce\u display\u item\u meta','filter\u woocommerce\u display\u item\u meta',10,3);


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

输出正在工作!问题是,它正在剥离所有元数据并替换为新的$html(正如预期的那样)。我仍然希望显示默认的产品元数据,但在最后添加自定义的缺货元数据。似乎我确实需要调用包含该元数据的参数,并且我已经查看了wc-template-functions.php,但我无法让它正常工作。我认为我的意图是将此更改为所有内容,如果不满足其他两个条件,则始终会显示一个“else”。因此,这是一个用elseif添加所需条件的问题。如果不满足任何条件(没有else),则默认值将显示也
$html='abc'
,然后
$html='def'
将给出结果
'def'
。如果使用
$html='abc'
,然后使用
$html.='def'
将给出结果
'abcdef'
。因此,=代替=将附加到而不是覆盖器中!非常感谢你。对于每个if/else语句,我刚刚更改为$html.='
    ,它工作得非常好。