WooCommerce Code Reference

ProductMapper
in package

Maps a WC_Product to the appropriate product DTO.

Table of Contents

connection_node_info()  : array<string|int, mixed>|null
Extract the per-node selection from a connection's query_info entry.
from_wc_product()  : object
Map a WC_Product to the appropriate product DTO based on its type.
build_attributes()  : array<string|int, ProductAttribute>
Build product attributes from a WC_Product.
build_dimensions()  : ProductDimensions|null
Build product dimensions from a WC_Product.
build_external_product()  : ExternalProduct
Build an ExternalProduct with type-specific fields.
build_image()  : ProductImage|null
Build a single ProductImage from an attachment ID.
build_images()  : array<string|int, ProductImage>
Build product images from a WC_Product.
build_product_variation()  : ProductVariation
Build a ProductVariation with type-specific fields.
build_reviews()  : Connection
Build a reviews connection for a product.
build_variable_product()  : VariableProduct
Build a VariableProduct with type-specific fields.
empty_connection()  : Connection
Return an empty connection (for skipped sub-collections).
map_stock_status()  : StockStatus
Map WooCommerce stock status string to the int-backed StockStatus enum.
populate_common_fields()  : void
Populate the common fields shared by all product types.
slice_variation_ids()  : array{ids: int[], has_next_page: bool, has_previous_page: bool}
Compute a Relay cursor page against a list of variation IDs.

Methods

connection_node_info()

Extract the per-node selection from a connection's query_info entry.

public static connection_node_info(array<string|int, mixed>|null $connection_info) : array<string|int, mixed>|null

Connections can be queried via nodes { ... } (the plain form) or edges { node { ... } } (Relay form); clients may use either or both. The per-node selection is what gets forwarded to the recursive mapper call so each node is built with the right sub-fields.

Parameters
$connection_info : array<string|int, mixed>|null

The query_info entry for the connection (e.g. $query_info['variations']).

Return values
array<string|int, mixed>|nullThe merged per-node selection, or null when the caller didn't request any node fields.

from_wc_product()

Map a WC_Product to the appropriate product DTO based on its type.

public static from_wc_product(WC_Product $wc_product[, array<string|int, mixed>|null $query_info = null ]) : object
Parameters
$wc_product : WC_Product

The WooCommerce product object.

$query_info : array<string|int, mixed>|null = null

Unified query info tree from the GraphQL request.

Return values
object

build_attributes()

Build product attributes from a WC_Product.

private static build_attributes(WC_Product $wc_product) : array<string|int, ProductAttribute>

For variations, attributes are simple key→value pairs (handled by selected_attributes), so this returns an empty array. For other product types, it returns full attribute definitions.

Parameters
$wc_product : WC_Product

The product.

Return values
array<string|int, ProductAttribute>

build_image()

Build a single ProductImage from an attachment ID.

private static build_image(int $attachment_id, int $position) : ProductImage|null
Parameters
$attachment_id : int

The WordPress attachment ID.

$position : int

The display position.

Return values
ProductImage|null

build_variable_product()

Build a VariableProduct with type-specific fields.

private static build_variable_product(WC_Product $wc_product[, array<string|int, mixed>|null $query_info = null ]) : VariableProduct
Parameters
$wc_product : WC_Product

The variable product.

$query_info : array<string|int, mixed>|null = null

Unified query info tree from the GraphQL request.

Return values
VariableProduct

map_stock_status()

Map WooCommerce stock status string to the int-backed StockStatus enum.

private static map_stock_status(string $wc_status) : StockStatus
Parameters
$wc_status : string

The WC stock status string.

Return values
StockStatus

populate_common_fields()

Populate the common fields shared by all product types.

private static populate_common_fields(object $product, WC_Product $wc_product, array<string|int, mixed>|null $query_info) : void
Parameters
$product : object

The product DTO to populate.

$wc_product : WC_Product

The WooCommerce product object.

$query_info : array<string|int, mixed>|null

Unified query info tree from the GraphQL request.

Return values
void

slice_variation_ids()

Compute a Relay cursor page against a list of variation IDs.

private static slice_variation_ids(array<string|int, int> $child_ids, array<string|int, mixed> $args) : array{ids: int[], has_next_page: bool, has_previous_page: bool}

Mirrors the logic in {@see} but operates on raw IDs so the caller can page-down before calling wc_get_product()

  • from_wc_product() on each child. Returns the paged IDs and the corresponding has_next_page / has_previous_page flags in Relay semantics.
Parameters
$child_ids : array<string|int, int>

Full variation ID list, in menu_order.

$args : array<string|int, mixed>

{first?, last?, after?, before?} raw GraphQL args.

Return values
array{ids: int[], has_next_page: bool, has_previous_page: bool}