我正在使用与WC供应商和WC预订插件的Woo商业。我想把预订通知寄给供应商。目前,它向客户和管理员发送通知,当管理员将产品状态更改为“处理和完成”时,就会向供应商发送通知。但是,我想发送供应商通知和管理通知。
我试过这个钩子:
add_action( 'woocommerce_new_booking', 'new_order_email_to_vendor', 10, 4 );
function new_order_email_to_vendor( $order ){
$emails = WC()->mailer()->get_emails();
if ( ! empty( $emails ) ) {
$emails['WC_Product_Vendors_Order_Email_To_Vendor']->trigger( $order );
}
}但它会抛出一个错误:
Fatal error: Call to a member function get_date_created() on boolean in /wp-content/plugins/woocommerce-product-vendors/includes/emails/class-wc-product-vendors-order-email-to-vendor.php on line 56因此,现在我正试图将供应商的电子邮件与客户和管理员的电子邮件直接挂在这个行的中。
$this->recipient = $this->get_option( 'recipient', get_option( 'admin_email' ), 'WILL ADD VENDOR EMAIL HERE' );在文件中
wp-content/plugins/woocommerce-bookings/includes/emails/class-wc-email-new-booking.php在这个阶段,我有可预订的产品id,我试图使用产品id来提取供应商的信息,但是我没有找到任何信息。
我试过
get_post()get_post_meta()get_post_meta_by_id()的问题是:如何使用产品id获取供应商信息(特别是电子邮件)?
发布于 2017-12-03 21:55:10
我没有,我从来没有使用WC供应商插件,因为这是一个非官方的商业插件(不是自动制作)。
要获得供应商ID (搜索了一点之后),您可以这样从产品ID获得它:
$vendor_id = get_post_field( 'post_author', $product_id );现在您可以通过以下方式获得供应商的电子邮件:
$vendor_id = get_post_field( 'post_author', $product_id );
$vendor = get_userdata( $vendor_id );
$email = $vendor->user_email;可能是个不错的转机:
您可以使用专用过滤器钩子woocommerce_email_recipient_{$this->id},其中$this->id是通知类型的ID,用于new_booking电子邮件ID (也用于测试new_order电子邮件ID )。
这将允许您添加其他电子邮件收件人。
在电子邮件通知挂钩中,Order对象几乎总是被定义的。在订单中,您可以拥有许多项(不同的产品、不同的供应商),因此您需要从每个供应商获得供应商ID。
在下面的代码中,我向收件人添加了供应商用于new_booking和new_order电子邮件通知的电子邮件:
add_filter( 'woocommerce_email_recipient_new_booking', 'additional_customer_email_recipient', 10, 2 );
add_filter( 'woocommerce_email_recipient_new_order', 'additional_customer_email_recipient', 10, 2 ); // Optional (testing)
function additional_customer_email_recipient( $recipient, $order ) {
if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;
$additional_recipients = array(); // Initializing…
// Iterating though each order item
foreach( $order->get_items() as $item_id => $line_item ){
// Get the vendor ID
$vendor_id = get_post_field( 'post_author', $line_item->get_product_id());
$vendor = get_userdata( $vendor_id );
$email = $vendor->user_email;
// Avoiding duplicates (if many items with many emails)
// or an existing email in the recipient
if( ! in_array( $email, $additional_recipients ) && strpos( $recipient, $email ) === false )
$additional_recipients[] = $email;
}
// Convert the array in a coma separated string
$additional_recipients = implode( ',', $additional_recipients);
// If an additional recipient exist, we add it
if( count($additional_recipients) > 0 )
$recipient .= ','.$additional_recipients;
return $recipient;
}代码在您的活动子主题(或主题)的function.php文件中,或者在任何插件文件中。
这应该是没有错误的。
https://stackoverflow.com/questions/47604737
复制相似问题