Wordpress Woocommerce使用产品ID获取供应商信息

Wordpress Woocommerce使用产品ID获取供应商信息,wordpress,woocommerce,hook-woocommerce,Wordpress,Woocommerce,Hook Woocommerce,我正在使用Woo Commerce与WC供应商和WC预订插件。我想向供应商发送预订通知。目前,它会向客户和管理员发送通知,当管理员将产品状态更改为“处理和完成”时,它会向供应商发送通知。但是,我想在发送管理员通知的同时发送供应商通知 我试过这个钩子: add_action( 'woocommerce_new_booking', 'new_order_email_to_vendor', 10, 4 ); function new_order_email_to_vendor( $order ){

我正在使用Woo Commerce与WC供应商和WC预订插件。我想向供应商发送预订通知。目前,它会向客户和管理员发送通知,当管理员将产品状态更改为“处理和完成”时,它会向供应商发送通知。但是,我想在发送管理员通知的同时发送供应商通知

我试过这个钩子:

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
文件中

$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获取供应商信息,但没有找到任何信息

我试过了:

$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
  • get\u post()
  • get\u post\u meta()
  • get\u post\u meta\u by\u id()

问题是:如何使用产品id获取供应商信息(特别是电子邮件?

我没有,也从来没有使用过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\u email\u recipient{$this->id}
其中
$this->id
是通知类型的id,用于
新预订
电子邮件id(也用于测试
新订单
电子邮件id)

这将允许您添加其他电子邮件收件人

在电子邮件通知钩子中,几乎总是定义订单对象。因为在一个订单中,您可以有许多项目(来自不同供应商的不同产品),所以您需要从每个项目中获取供应商ID

在下面的代码中,我向收件人添加供应商关于
new\u booking
new\u 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文件或任何插件文件中


这应该可以正常工作。

第一个返回电子邮件id,但这是管理员电子邮件,因为产品是由管理员创建的,所以这是一种限制。有没有办法绕过它?第二个方法
中有一个错误致命错误:调用未定义的方法WC\u Booking::get\u items()