在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?
自 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();
}
}