• <bdo id='FOPTi'></bdo><ul id='FOPTi'></ul>

      <i id='FOPTi'><tr id='FOPTi'><dt id='FOPTi'><q id='FOPTi'><span id='FOPTi'><b id='FOPTi'><form id='FOPTi'><ins id='FOPTi'></ins><ul id='FOPTi'></ul><sub id='FOPTi'></sub></form><legend id='FOPTi'></legend><bdo id='FOPTi'><pre id='FOPTi'><center id='FOPTi'></center></pre></bdo></b><th id='FOPTi'></th></span></q></dt></tr></i><div id='FOPTi'><tfoot id='FOPTi'></tfoot><dl id='FOPTi'><fieldset id='FOPTi'></fieldset></dl></div>

      <small id='FOPTi'></small><noframes id='FOPTi'>

      <legend id='FOPTi'><style id='FOPTi'><dir id='FOPTi'><q id='FOPTi'></q></dir></style></legend>
    1. <tfoot id='FOPTi'></tfoot>

    2. 根据产品属性添加自定义 woocommerce 电子邮件

      时间:2024-04-13
    3. <small id='tKnZF'></small><noframes id='tKnZF'>

        <legend id='tKnZF'><style id='tKnZF'><dir id='tKnZF'><q id='tKnZF'></q></dir></style></legend>

          <i id='tKnZF'><tr id='tKnZF'><dt id='tKnZF'><q id='tKnZF'><span id='tKnZF'><b id='tKnZF'><form id='tKnZF'><ins id='tKnZF'></ins><ul id='tKnZF'></ul><sub id='tKnZF'></sub></form><legend id='tKnZF'></legend><bdo id='tKnZF'><pre id='tKnZF'><center id='tKnZF'></center></pre></bdo></b><th id='tKnZF'></th></span></q></dt></tr></i><div id='tKnZF'><tfoot id='tKnZF'></tfoot><dl id='tKnZF'><fieldset id='tKnZF'></fieldset></dl></div>
            <tbody id='tKnZF'></tbody>

              <bdo id='tKnZF'></bdo><ul id='tKnZF'></ul>

              • <tfoot id='tKnZF'></tfoot>
                本文介绍了根据产品属性添加自定义 woocommerce 电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我已尝试调整 https://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/

                我的意图是,如果客户选择具有特定属性的产品(它是可变产品),则在客户下新订单时会发送一封自定义电子邮件(必须发送它正在等待或处理中).

                My intention is that if customer choose a product (it is a variable product) that has a specific attribute, a custom email is sent when the customer makes a new order (it has to be sent either it is pending or processing).

                我的属性 slug 是csr-dates".自定义插件由两个文件组成(参见上面的链接):woocommerce-csr-order-email.php 和(存储在includes"文件夹中)class-wc-csr-order-email.php

                My atribute slug is "csr-dates". The custom plugin is composed (see the link above) by two files: woocommerce-csr-order-email.php and (stored in "includes" folder) class-wc-csr-order-email.php

                我猜问题出在类文件中,我在这里报告:

                I guess that the problem is in the class file, which I report here:

                <?php
                
                if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
                
                /**
                 * A custom Order WooCommerce Email class
                 *
                 * @since 0.1
                 * @extends WC_Email
                 */
                class WC_CSR_Order_Email extends WC_Email {
                
                
                    /**
                     * Set email defaults
                     *
                     * @since 0.1
                     */
                    public function __construct() {
                
                        // set ID, this simply needs to be a unique name
                        $this->id = 'customer_csr_order';
                        $this->customer_email   = true;
                        // this is the title in WooCommerce Email settings
                        $this->title = 'CSR Cruise Order';
                
                        // this is the description in WooCommerce email settings
                        $this->description = 'CSR Cruise Order Notification emails are sent when a customer places an order for a CSR cruise';
                
                        // these are the default heading and subject lines that can be overridden using the settings
                        $this->heading = 'CSR Cruise Order';
                        $this->subject = 'CSR Cruise Order';
                
                        // these define the locations of the templates that this email should use, we'll just use the new order template since this email is similar
                        $this->template_html  = 'emails/customer-processing-order-csr.php'; //qui posso duplicare il template e farne uno ad hoc per questo tipo di mail con i file attached
                        $this->template_plain = 'emails/plain/customer-processing-order.php';
                
                        // Trigger on new paid orders
                        add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $this, 'trigger' ) );
                        add_action( 'woocommerce_order_status_failed_to_processing_notification',  array( $this, 'trigger' ) );
                        add_action( 'woocommerce_order_status_pending_to_on-hold_notification', array( $this, 'trigger' ) );
                        add_action( 'woocommerce_order_status_failed_to_on-hold_notification', array( $this, 'trigger' ) );
                        // Call parent constructor to load any other defaults not explicity defined here
                        parent::__construct();
                
                
                        // if none was entered, just use the WP admin email as a fallback
                        if ( ! $this->recipient )
                            $this->recipient = get_option( 'admin_email' );
                    }
                
                
                    /**
                     * Determine if the email should actually be sent and setup email merge variables
                     *
                     * @since 0.1
                     * @param int $order_id
                     */
                    public function trigger( $order_id ) {
                
                        // bail if no order ID is present
                        if ( ! $order_id )
                            return;
                
                          $order = new WC_Order( $order_id );
                
                          //step 1) find first the product_id
                          $items = $order->get_items();
                          foreach ( $items as $item ) {
                              $product_id = $item['product_id'];
                          }
                                //set 2) from the product_id get the product attribute
                                $product = new WC_Product( $product_id );  // create an object of WC_Product class
                
                                $patt = $product->get_attribute();  // call get_attribute method
                
                            //step 3) condition valid to send the email (if the attributes is csr-dates)
                            if ( $patt == 'pa_csr-dates'  ) 
                            {
                                //send the email
                                // setup order object
                                $this->object = new WC_Order( $order_id );
                                $this->recipient    = $this->object->billing_email;
                
                                // replace variables in the subject/headings
                                $this->find[] = '{order_date}';
                                $this->replace[] = date_i18n( woocommerce_date_format(), strtotime( $this->object->order_date ) );
                
                                $this->find[] = '{order_number}';
                                $this->replace[] = $this->object->get_order_number();
                
                                if ( ! $this->is_enabled() || ! $this->get_recipient() )
                                    return;
                
                                // woohoo, send the email!
                                $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
                
                            }
                
                            else
                            {
                                return; //do nothing if is not csr-dates attribute
                            }
                    }
                
                
                    /**
                     * get_content_html function.
                     *
                     * @since 0.1
                     * @return string
                     */
                    public function get_content_html() {
                        ob_start();
                        woocommerce_get_template( $this->template_html, array(
                            'order'         => $this->object,
                            'email_heading' => $this->get_heading(),
                            'sent_to_admin' => false,
                            'plain_text'    => false,
                            'email'         => $this
                        ) );
                        return ob_get_clean();
                    }
                
                
                    /**
                     * get_content_plain function.
                     *
                     * @since 0.1
                     * @return string
                     */
                    public function get_content_plain() {
                        ob_start();
                        woocommerce_get_template( $this->template_plain, array(
                            'order'         => $this->object,
                            'email_heading' => $this->get_heading(),
                            'sent_to_admin' => false,
                            'plain_text'    => true,
                            'email'         => $this
                        ) );
                        return ob_get_clean();
                    }
                
                
                    /**
                     * Initialize Settings Form Fields
                     *
                     * @since 2.0
                     */
                    public function init_form_fields() {
                
                        $this->form_fields = array(
                            'enabled'    => array(
                                'title'   => 'Enable/Disable',
                                'type'    => 'checkbox',
                                'label'   => 'Enable this email notification',
                                'default' => 'yes'
                            ),
                            'subject'    => array(
                                'title'       => 'Subject',
                                'type'        => 'text',
                                'description' => sprintf( 'This controls the email subject line. Leave blank to use the default subject: <code>%s</code>.', $this->subject ),
                                'placeholder' => '',
                                'default'     => ''
                            ),
                            'heading'    => array(
                                'title'       => 'Email Heading',
                                'type'        => 'text',
                                'description' => sprintf( __( 'This controls the main heading contained within the email notification. Leave blank to use the default heading: <code>%s</code>.' ), $this->heading ),
                                'placeholder' => '',
                                'default'     => ''
                            ),
                            'email_type' => array(
                                'title'       => 'Email type',
                                'type'        => 'select',
                                'description' => 'Choose which format of email to send.',
                                'default'     => 'html',
                                'class'       => 'email_type',
                                'options'     => array(
                                    'plain'     => __( 'Plain text', 'woocommerce' ),
                                    'html'      => __( 'HTML', 'woocommerce' ),
                                    'multipart' => __( 'Multipart', 'woocommerce' ),
                                )
                            )
                        );
                    }
                
                
                } // end WC_CSR_Order_Email class
                

                我想我为获取属性(步骤 1-2)和/或发送电子邮件的条件(步骤 3)而编写的代码有问题.

                I imagine that something is wrong in the code I wrote to get the attribute (step 1-2) and/or the condition to send the email (step 3).

                有人可以帮我解决这个问题吗?谢谢

                Could somebody help me in solve this problem? Thank you

                推荐答案

                你应该尝试使用 get_attributes 而不是使用 get_attribute() 函数() 这样:

                Instead of using get_attribute() function you should try to use get_attributes() this way:

                //set 2) from the product_id get the product attribute
                $product = new WC_Product( $product_id );  // create an object of WC_Product class
                
                $patt = $product->get_attributes();  // call get_attributes method
                
                //step 3) condition valid to send the email (if the attributes is csr-dates)
                if ( array_key_exists('pa_csr-dates', $patt) ) 
                {
                

                试试看,应该可以的……

                Try it, this should work…

                这篇关于根据产品属性添加自定义 woocommerce 电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:在 Woocommerce 3 中获取产品属性 下一篇:将操作按钮添加到在新窗口中打开的 Woocommerce 我的帐户订单

                相关文章

                1. <legend id='mrbxn'><style id='mrbxn'><dir id='mrbxn'><q id='mrbxn'></q></dir></style></legend>
                  • <bdo id='mrbxn'></bdo><ul id='mrbxn'></ul>
                  <i id='mrbxn'><tr id='mrbxn'><dt id='mrbxn'><q id='mrbxn'><span id='mrbxn'><b id='mrbxn'><form id='mrbxn'><ins id='mrbxn'></ins><ul id='mrbxn'></ul><sub id='mrbxn'></sub></form><legend id='mrbxn'></legend><bdo id='mrbxn'><pre id='mrbxn'><center id='mrbxn'></center></pre></bdo></b><th id='mrbxn'></th></span></q></dt></tr></i><div id='mrbxn'><tfoot id='mrbxn'></tfoot><dl id='mrbxn'><fieldset id='mrbxn'></fieldset></dl></div>

                    <small id='mrbxn'></small><noframes id='mrbxn'>

                    <tfoot id='mrbxn'></tfoot>