首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Woocommerce用产品ID获取供应商信息

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

Stack Overflow用户
提问于 2017-12-02 04:54:34
回答 1查看 11.4K关注 0票数 3

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

试过这个钩子:

代码语言:javascript
复制
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 );
    }

}

但它会抛出一个错误:

代码语言:javascript
复制
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

因此,现在我正试图将供应商的电子邮件与客户和管理员的电子邮件直接挂在这个行的中。

代码语言:javascript
复制
$this->recipient     = $this->get_option( 'recipient', get_option( 'admin_email' ), 'WILL ADD VENDOR EMAIL HERE' );

文件

代码语言:javascript
复制
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获取供应商信息(特别是电子邮件)?

EN

回答 1

Stack Overflow用户

发布于 2017-12-03 21:55:10

我没有,我从来没有使用WC供应商插件,因为这是一个非官方的商业插件(不是自动制作)。

要获得供应商ID (搜索了一点之后),您可以这样从产品ID获得它:

代码语言:javascript
复制
$vendor_id = get_post_field( 'post_author', $product_id );

现在您可以通过以下方式获得供应商的电子邮件:

代码语言:javascript
复制
$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_bookingnew_order电子邮件通知的电子邮件:

代码语言:javascript
复制
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文件中,或者在任何插件文件中。

这应该是没有错误的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47604737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档