【发布时间】:2018-01-07 10:53:32
【问题描述】:
我正在尝试编写一个过滤器来更改 WooCommerce 电子邮件的回复地址,具体取决于订单所针对的“计费城市”。
这适用于 WooCommerce 电子邮件,但似乎不适用于 WooCommerce 高级通知 - 它似乎没有将“$order”传递到标题信息中以执行 IF 语句。
这是一个长镜头,但任何想法都非常感谢。这是我的代码。
function change_headers($order, $object, $headers);
// Get the city
$city = $order->get_billing_city();
// Change Headers
if ($city == 'Manchester') {
$headers = array();
$headers[] = 'Reply-to: Manchester <manchester@city.org>';
return $headers;
} else {
$headers = array();
$headers[] = 'Reply-to: London <london@city.org>';
return $headers;
}
add_filter( 'woocommerce_email_headers', 'change_headers', 10, 3);
这是 WooCommerce 高级通知插件中的代码。
/**
* sends an email through WooCommerce with the correct headers
*/
public function send( $id, $object, $is_plain_text, $to, $subject, $message, $notification ) {
$email = new WC_Email();
if ( $is_plain_text ) {
$message = wordwrap( strip_tags( $message ), 60 );
$email->email_type = 'plain';
} else {
$email->email_type = 'html';
}
$email->id = "advanced_notification_{$notification->notification_id}";
$email->send( $to, $subject, $message, $email->get_headers(), $email->get_attachments() );
}
进度编辑
所以现在基于 Loic 的善意建议,我已经应用了他的代码(如下),但它在启用 WooCommerce 高级通知的情况下引发了这个致命错误。这是因为由于某种原因,'$order' 参数未正确传递给 WooCommerce 高级通知电子邮件的过滤器,因此 $city = $order->get_billing_city();是空的。
Fatal error: Uncaught Error: Call to a member function get_billing_city() on null in /home/benefacto/public_html/dev/wp-content/plugins/bnfo-custom-emails/bnfo-custom-emails.php:130 Stack trace: #0 /home/benefacto/public_html/dev/wp-includes/class-wp-hook.php(298): custom_email_notification_headers('Content-Type: t...', 'advanced_notifi...', NULL) #1 /home/benefacto/public_html/dev/wp-includes/plugin.php(203): WP_Hook->apply_filters('Content-Type: t...', Array) #2 /home/benefacto/public_html/dev/wp-content/plugins/woocommerce/includes/emails/class-wc-email.php(287): apply_filters('woocommerce_ema...', 'Content-Type: t...', 'advanced_notifi...', NULL) #3 /home/benefacto/public_html/dev/wp-content/plugins/woocommerce-advanced-notifications/includes/class-wc-advanced-notifications.php(257): WC_Email->get_headers(NULL) #4 /home/benefacto/public_html/dev/wp-content/plugins/woocommerce-advanced-notifications/includes/class-wc-advanced-notifications.php(319): WC_Advanced_Notifications->send('new_order', Object(WC_Order), '0', 'l in /home/benefacto/public_html/dev/wp-content/plugins/bnfo-custom-emails/bnfo-custom-emails.php on line 130
【问题讨论】:
标签: php wordpress woocommerce email-headers email-notifications