前一段时间,我发布了一个有关问题的问题,我需要发送不同的电子邮件,具体取决于订购的产品属于哪个存储(自定义字段)。 因此,如果只订购了属于Storage1的产品,则只应发送Email1。如果订购了一个属于Storage1的产品和一个属于Storage2的产品,则将发送包含product1的电子邮件1和包含产品2的电子邮件2。 对原来的问题的链接:Custom order emails depending on product meta dataWoocommerce - 自定义电子邮件类创建重复的电子邮件
这一切现在,但由于某种原因,我得到双重电子邮件。如果我从Storage1订购一件产品,我会将两封电子邮件1发送到我的收件箱中...如果我订购5,10或20种产品,我只收到一封额外的电子邮件并不重要,但这足够了。
所以我想看看是否有人经历过同样的事情,他们是如何修复它的?
为了清楚起见,我会再次在此处添加代码。
我复制了class-wc-new-order
并创建了两个与原始完全相同的新类。我分别将ID和类名更改为存储1和存储2。
我通过执行以下操作加载类:
//Add our custom class to WC email classes
add_filter('woocommerce_email_classes', [ $this, 'custom_order_email_add_email_classes' ], 10, 1);
function custom_order_email_add_email_classes($email_classes) {
require(CUSTOM_ORDER_EMAIL_PLUGIN_DIR . 'classes/class-wc-email-new-order-storage1.php');
require(CUSTOM_ORDER_EMAIL_PLUGIN_DIR . 'classes/class-wc-email-new-order-storage2.php');
$email_classes['WC_Email_New_Order_Storage1'] = new WC_Email_New_Order_Storage1();
$email_classes['WC_Email_New_Order_Storage2'] = new WC_Email_New_Order_Storage2();
return $email_classes;
}
然后我在两个电子邮件类编辑the trigger()
- 功能。 请注意,除了测试之外,我没有更改任何触发器操作,但每次都收到两封电子邮件,无论触发器操作是否处于活动状态。如果我停用所有触发器操作,我当然不会收到任何电子邮件。
public function trigger($order_id, $order = false) {
$trigger = false;
if ($order_id && ! is_a($order, 'WC_Order')) {
$order = wc_get_order($order_id);
}
if (is_a($order, 'WC_Order')) {
$this->object = $order;
$this->find['order-date'] = '{order_date}';
$this->find['order-number'] = '{order_number}';
$this->replace['order-date'] = wc_format_datetime($this->object->get_date_created());
$this->replace['order-number'] = $this->object->get_order_number();
$items = $order->get_items();
foreach ($items as $item_id => $item) {
$product = $item->get_product();
if ($product->get_meta('_product_storage') == 'storage2') {//storage1 in the other email class
$trigger = true;
}
}
}
if (! $this->is_enabled() || ! $this->get_recipient()) {
return;
}
if($trigger === true) {
$this->send($this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments());
}
else {
return;
}
}
为了从Email1中筛选出Storage2产品,我不得不覆盖email-order-details.php
。此代码仅在模板中的<tbody>
下方输入,我从order-email-items.php
获取用于默认显示产品的代码。
编辑电子邮件阶details.php:
if ($email->id == 'new_order_storage1') {
$items = $order->get_items();
foreach($items as $item_id => $item) {
$product = $item->get_product();
if ($product->get_meta('_product_storage') == 'storage1') {
?>
<tr class="<?php echo esc_attr(apply_filters('woocommerce_order_item_class', 'order_item', $item, $order)); ?>">
<td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; word-wrap:break-word;"><?php
// Show title/image etc
if ($show_image) {
echo apply_filters('woocommerce_order_item_thumbnail', '<div style="margin-bottom: 5px"><img src="' . ($product->get_image_id() ? current(wp_get_attachment_image_src($product->get_image_id(), 'thumbnail')) : wc_placeholder_img_src()) . '" alt="' . esc_attr__('Product image', 'woocommerce') . '" height="' . esc_attr($image_size[1]) . '" width="' . esc_attr($image_size[0]) . '" style="vertical-align:middle; margin-' . (is_rtl() ? 'left' : 'right') . ': 10px;" /></div>', $item);
}
// Product name
echo apply_filters('woocommerce_order_item_name', $item->get_name(), $item, false);
// SKU
if ($show_sku && is_object($product) && $product->get_sku()) {
echo ' (#' . $product->get_sku() . ')';
}
// allow other plugins to add additional product information here
do_action('woocommerce_order_item_meta_start', $item_id, $item, $order, $plain_text);
wc_display_item_meta($item);
if ($show_download_links) {
wc_display_item_downloads($item);
}
// allow other plugins to add additional product information here
do_action('woocommerce_order_item_meta_end', $item_id, $item, $order, $plain_text);
?></td>
<td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo apply_filters('woocommerce_email_order_item_quantity', $item->get_quantity(), $item); ?></td>
<td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo $order->get_formatted_line_subtotal($item); ?></td>
</tr>
<?php
}
}
}
else if ($email->id == 'new_order_storage2') {
$items = $order->get_items();
foreach($items as $item_id => $item) {
$product = $item->get_product();
if ($product->get_meta('_product_storage') == 'storage2') {
?>
<tr class="<?php echo esc_attr(apply_filters('woocommerce_order_item_class', 'order_item', $item, $order)); ?>">
<td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; word-wrap:break-word;"><?php
// Show title/image etc
if ($show_image) {
echo apply_filters('woocommerce_order_item_thumbnail', '<div style="margin-bottom: 5px"><img src="' . ($product->get_image_id() ? current(wp_get_attachment_image_src($product->get_image_id(), 'thumbnail')) : wc_placeholder_img_src()) . '" alt="' . esc_attr__('Product image', 'woocommerce') . '" height="' . esc_attr($image_size[1]) . '" width="' . esc_attr($image_size[0]) . '" style="vertical-align:middle; margin-' . (is_rtl() ? 'left' : 'right') . ': 10px;" /></div>', $item);
}
// Product name
echo apply_filters('woocommerce_order_item_name', $item->get_name(), $item, false);
// SKU
if ($show_sku && is_object($product) && $product->get_sku()) {
echo ' (#' . $product->get_sku() . ')';
}
// allow other plugins to add additional product information here
do_action('woocommerce_order_item_meta_start', $item_id, $item, $order, $plain_text);
wc_display_item_meta($item);
if ($show_download_links) {
wc_display_item_downloads($item);
}
// allow other plugins to add additional product information here
do_action('woocommerce_order_item_meta_end', $item_id, $item, $order, $plain_text);
?></td>
<td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo apply_filters('woocommerce_email_order_item_quantity', $item->get_quantity(), $item); ?></td>
<td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo $order->get_formatted_line_subtotal($item); ?></td>
</tr>
<?php
}
}
}
else {
echo wc_get_email_order_items($order, array(
'show_sku' => $sent_to_admin,
'show_image' => false,
'image_size' => array(32, 32),
'plain_text' => $plain_text,
'sent_to_admin' => $sent_to_admin,
));
}
,如果您有任何的任何答案或建议,也如果有任何更好的方法来做到这一点,我所有的耳朵,我会非常感激。
问候,
你好! 是的,我遇到了和你一样的问题,并且将其作为我的答案进行了包括,问题就消失了,从那时起我一直没有任何问题。甚至还添加了一些电子邮件课程。 :) – Magnetize