Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 订单自定义字段未显示在WooCommerce电子邮件通知上_Php_Wordpress_Woocommerce_Checkout_Custom Fields - Fatal编程技术网

Php 订单自定义字段未显示在WooCommerce电子邮件通知上

Php 订单自定义字段未显示在WooCommerce电子邮件通知上,php,wordpress,woocommerce,checkout,custom-fields,Php,Wordpress,Woocommerce,Checkout,Custom Fields,我编写了一个小插件,在结帐页面上添加了几个自定义字段。这些字段与B2B买家相关,因此他们可以输入公司名称、许可证号码和地址 一切都很好,除了值没有显示在订单电子邮件中,最重要的是,订单完成的电子邮件 这是我遇到麻烦的代码部分 add_filter('woocommerce_email_order_meta_fields', 'mx_woocommerce_email_order_meta_fields'); function mx_woocommerce_email_order_meta_fi

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

一切都很好,除了值没有显示在订单电子邮件中,最重要的是,订单完成的电子邮件

这是我遇到麻烦的代码部分

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;
    }
}


请注意,
r1\u checkbox
只是一个复选框,用于切换其下的3个字段。

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

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

  • woocommerce\u email\u order\u meta\u key
    by
    woocommerce\u checkout\u create\u order
替换为一个非常合适的挂钩:

  • woocommerce\u checkout\u update\u order\u meta
    by
    woocommerce\u email\u order\u meta\u字段
/**
*让我们将新字段添加到签出
*/
函数mx_自定义_签出_字段($checkout){
回音'.''。''('Pravne osobe')。

Trebate li R1 račun?

; woocommerce\u表单\u字段('r1\u复选框',数组( '键入'=>'复选框', 'class'=>array('r1 checkbox form row-wide'), “label'=>”(“Da”), ),$checkout->get_值('r1_复选框'); woocommerce\u form\u字段('r1\u ime\u tvrtke',数组( '类型'=>'文本', 'class'=>数组('r1文本格式行宽'), “label'=>”(“Ime-tvrtke”), “占位符”=>ux('Upišite ime tvrtke','placeholder','woocommerce'), ),$checkout->get_value('r1_ime_tvrtke'); woocommerce_form_字段('r1_adresa_tvrtke',数组( '类型'=>'文本', 'class'=>数组('r1文本格式行宽'), “label”=>(“Adresa tvrtke”), “占位符”=>ux('Upišite adresu tvrtke','placeholder','woocommerce'), ),$checkout->get_value('r1_adresa_tvrtke'); woocommerce_表单_字段('r1_oib_tvrtke',数组( '类型'=>'文本', 'class'=>数组('r1文本格式行宽'), “标签”=>(“OIB tvrtke”), “占位符”=>ux('Upišite OIB tvrtke','placeholder','woocommerce'), ),$checkout->get_value('r1_oib_tvrtke'); 回声'; } 添加\过滤器('woocommerce\在\结帐\账单\表单之后,'mx\自定义\结帐\字段',10,1); /** *让我们节约 **/ 函数mx_oib_签出_字段_创建_订单($order,$data){ //检查$\u POST是否有我们的自定义字段,并相应地更新此订单的meta if(设置($_POST['r1\u checkbox'])和&!空($_POST['r1\u checkbox'])){ $order->update_meta_数据('r1_checkbox',清理_text_字段($_POST['r1_checkbox']); } 如果(设置($_POST['r1\u ime\u tvrtke'])和&!空($_POST['r1\u ime\u tvrtke'])){ $order->update_meta_data('r1_ime_tvrtke',sanitize_text_字段($_POST['r1_ime_tvrtke')); } 如果(设置($_POST['r1\u adresa\u tvrtke'])和&!空($_POST['r1\u adresa\u tvrtke'])){ $order->update_meta_data('r1_adresa_tvrtke',sanitize_text_字段($_POST['r1_adresa_tvrtke')); } 如果(设置($_POST['r1_oib_tvrtke'])和&!空($_POST['r1_oib_tvrtke'])){ $order->update_meta_data('r1_oib_tvrtke',sanitize_text_字段($_POST['r1_oib_tvrtke')); } } 添加操作('woocommerce\u checkout\u create\u order'、'mx\u oib\u checkout\u field\u create\u order',10,2); /** *让我们在账单地址后的订单编辑页面上显示字段值 */ 功能mx_oib_签出_字段_显示_管理_订单_元($order){ $r1\u checkbox=$order->get\u meta('r1\u checkbox'); 如果($r1\u复选框){ 回音“.uur1(“račun”)”; 回显“”。(Ime-tvrtke'):”。$order->get-meta(“r1-Ime-tvrtke”)。

; 回音“”。(Adresa tvrke'):“$order->get_meta('r1_Adresa_tvrtke')。

”; 回显“”。(OIB电视节目”):“$order->get_meta('r1_OIB电视节目”)。

”; } } 添加操作('woocommerce\u admin\u order\u data\u after\u billing\u address','mx\u oib\u checkout\u field\u display\u admin\u order\u meta',10,1); /** *让我们在订单详细信息页面上显示字段值 */ 函数mx\u oib\u字段\u显示\u客户订单\u元($order){ $r1\u checkbox=$order->get\u meta('r1\u checkbox'); 如果($r1\u复选框){ 回音“.uur1(“račun”)”; 回显“”。(Ime-tvrtke'):”。$order->get-meta(“r1-Ime-tvrtke”)。

; 回音“”。(Adresa tvrke'):“$order->get_meta('r1_Adresa_tvrtke')。

”; 回显“”。(OIB电视节目”):“$order->get_meta('r1_OIB电视节目”)。

”; } } 添加操作('WOOMerce\u order\u details\u在订单表之后,'mx\u oib\u字段\u display\u cust\u order\u meta',10,1); /** *让我们为订购电子邮件添加新字段 **/ 函数mx_oib_checkout_field_meta_fields($fields,$sent_to_admin,$order){ 如果(!$order->get\u meta('r1\u复选框')) 返回$fields; 回音“.uuuuuuuuuuuur1 račun”,“woocommerce”); $fields[]=数组( 'label'=>\('Ime-tvrtke','woocommerce'), 'value'=>$order->get\u meta('r1\u ime\u tvrtke') ); $fields[]=数组( “标签”=>uuuuuuu('Adresa tvrke','woocommerce'), 'value'=>$order->get\u meta('r1\u adresa\u tvrtke') ); $fields[]=数组( 'label'=>uuuu('OIB tvrtke','woocommerce'), 'value'=>$order->get\u meta('r1\u oib\u tvrtke') ); 返回$fields; } 添加过滤器(“woocommerce\u email\u order\u meta\u fields”、“mx\u oib\u checkout\u field\u meta\u fields”,20,3); /** *让我们在订单管理中添加R1列 **/ 函数mx_r1_顺序_列($columns){ /* $offset=9; $updated_columns=数组_切片($columns,0,$offset,true)+ 数组('r1_checkbox'=>esc_html_('r1 račun','woocommerce'))+ 数组_切片($columns,$offset,NULL,true); */ $columns['r1\u复选框']=__(
/**
 * 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 '-';
    }
}
add_filter( 'woocommerce_email_order_meta_fields', 'filter_email_order_meta_fields_callback', 10, 3 );
function filter_email_order_meta_fields_callback( $fields, $send_to_admin, $order ) {
    if ( $order->get_meta('R1 račun') ) {
        echo '<h2>R1 račun za kupca</h2>';

        // Defined array of meta keys (labels)
        $meta_keys = ['Ime tvrtke', 'Adresa tvrtke', 'OIB tvrtke'];

        // Loop though meta keys array to set the fields
        foreach( $meta_keys as $meta_key ){
            if( $meta_value = $order->get_meta($meta_key) ){
                $fields[] = array(
                    'label' => $meta_key,
                    'value' => $meta_value,
                );
            }
        }
    }
    return $fields;
}
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;
    }
}