Vorhin habe ich eine Frage zu einem Problem, ich musste verschiedene E-Mails senden je nachdem, welchen Speicher (benutzerdefinierte Feld) die bestellten Produkte gehört. Wenn also nur ein zu Storage1 gehörendes Produkt bestellt wurde, sollte nur Email1 gesendet werden. Wenn ein Produkt, das zu Storage1 gehört, und ein Produkt, das zu Storage2 gehört, bestellt wird, wird email1 gesendet, das Produkt1 enthält, und email2 enthält Produkt2. Link zur ursprünglichen Frage: Custom order emails depending on product meta dataWoocommerce - benutzerdefinierte E-Mail-Klassen erstellt doppelte E-Mails
Das alles funktioniert jetzt, aber aus irgendeinem Grund bekomme ich doppelte E-Mails. Wenn ich ein Produkt von Storage1 bestelle, bekomme ich TWO Email1 in meinen Posteingang ... Egal ob ich 5, 10 oder 20 Produkte bestelle, ich bekomme nur EINE zusätzliche Email, aber das reicht.
Also würde ich gerne sehen, ob jemand die gleiche Sache erfahren hat, und wie sie es behoben haben?
Ich werde den Code hier zur Verdeutlichung wieder hinzufügen.
Ich kopierte die class-wc-new-order
und erstellte zwei neue Klassen genau das gleiche wie das Original. Ich habe ID- und Klassennamen in Speicher 1 bzw. Speicher 2 geändert.
lade ich die Klassen durch folgende Maßnahmen:
//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;
}
ich bearbeitet dann the trigger()
-function in beiden E-Mail-Klassen. Beachten Sie, dass ich mit den Trigger-Aktionen nichts geändert habe, außer Tests, aber ich erhalte jedes Mal doppelte E-Mails, unabhängig davon, welche Trigger-Aktionen aktiv sind. Wenn ich alle Trigger-Aktionen deaktiviere, bekomme ich natürlich keine E-Mails.
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;
}
}
Um Storage2 Produkte von Email1 zum Ausfiltern hatte ich email-order-details.php
außer Kraft zu setzen. Dieser Code wird in der Vorlage knapp unter <tbody>
eingegeben, und ich nahm den Code aus der order-email-items.php
, die verwendet wird, um die Produkte standardmäßig anzuzeigen.
Edited E-Mail-order-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,
));
}
Ich wäre sehr dankbar, wenn jemand von euch keine Antworten oder Anregungen hat, auch wenn es keine besseren Möglichkeiten, dies zu tun, bin ich ganz Ohr.
Grüße,
Hallo zusammen! Ja, ich hatte das gleiche Problem wie du, und änderte es, um wie meine Antwort aufgenommen zu werden, das Problem ging weg und ich hatte keine Probleme seitdem. Sogar ein paar E-Mail-Klassen hinzugefügt. :) – Magnetize