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>|null — The 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_dimensions()
Build product dimensions from a WC_Product.
private
static build_dimensions(WC_Product $wc_product) : ProductDimensions|null
Parameters
- $wc_product : WC_Product
-
The product.
Return values
ProductDimensions|null —build_external_product()
Build an ExternalProduct with type-specific fields.
private
static build_external_product(WC_Product $wc_product) : ExternalProduct
Parameters
- $wc_product : WC_Product
-
The external product.
Return values
ExternalProduct —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_images()
Build product images from a WC_Product.
private
static build_images(WC_Product $wc_product) : array<string|int, ProductImage>
Parameters
- $wc_product : WC_Product
-
The product.
Return values
array<string|int, ProductImage> —build_product_variation()
Build a ProductVariation with type-specific fields.
private
static build_product_variation(WC_Product $wc_product) : ProductVariation
Parameters
- $wc_product : WC_Product
-
The variation product.
Return values
ProductVariation —build_reviews()
Build a reviews connection for a product.
private
static build_reviews(int $product_id) : Connection
Parameters
- $product_id : int
-
The product ID.
Return values
Connection —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 —empty_connection()
Return an empty connection (for skipped sub-collections).
private
static empty_connection() : Connection
Return values
Connection —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 correspondinghas_next_page/has_previous_pageflags 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.
