Automattic\WooCommerce\Internal\DataStores\Orders

HposOrderCapabilityHelper::translate_order_capspublicWC 10.7.0

Translate capabilities for HPOS orders.

Handles the full map_meta_cap filter callback. The caller only needs to verify that HPOS is enabled and sync is disabled before delegating.

Method of the class: HposOrderCapabilityHelper{}

No Hooks.

Returns

String[]. Translated capabilities.

Usage

$HposOrderCapabilityHelper = new HposOrderCapabilityHelper();
$HposOrderCapabilityHelper->translate_order_caps( $caps, $cap, $user_id, $args );
$caps(string[]) (required)
The resolved primitive capabilities.
$cap(string) (required)
The meta capability being checked.
$user_id(int) (required)
The user ID.
$args(array) (required)
Additional arguments (object ID).

Changelog

Since 10.7.0 Introduced.

HposOrderCapabilityHelper::translate_order_caps() code WC 11.0.0

public function translate_order_caps( $caps, $cap, $user_id, $args ) {
	if ( ! in_array( $cap, array( 'edit_post', 'delete_post', 'read_post' ), true ) || ! isset( $args[0] ) ) {
		return $caps;
	}

	$order_id = absint( $args[0] );
	if ( ! $order_id ) {
		return $caps;
	}

	$post = get_post( $order_id );
	if ( $post instanceof WP_Post && DataSynchronizer::PLACEHOLDER_ORDER_POST_TYPE !== $post->post_type ) {
		return $caps;
	}

	$order_type    = OrderUtil::get_order_type( $order_id );
	$order_type_ob = $order_type ? get_post_type_object( $order_type ) : null;
	if ( ! ( $order_type_ob instanceof WP_Post_Type ) || ! $order_type_ob->map_meta_cap ) {
		return $caps;
	}

	$order = wc_get_order( $order_id );
	if ( ! $order instanceof WC_Abstract_Order ) {
		return $caps;
	}

	switch ( $cap ) {
		case 'edit_post':
			return $this->map_edit_order_caps( $order, $order_type_ob, (int) $user_id, $post );
		case 'delete_post':
			return $this->map_delete_order_caps( $order, $order_type_ob, (int) $user_id, $post );
		case 'read_post':
			return $this->map_read_order_caps( $order, $order_type_ob, (int) $user_id, $post );
	}
}