WC_API_Resource::maybe_add_meta()publicWC 2.1

Add meta to resources when requested by the client. Meta is added as a top-level <resource_name>_meta attribute (e.g. order_meta) as a list of key/value pairs

Method of the class: WC_API_Resource{}

No Hooks.

Return

Mixed.

Usage

$WC_API_Resource = new WC_API_Resource();
$WC_API_Resource->maybe_add_meta( $data, $resource );
$data(array) (required)
the resource data
$resource(object) (required)
the resource object (e.g WC_Order)

Changelog

Since 2.1 Introduced.

WC_API_Resource::maybe_add_meta() code WC 8.7.0

public function maybe_add_meta( $data, $resource ) {

	if ( isset( $this->server->params['GET']['filter']['meta'] ) && 'true' === $this->server->params['GET']['filter']['meta'] && is_object( $resource ) ) {

		// don't attempt to add meta more than once
		if ( preg_grep( '/[a-z]+_meta/', array_keys( $data ) ) ) {
			return $data;
		}

		// define the top-level property name for the meta
		switch ( get_class( $resource ) ) {

			case 'WC_Order':
				$meta_name = 'order_meta';
				break;

			case 'WC_Coupon':
				$meta_name = 'coupon_meta';
				break;

			case 'WP_User':
				$meta_name = 'customer_meta';
				break;

			default:
				$meta_name = 'product_meta';
				break;
		}

		if ( is_a( $resource, 'WP_User' ) ) {

			// customer meta
			$meta = (array) get_user_meta( $resource->ID );

		} else {

			// coupon/order/product meta
			$meta = (array) get_post_meta( $resource->get_id() );
		}

		foreach ( $meta as $meta_key => $meta_value ) {

			// don't add hidden meta by default
			if ( ! is_protected_meta( $meta_key ) ) {
				$data[ $meta_name ][ $meta_key ] = maybe_unserialize( $meta_value[0] );
			}
		}
	}

	return $data;
}