如何使用 WooCommerc HPOS 系统更新和同步订单元字段?

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

我正在研究一种方法,我们的销售团队可以将订单标记为手动并进行检查。我们正在使用 HPOS 系统。我需要能够在单击更新/发布按钮时更新字段值。这是我所拥有的:

function update_manual_order( $order_id, 'manual_order', $value = '' ) {
    $order = wc_get_order( $order_id );
    $order = get_meta( 'manual_order' );
        if ( empty( $value ) ) {
            $order = update_meta_data( $post_id, $field_name, '0' );
        } else {
            $order = update_meta_data( $post_id, $field_name, '1' );
        }
    $order->update_meta_data( 'manual_order', $manual_order_option );
    //$order->save();
}
add_action( 'woocommerce_process_shop_order_meta', 'update_manual_order', 60 );

该字段当前是一个复选框, false 为 0,true 为 1。至于复选框格式,它在视觉上是一个切换,但以下是几行:

<input type="checkbox" id="toggle" class="checkbox" name="manual_order" value="' . checked( 1, get_option( 'manual_order' ), false ) . '" /> <label for="toggle" class="switcher"></label>

我希望能够使用更新来更新字段并同步当前订单元值。我有什么遗漏的吗?我对新系统不太熟悉,任何帮助将不胜感激!

我尝试使用新的 HPOS 文档让它找到该字段并使用它来添加/更新元字段。当前代码导致严重错误。

php wordpress woocommerce
1个回答
0
投票

这是您正确的输入复选框字段,显示在送货地址之后(用于测试):

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'display_manual_order_checkbox'  );
function display_manual_order_checkbox( $order ){
    $checked = $order->get_meta('manual_order');
    echo '<div>
    <input type="checkbox" id="toggle" class="checkbox" name="manual_order" '. 
    checked($checked, '1', false).' /> <label for="toggle" class="switcher">'.
    __('Is Manual Order?').'</label>
    </div>';
}

这是与 HPOS 兼容的正确代码,用于保存复选框选中状态:

add_action( 'woocommerce_process_shop_order_meta', 'update_manual_order', 60 );
function update_manual_order( $order_id ) {
    $order = wc_get_order( $order_id );
    
    if ( isset($_POST['manual_order']) ) {
        $order->update_meta_data('manual_order', '1');
    } else {
        $order->update_meta_data('manual_order', '0');
    }
    $order->save();
}

代码位于子主题的functions.php 文件中(或插件中)。也经过测试并可与高性能订单存储 (HPOS) 配合使用。

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