向 WooCommerce 管理单个订单添加可编辑的计费自定义字段

问题描述 投票:0回答:1

我找到了一种方法,可以将订单详细信息上的付款日期手动添加到 WooCommerce 后台。 我在帐单地址中创建了一个字段,我找到了日期选择器的方法。 一切正常:我可以编辑账单字段并打开日期选择器。

我的自定义代码:

// Edit Order details to add payment date
add_action( 'woocommerce_admin_order_data_after_billing_address', 'misha_editable_order_meta_billing' );
function misha_editable_order_meta_billing( $order ){
    $billingdate = $order->get_meta( 'billingdate' );
    ?>
        <div class="address">
            <p<?php if( empty( $billingdate ) ) { echo ' class="none_set"'; } ?>>
                <strong>Date deadline:</strong>
                <?php echo ! empty( $billingdate ) ? $billingdate : 'Anytime.' ?>
            </p>
        </div>
        <div class="edit_address">
            <?php
                woocommerce_wp_text_input( array(
                    'id' => 'paymentdate',
                    'label' => 'Date deadline',
                    'wrapper_class' => 'form-field-wide',
                    'class' => 'date-picker',
                    'style' => 'width:100%',
                    'value' => $billingdate,
                    'description' => 'Payment date.'
                ) );
            ?>
        </div>
    <?php
}

add_action( 'woocommerce_process_shop_order_meta', 'misha_save_general_details' );
function misha_save_general_details( $order_id ){
    update_post_meta( $order_id, 'billingdate', wc_clean( $_POST[ 'billingdate' ] ) );
}

我可以编辑字段,但是当我单击“更新”按钮时无法保存字段值

有人可以告诉我出了什么问题吗?如何保存该字段值?

php woocommerce backend custom-fields orders
1个回答
0
投票

我已经完全重新审视了你的代码......

  • 首先,我已将您的“账单付款”元键重命名为 WooCommerce 账单元键约定。
  • 此外,由于 WooCommerce 正在逐步迁移到自定义表格,我更改了您保存字段的方式。

代码:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'add_admin_order_editable_billing_date' );
function add_admin_order_editable_billing_date( $order ){
    $billing_date = $order->get_meta( '_billing_date' );

    printf('<div class="address"><p%s><strong>%s:</strong> %s</p></div>
        <div class="edit_address">', 
        !$billing_date ? ' class="none_set"' : '',
        __('Date deadline', 'woocommerce'),
        $billing_date ? $billing_date : __('Anytime.', 'woocommerce') 
    );

    woocommerce_wp_text_input( array(
        'id'            => '_billing_date',
        'label'         => 'Date deadline (payment date)',
        'wrapper_class' => 'form-field-wide',
        'class'         => 'date-picker',
        'style'         => 'width:100%',
        'value'         => $billing_date,
    ) );

    echo '</div>';
}

add_action( 'woocommerce_process_shop_order_meta', 'save_admin_order_billing_date' );
function save_admin_order_billing_date( $order_id ){
    $order = wc_get_order( $order_id );
    $order->update_meta_data( '_billing_date', wc_clean( wp_unslash( $_POST[ '_billing_date' ] ) ) );
    $order->save();
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.