当前位置: 首页 > 知识库问答 >
问题:

WooCommerce管理编辑订单页面常规部分中的自定义可编辑字段

罗心思
2023-03-14

在Woocommerce中,下面的代码检索特定的自定义订单项目元数据,并在“管理编辑订单”页面的“常规”区域下添加一个可编辑的自定义字段:

function editable_order_meta_general( $order_id ){ 
    $order = wc_get_order( $order_id );

    // Loop through order items
    foreach( $order->get_items() as $item_id => $item ){
        $yourref  = $item->get_meta('Your Reference');
    }
    ?>
    <br class="clear" />
    <h4>Customer Details <a href="#" class="edit_address">Edit</a></h4>        

    <div class="address">                               
    <p><strong>Customer Reference:</strong> <?php echo $yourref ?></p>    
    </div>
    <div class="edit_address"><?php 

    woocommerce_wp_text_input( array(
        'id' => 'Your Reference',
        'label' => 'Customer Ref:',
        'value' => $yourref,
        'wrapper_class' => 'form-field-wide'
    ) );

    ?></div>
}
add_action( 'woocommerce_admin_order_data_after_order_details', 'editable_order_meta_general' );

现在,我试图用下面的代码保存自定义的可编辑字段值,但一旦我点击update,它就不会保存任何内容。

function save_general_detail_metas( $ord_id ){
    update_post_meta( $ord_id, 'Your Reference', wc_clean( $_POST[ 'Your Reference' ] ) );
    // wc_clean() and wc_sanitize_textarea() are WooCommerce sanitization functions
}
add_action( 'woocommerce_process_shop_order_meta', 'save_general_detail_metas' );

我做错了什么?如何保存此自定义字段值?

任何帮助都将不胜感激。

共有1个答案

单于善
2023-03-14

您的代码中有一些错误。请尝试以下操作:

// 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', 12, 1 );
function editable_order_custom_field( $order ){
    // Loop through order items
    foreach( $order->get_items() as $item_id => $item ){
        // Get "customer reference" from order item meta data
        if( $item->get_meta('Your Reference') ){
            // The "customer reference"
            $item_value = $item->get_meta('Your Reference');

            // We output a hidden field with the Item ID (to be able to update this order item meta data later)
            echo '<input type="hidden" name="item_id_ref" value="' . $item_id . '">';

            break; // We stop the loop
        }
    }

    // Get "customer reference" from meta data (not item meta data)
    $updated_value = $order->get_meta('_customer_ref');

    // Replace "customer reference" value by the meta data if it exist
    $value = $updated_value ? $updated_value : ( isset($item_value) ? $item_value : '');

    // Display the custom editable field
    woocommerce_wp_text_input( array(
        'id'            => 'customer_ref',
        'label'         => __("Customer Reference:", "woocommerce"),
        'value'         => $value,
        'wrapper_class' => 'form-field-wide',
    ) );
}

// 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[ 'customer_ref' ] ) ){
        // Save "customer reference" as order meta data
        update_post_meta( $post_id, '_customer_ref', sanitize_text_field( $_POST[ 'customer_ref' ] ) );

        // Update the existing "customer reference" item meta data
        if( isset( $_POST[ 'item_id_ref' ] ) )
            wc_update_order_item_meta( $_POST[ 'item_id_ref' ], 'Your Reference', $_POST[ 'customer_ref' ] );
    }
}

代码放在function.php活动子主题(或主题)的文件中。

 类似资料:
  • 基于“在购物车和订单项名称下显示伍兹商业产品自定义字段”回答我以前的一个问题,代码在产品编辑页面上显示自定义字段。当填写这些字段时,数据将显示在产品页面上。 下面是代码: 如何在“管理”面板的“编辑订单”页面上显示自定义字段?它应该在产品名称后显示这些字段。 更新 据我所知,woocommerce\u checkout\u create\u order\u line\u item对此负责。但我无法

  • 我正在尝试从一个简单的wooCommerce商店的订单详细信息中删除“postcustom”元框。div#postcustom按顺序显示--- 我(目前)已将其连接到: 我也尝试过将“dashboard”和“post”作为$context,但都没有用。 我也尝试过用钩子删除meta框、admin init和其他一些。 我工作在一个子主题functions.php并使用默认的ooCommerce主题

  • 我想将woocommerce结帐页面的“订单注释”文本字段更改为“特殊注释”。但是我找不到这个文件的确切位置。在我的localhost文件夹中可以在哪里找到此文件? 这是页面的截图:

  • 我想在页面中添加一个自定义按钮,管理员可以在其中手动创建新订单(管理员订单页面)。 管理员- 在我添加产品和点击编辑按钮后,我可以在添加元按钮附近显示自定义按钮吗?我找不到可以使用的钩子。 我已经添加了上面的代码。我得到了结果,但按钮显示后不久,我添加的产品。我只希望按钮显示时,我点击编辑按钮。 #更新 当我添加以下代码时,它起了作用。这条路对吗?由于设置了同一字段中的按钮

  • 我的WooCommerce Wordpress网站前端有一个功能,可以为正确回答一个简单问题的人生成票号,而对于回答不正确的人则不生成票号。它将用户的答案保存在订单项目元数据中,我拥有它,因此答案将显示在订单中每个项目的后端可编辑文本输入字段中,因为每个项目都有不同的答案。 我需要这样做,如果管理员将其更改为正确的字段并更新帖子,它将保存新的数据并运行分配票号的功能。我使用的钩子是正确的,因为当我

  • 我在我的WooCommerce产品中添加了一个自定义字段,就像在这个问题/答案中: 在WooCommerce的简短描述之前显示自定义产品字段。 是否可以将此自定义字段添加到产品批量编辑特别页面(可从管理产品列表页面访问)?