首页 > 解决方案 > 在 WooCommerce 管理订单中保存选择选项可编辑字段

问题描述

我受到了我在论坛上找到的 4 个解决方案的启发,但它们并不能完全满足我的需求,我试图对其进行改造。我没有达到如下图所示的预期结果。我是一个初学者和自学成才的人,必须为此而努力。 在此处输入图像描述 我创建了一个名为司机的新用户角色,我希望拥有与客户相同的选择窗口,但只查看司机的名称,以便我可以将每个订单分配给司机。另一方面,一旦我将驱动程序分配给订单,我希望以下元数据出现并记录在订单中。

我尝试转换下面的代码,但它不起作用。预先感谢您的帮助

    add_action( 'woocommerce_checkout_create_order', 'save_custom_checkout_field', 10, 2 ); function save_custom_checkout_field( $order, $data ) {
    $order->update_meta_data( 'driver_compagny', 'unassigned' );
    $order->update_meta_data( 'driver_name', 'unassigned' );
    $order->update_meta_data( 'driver_siren', 'unassigned' );
    $order->update_meta_data( 'driver_vat', 'unassigned' );
}

// Output a custom editable field in backend edit order pages under general section
add_action('woocommerce_admin_order_data_after_order_details', 'editable_order_custom_field', 10, 1 );
function editable_order_custom_field( $order ){
    // Display the custom editable field
    ?>
    <p class="form-field form-field-wide wc-driver-user">
    <label for="driver_user"> Driver : </label>
    <select class="wc-customer-search" name="driver_name" id="driver_name" role="driver" data-placeholder="Unassigned Driver" data-allow_clear="true">
    <option value="" selected="selected"></option>
    </select></p>
    <input type="hidden" name="custom_select_field_nonce" value="<?php echo wp_create_nonce(); ?>">
    <?php
}

// Save the custom editable field value as order meta data and update order item meta data
add_action( 'woocommerce_process_shop_order_meta', 'save_order_custom_field_meta_data', 12, 2 );
function save_order_custom_field_meta_data( $post_id, $post ){
    if( isset( $_POST[ 'driver_compagny' ] ) ){
        update_post_meta( $post_id, 'driver_compagny', sanitize_text_field( $_POST[ 'driver_compagny' ] ) );
    }
    if( isset( $_POST[ 'driver_name' ] ) ){
        update_post_meta( $post_id, 'driver_name', sanitize_text_field( $_POST[ 'driver_name' ] ) );
    }
    if( isset( $_POST[ 'driver_siren' ] ) ){
        update_post_meta( $post_id, 'driver_siren', sanitize_text_field( $_POST[ 'driver_siren' ] ) );
    }
    if( isset( $_POST[ 'driver_vat' ] ) ){
        update_post_meta( $post_id, 'driver_vat', sanitize_text_field( $_POST[ 'driver_vat' ] ) );
    }
}

标签: phpcsswordpresswoocommerce

解决方案


推荐阅读