订单自定义字段未显示在WooCommerce电子邮件通知中 [英] Order custom fields not displayed on WooCommerce email notifications

查看:57
本文介绍了订单自定义字段未显示在WooCommerce电子邮件通知中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个小插件,在结帐页面上添加了几个自定义字段.这些字段与B2B买家相关,因此他们可以输入公司名称,许可证编号和地址.

I wrote a little plugin that adds a couple of custom fields on checkout page. The fields are related to B2B buyers so they can input Company name, license number and address.

几乎所有内容都可以正常工作,除了未在订购电子邮件中显示值,最重要的是,在订购完成的电子邮件中未显示这些值.

Everything pretty much works fine, except the values are not being displayed in order emails, most importantly, order completed email.

这是我遇到问题的代码部分

Here is the part of code I'm having trouble with

add_filter('woocommerce_email_order_meta_fields', 'mx_woocommerce_email_order_meta_fields');

function mx_woocommerce_email_order_meta_fields( $fields ) {

    if (isset($_POST['r1_checkbox']) && !empty($_POST['r1_checkbox'])) {
        echo '<h2>R1 račun za kupca</h2>';

        $fields[] = 'Ime tvrtke';
        $fields[] = 'Adresa tvrtke';
        $fields[] = 'OIB tvrtke';

        return $fields;
    }
}

无法弄清楚出了什么问题.我还尝试使用 $ keys 而不是 $ fields ,但这没有帮助.

Can't figure out what is wrong. I also tried using $keys instead of $fields but that didn't help.

更新(完整代码):

/**
 * Let's add our new fields to the checkout
 */
add_action( 'woocommerce_after_checkout_billing_form', 'mx_custom_checkout_field' );

function mx_custom_checkout_field( $checkout ) {

    echo '<div id="mx_custom_checkout_field"><h3>' . __( 'Pravne osobe' ) . '</h3><p style="margin: 0 0 5px;">Trebate li R1 račun?</p>';

    woocommerce_form_field( 'r1_checkbox', array(
    'type'  => 'checkbox',
    'class' => array( 'r1-checkbox form-row-wide' ),
    'label' => __( 'Da' ),
    ), $checkout->get_value( 'r1_checkbox' ) );

    woocommerce_form_field( 'r1_ime_tvrtke', array(
   'type'  => 'text',
   'class' => array( 'r1-text form-row-wide' ),
   'label' => __( 'Ime tvrtke' ),
   'placeholder'   => _x('Upišite ime tvrtke', 'placeholder', 'woocommerce'),
   ), $checkout->get_value( 'r1_ime_tvrtke' ) );

    woocommerce_form_field( 'r1_adresa_tvrtke', array(
   'type'  => 'text',
   'class' => array( 'r1-text form-row-wide' ),
   'label' => __( 'Adresa tvrtke' ),
   'placeholder'   => _x('Upišite adresu tvrtke', 'placeholder', 'woocommerce'),
   ), $checkout->get_value( 'r1_adresa_tvrtke' ) );

    woocommerce_form_field( 'r1_oib_tvrtke', array(
  'type'  => 'text',
  'class' => array( 'r1-text form-row-wide' ),
  'label' => __( 'OIB tvrtke' ),
  'placeholder'   => _x('Upišite OIB tvrtke', 'placeholder', 'woocommerce'),
   ), $checkout->get_value( 'r1_oib_tvrtke' ) );

   echo '</div>';

}

/**
 * Let's update the order meta with fields values
 **/
add_action( 'woocommerce_checkout_update_order_meta', 'mx_oib_checkout_field_update_order_meta' );

function mx_oib_checkout_field_update_order_meta( $order_id ) {

   //check if $_POST has our custom fields and accordingly update meta for this order
   if ( $_POST['r1_checkbox'] ) {
   update_post_meta( $order_id, 'R1 račun', esc_attr( $_POST['r1_checkbox'] ) );
   }
   if ( $_POST['r1_ime_tvrtke'] ) {
   update_post_meta( $order_id, 'Ime tvrtke', esc_attr( $_POST['r1_ime_tvrtke'] ) );
   }
   if ( $_POST['r1_adresa_tvrtke'] ) {
   update_post_meta( $order_id, 'Adresa tvrtke', esc_attr( $_POST['r1_adresa_tvrtke'] ) );
   }
   if ( $_POST['r1_oib_tvrtke'] ) {
   update_post_meta( $order_id, 'OIB tvrtke', esc_attr( $_POST['r1_oib_tvrtke'] ) );
   }
}
/**
 * Let's display fields values on the Order edit page
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'mx_oib_checkout_field_display_admin_order_meta', 10, 1 );

function mx_oib_checkout_field_display_admin_order_meta($order){

    $r1_checkbox = get_post_meta( $order->id, 'R1 račun', true );
    if( !empty( $r1_checkbox ) ) {

    echo '<h4>'.__('R1 račun').'</h4>';
    echo '<p><strong>'.__('Ime tvrtke').':</strong> ' . get_post_meta( $order->id, 'Ime tvrtke', true ) . '</p>';
    echo '<p><strong>'.__('Adresa tvrke').':</strong> ' . get_post_meta( $order->id, 'Adresa tvrtke', true ) . '</p>';
    echo '<p><strong>'.__('OIB tvrtke').':</strong> ' . get_post_meta( $order->id, 'OIB tvrtke', true ) . '</p>';
    }
}
/**
 * Let's display fields values on the Order details page
 */
add_action( 'woocommerce_order_details_after_order_table', 'mx_oib_field_display_cust_order_meta', 10, 1 );

function mx_oib_field_display_cust_order_meta($order){

    $r1_checkbox = get_post_meta( $order->id, 'R1 račun', true );
    if( !empty( $r1_checkbox ) ) {

    echo '<h2>'.__('Podaci za R1 račun').'</h2>';
    echo '<p><strong>'.__('Ime tvrtke').':</strong> ' . get_post_meta( $order->id, 'Ime tvrtke', true ) . '</p>';
    echo '<p><strong>'.__('Adresa tvrke').':</strong> ' . get_post_meta( $order->id, 'Adresa tvrtke', true ) . '</p>';
    echo '<p><strong>'.__('OIB tvrtke').':</strong> ' . get_post_meta( $order->id, 'OIB tvrtke', true ) . '</p>';
    }
}
/**
 * Let's add the new fields to order emails
 **/
add_filter('woocommerce_email_order_meta_keys', 'mx_woocommerce_email_order_meta_keys');

function mx_woocommerce_email_order_meta_keys( $keys ) {

    if ( $_POST['r1_checkbox'] ) {
    echo '<h2>R1 račun za kupca</h2>';

    $keys[] = 'Ime tvrtke';
    $keys[] = 'Adresa tvrtke';
    $keys[] = 'OIB tvrtke';

    return $keys;
    }
}
/**
 * Let's add the R1 column in order administration
 **/

add_filter( 'manage_edit-shop_order_columns', 'mx_r1_order_column', 20 );
function mx_r1_order_column( $columns ) {
    $offset = 9;
    $updated_columns = array_slice( $columns, 0, $offset, true) +
    array( 'r1_checkbox' => esc_html__( 'R1 račun', 'woocommerce' ) ) +
    array_slice($columns, $offset, NULL, true);
    return $updated_columns;
}

// Populate R1 column
add_action( 'manage_shop_order_posts_custom_column', 'mx_r1_order_column_values', 2 );
function mx_r1_order_column_values( $column ) {
    global $post;

    if ( $column == 'r1_checkbox' ) {
        $r1_checkbox = get_post_meta( $post->ID, 'R1 račun', true );
        if ( $r1_checkbox > 0 )
            print ("DA");
        else print '-';
    }
}


请注意, r1_checkbox 只是一个复选框,可切换其下的3个字段.


Note that r1_checkbox is just a checkbox that toggles 3 fields under it.

推荐答案

您的代码到处都有一些小错误,我已经对其进行了修改

Your code has some little mistakes here and there, I've revised it

我还更改了不推荐使用的钩子:

I also changed a deprecated hook:

  • woocommerce_email_order_meta_keys 通过 woocommerce_checkout_create_order

由一个非常合适的钩子代替:

Replaced by a much appropriated hook:

  • woocommerce_checkout_update_order_meta 通过 woocommerce_email_order_meta_fields
/**
 * Let's add our new fields to the checkout
 */
function mx_custom_checkout_field( $checkout ) {

    echo '<div id="mx_custom_checkout_field"><h3>' . __( 'Pravne osobe' ) . '</h3><p style="margin: 0 0 5px;">Trebate li R1 račun?</p>';

    woocommerce_form_field( 'r1_checkbox', array(
        'type'  => 'checkbox',
        'class' => array( 'r1-checkbox form-row-wide' ),
        'label' => __( 'Da' ),
    ), $checkout->get_value( 'r1_checkbox' ) );

    woocommerce_form_field( 'r1_ime_tvrtke', array(
        'type'  => 'text',
        'class' => array( 'r1-text form-row-wide' ),
        'label' => __( 'Ime tvrtke' ),
        'placeholder'   => _x('Upišite ime tvrtke', 'placeholder', 'woocommerce'),
    ), $checkout->get_value( 'r1_ime_tvrtke' ) );

    woocommerce_form_field( 'r1_adresa_tvrtke', array(
        'type'  => 'text',
        'class' => array( 'r1-text form-row-wide' ),
        'label' => __( 'Adresa tvrtke' ),
        'placeholder'   => _x('Upišite adresu tvrtke', 'placeholder', 'woocommerce'),
    ), $checkout->get_value( 'r1_adresa_tvrtke' ) );

    woocommerce_form_field( 'r1_oib_tvrtke', array(
        'type'  => 'text',
        'class' => array( 'r1-text form-row-wide' ),
        'label' => __( 'OIB tvrtke' ),
        'placeholder'   => _x('Upišite OIB tvrtke', 'placeholder', 'woocommerce'),
    ), $checkout->get_value( 'r1_oib_tvrtke' ) );

    echo '</div>';                           
}
add_filter( 'woocommerce_after_checkout_billing_form' , 'mx_custom_checkout_field', 10, 1 );

/**
 * Let's save
 **/
function mx_oib_checkout_field_create_order( $order, $data ) {
    //check if $_POST has our custom fields and accordingly update meta for this order
    if ( isset($_POST['r1_checkbox']) && ! empty($_POST['r1_checkbox']) ) {
        $order->update_meta_data( 'r1_checkbox', sanitize_text_field( $_POST['r1_checkbox'] ) );
    }

    if ( isset($_POST['r1_ime_tvrtke']) && ! empty($_POST['r1_ime_tvrtke']) ) {
        $order->update_meta_data( 'r1_ime_tvrtke', sanitize_text_field( $_POST['r1_ime_tvrtke'] ) );
    } 

    if ( isset($_POST['r1_adresa_tvrtke']) && ! empty($_POST['r1_adresa_tvrtke']) ) {
        $order->update_meta_data( 'r1_adresa_tvrtke', sanitize_text_field( $_POST['r1_adresa_tvrtke'] ) );
    } 

    if ( isset($_POST['r1_oib_tvrtke']) && ! empty($_POST['r1_oib_tvrtke']) ) {
        $order->update_meta_data( 'r1_oib_tvrtke', sanitize_text_field( $_POST['r1_oib_tvrtke'] ) );
    } 
}
add_action( 'woocommerce_checkout_create_order', 'mx_oib_checkout_field_create_order', 10, 2 );

/**
 * Let's display fields values on the Order edit page after billing adress
 */
function mx_oib_checkout_field_display_admin_order_meta( $order ) {
    $r1_checkbox = $order->get_meta('r1_checkbox');

    if( $r1_checkbox ) {
        echo '<h4>'.__('R1 račun').'</h4>';
        echo '<p><strong>'.__('Ime tvrtke').':</strong> ' . $order->get_meta('r1_ime_tvrtke') . '</p>'; 
        echo '<p><strong>'.__('Adresa tvrke').':</strong> ' . $order->get_meta('r1_adresa_tvrtke') . '</p>';        
        echo '<p><strong>'.__('OIB tvrtke').':</strong> ' . $order->get_meta('r1_oib_tvrtke') . '</p>'; 
    }
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'mx_oib_checkout_field_display_admin_order_meta', 10, 1 );

/**
 * Let's display fields values on the Order details page
 */
function mx_oib_field_display_cust_order_meta($order){
    $r1_checkbox = $order->get_meta('r1_checkbox');

    if( $r1_checkbox ) {
        echo '<h4>'.__('R1 račun').'</h4>';
        echo '<p><strong>'.__('Ime tvrtke').':</strong> ' . $order->get_meta('r1_ime_tvrtke') . '</p>'; 
        echo '<p><strong>'.__('Adresa tvrke').':</strong> ' . $order->get_meta('r1_adresa_tvrtke') . '</p>';        
        echo '<p><strong>'.__('OIB tvrtke').':</strong> ' . $order->get_meta('r1_oib_tvrtke') . '</p>'; 
    }
}
add_action( 'woocommerce_order_details_after_order_table', 'mx_oib_field_display_cust_order_meta', 10, 1 );

/**
 * Let's add the new fields to order emails
 **/
function mx_oib_checkout_field_meta_fields( $fields, $sent_to_admin, $order  ) {

    if( ! $order->get_meta( 'r1_checkbox' ) )
        return $fields;

    echo '<h4>'.__( 'R1 račun', 'woocommerce' ).'</h2>';

    $fields[] = array(
        'label' => __( 'Ime tvrtke', 'woocommerce' ),
        'value' => $order->get_meta( 'r1_ime_tvrtke' )
    );

    $fields[] = array(
        'label' => __( 'Adresa tvrke', 'woocommerce' ),
        'value' => $order->get_meta( 'r1_adresa_tvrtke' )
    );

    $fields[] = array(
        'label' => __( 'OIB tvrtke', 'woocommerce' ),
        'value' => $order->get_meta( 'r1_oib_tvrtke' )
    );

    return $fields;
}
add_filter( 'woocommerce_email_order_meta_fields', 'mx_oib_checkout_field_meta_fields', 20, 3 );

/**
 * Let's add the R1 column in order administration
 **/
function mx_r1_order_column( $columns ) {
    /*
    $offset = 9;
    $updated_columns = array_slice( $columns, 0, $offset, true) +
    array( 'r1_checkbox' => esc_html__( 'R1 račun', 'woocommerce' ) ) +
    array_slice($columns, $offset, NULL, true);
    */

    $columns['r1_checkbox'] = __('R1 račun', 'woocommerce' );

    return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'mx_r1_order_column', 10, 1 );

// Populate R1 column
function mx_r1_order_column_values( $column, $post_id ) {
    if ( $column == 'r1_checkbox' ) {
        $r1_checkbox = get_post_meta( $post_id, 'r1_checkbox', true );

        if ( $r1_checkbox ) {
            echo 'DA';
        } else {
            echo '-';
        }
    }
}
add_action( 'manage_shop_order_posts_custom_column', 'mx_r1_order_column_values', 10, 2 );

这篇关于订单自定义字段未显示在WooCommerce电子邮件通知中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆