WooCommerce HPOS 的订单保存挂钩用户权限检查

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

在HPOS之前,可以这样检查订单保存钩子:

<?php
use Automattic\WooCommerce\Utilities\OrderUtil;

add_action('save_post', 'my_save_wc_order_other_fields', 20, 1);
function my_save_wc_order_other_fields($post_id)
{
    // this check is HPOS aware already
    if (!OrderUtil::is_order($post_id, wc_get_order_types())) {
        return;
    }

    // We need to verify this with the proper authorization (security stuff).

    // Check the user's permissions.
    // TODO: this code is not HPOS aware yet?!
    if (!current_user_can('edit_shop_order', $post_id)) {
        return $post_id;
    }
}

如何更换

current_user_can('edit_shop_order', $post_id)
部件以支持 HPOS?

php woocommerce hook-woocommerce orders wordpress-capabilities
1个回答
0
投票

自 WooCommerce 3 管理员创建/编辑订单页面以来,保存订单挂钩始终为

woocommerce_process_shop_order_meta
,并且仍然适用于高性能订单存储 (HPOS)。

使用此钩子不再需要检查用户能力,但如果需要,可以使用类似以下内容:

add_action( 'woocommerce_process_shop_order_meta', 'update_shop_order_custom_data', 40 );
function update_shop_order_custom_data( $order_id ) {
    global $current_user;
    
    if ( ! in_array( 'edit_shop_order', $current_user->allcaps ) ) {
        return;
    }

    $order = wc_get_order($order_id); // Get WC_Order object instance
    
    if ( isset($_POST['meta_key']) ) {
        $order->update_meta_data( 'meta_key', esc_attr($_POST['meta_key']) );
        $order->save();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.