【问题标题】:Displaying custom checkout billing field on email notifications在电子邮件通知上显示自定义结帐帐单字段
【发布时间】:2023-03-18 19:15:01
【问题描述】:

在 WooCommerce 中,我想在结帐时添加一些自定义字段,这些字段将显示在电子邮件确认的 billing 部分下。 我的自定义字段及其值,显示在结帐表单和后端的订单页面上(WooCommerce -> 订单)。到目前为止,一切都很好。

问题是我收到的电子邮件不包含自定义字段及其值。

代码如下:

    add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    function custom_override_checkout_fields( $fields ) {
        $fields['billing']['billing_field_testing'] = array(
            'label'     => __('TestingField', 'woocommerce'),
            'placeholder'   => _x('TestingField', 'placeholder', 'woocommerce'),
            'required'  => false,
            'class'     => array('form-row-wide'),
            'clear'     => true
             );
        return $fields;
    }

    add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
    function my_custom_checkout_field_display_admin_order_meta($order)
    {
        echo '<p><strong>'.__('TestingField').':</strong> ' . get_post_meta( $order->id, '_billing_field_testing', true ) . '</p>';
    }

请帮忙。

提前致谢

【问题讨论】:

    标签: php wordpress woocommerce checkout email-notifications


    【解决方案1】:

    您需要将 woocommerce/templates/emails/ 下的电子邮件模板自定义到 your-theme/woocommerce/emails/

    你可以覆盖你想要的任何模板,在那里添加自定义字段。

    或者,您也可以使用以下代码中的钩子添加它们:

    add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );
    
    function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
        $fields['meta_key'] = array(
            'label' => __( 'Label' ),
            'value' => get_post_meta( $order->id, 'meta_key', true ),
        );
        return $fields;
    }
    

    【讨论】:

      【解决方案2】:

      更新:要在帐单地址下方的电子邮件通知中显示您的自定义结帐字段,请使用此函数挂钩在 woocommerce_email_customer_details 操作挂钩中,优先级高于 20:

      add_action('woocommerce_email_customer_details','add_custom_checkout_field_to_emails_notifications', 25, 4 );
      function add_custom_checkout_field_to_emails_notifications( $order, $sent_to_admin, $plain_text, $email ) {
      
          $output = '';
          $billing_field_testing = get_post_meta( $order->id, '_billing_field_testing', true );
      
          if ( !empty($billing_field_testing) )
              $output .= '<div><strong>' . __( "Some text:", "woocommerce" ) . '</strong> <span class="text">' . $billing_field_testing . '</span></div>';
      
          echo $output;
      }
      

      代码位于您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。

      此代码已经过测试并且可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 2018-08-31
        • 2015-10-08
        • 1970-01-01
        • 2021-02-01
        • 1970-01-01
        相关资源
        最近更新 更多