如何从Woocommerce订单管理员保存用户元

时间:2018-07-26 13:54:25

标签: php wordpress woocommerce metadata user-data

客户的帐单邮寄地址中有一个名为billing_ean的额外字段。

我正在使用以下代码从管理面板中的Woocommerce单笔订单页面加载,编辑和保存其EAN编号。该代码在加载和编辑字段时效果很好,但是在保存字段(更新订单)时,它根本不会更新其客户信息。

function customer_ean_edit( $customer_id ){ 

    $eannr = get_user_meta( $customer_id->get_customer_id(), 'billing_eannr', true );

    ?>

    <div class="address">
    <p<?php if( !$eannr ) echo ' class="none_set"' ?>>
        <strong>EAN nr.:</strong>
        <?php echo ( $eannr ) ? $eannr : 'Der er ikke angivet et EAN nr.' ?>
    </p>
</div>

    <div class="edit_address"><?php
            woocommerce_wp_text_input( array(
                    'id' => 'billing_eannr',
                    'label' => 'EAN nr.:',
                    'value' => $eannr,
                    'wrapper_class' => 'form-field-wide'
            ) );
    ?></div>        
 <?php }

add_action( 'woocommerce_admin_order_data_after_billing_address', 'customer_ean_edit' );

function customer_ean_save( $customer_id ){
    update_user_meta( $customer_id->get_customer_id(), 'billing_eannr', sanitize_text_field( $_POST['billing_eannr'] ) );
}

add_action( 'personal_options_update', 'customer_ean_save' ); // edit own account admin
add_action( 'edit_user_profile_update', 'customer_ean_save' ); // edit other account admin
add_action( 'woocommerce_save_account_details', 'customer_ean_save' ); // edit WC account

1 个答案:

答案 0 :(得分:1)

请尝试以下操作,在订单编辑页面中显示的字段和值将保存到订单元数据和用户元数据中……

您重新访问的代码:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'customer_ean_edit' );
function customer_ean_edit( $order ){
    $value = get_user_meta( $order->get_customer_id(), 'billing_eannr', true );
    ?>
    <div class="edit-address"><?php
        woocommerce_wp_text_input( array(
            'id' => 'billing_eannr',
            'label' => __('EAN nr.:', 'woocommerce'),
            'placeholder' => '',
            'value' => $value,
            'wrapper_class' => 'form-field-wide'
        ) );
    ?></div><?php
}


add_action('save_post_shop_order', 'customer_ean_save', 50, 3 );
function customer_ean_save( $post_id, $post, $update ) {

    // Checking that is not an autosave
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return $post_id;

    // Check the user’s permissions (for 'shop_manager' and 'administrator' user roles)
    if ( ! current_user_can( 'edit_shop_order', $post_id ) )
        return $post_id;

    if( isset($_POST['billing_eannr']) ) {
        $order = wc_get_order( $post_id );
        // Update order post meta data
        update_post_meta( $post_id, 'billing_eannr', sanitize_text_field( $_POST['billing_eannr'] ) );
        // Update user meta data
        update_user_meta( $order->get_customer_id(), 'billing_eannr', sanitize_text_field( $_POST['billing_eannr'] ) );
    }
}

代码进入活动子主题(或活动主题)的function.php文件中。经过测试并可以正常工作。