WooCommerce Code Reference

ProductQuery extends AbstractBlock
in package

ProductQuery class.

Table of Contents

$asset_api  : Api
Instance of the asset API.
$asset_data_registry  : AssetDataRegistry
Instance of the asset data registry.
$attributes_filter_query_args  : array<string|int, mixed>
All the query args related to the filter by attributes block.
$block_name  : string
Block name.
$custom_order_opts  : array<string|int, mixed>
Orderby options not natively supported by WordPress REST API
$enqueued_assets  : bool
Tracks if assets have been enqueued.
$integration_registry  : IntegrationRegistry
Instance of the integration registry.
$is_custom_inherit_global_query_implementation_enabled  : bool
This is a feature flag to enable the custom inherit Global Query implementation.
$namespace  : string
Block namespace.
$parsed_block  : array<string|int, mixed>
The Block with its attributes before it gets rendered
$valid_query_vars  : array<string|int, mixed>
All query args from WP_Query.
__construct()  : mixed
Constructor.
build_query()  : array<string|int, mixed>
Return a custom query based on attributes, filters and global WP_Query.
enqueue_editor_assets()  : mixed
Enqueue assets used for rendering the block in editor context.
enqueue_styles()  : string
Enqueues the variation styles when rendering the Product Query variation.
extend_rest_query_allowed_params()  : array<string|int, mixed>
Extends allowed `collection_params` for the REST API
is_woocommerce_variation()  : bool
Check if a given block
render_callback()  : string
The default render_callback for all blocks. This will ensure assets are enqueued just in time, then render the block (if applicable).
set_query_vars()  : array<string|int, mixed>
Set the query vars that are used by filter blocks.
update_query()  : mixed
Update the query for the product query block.
update_rest_query()  : array<string|int, mixed>
Update the query for the product query block in Editor.
enqueue_data()  : mixed
Extra data passed through from server to client for block.
enqueue_scripts()  : mixed
Register/enqueue scripts used for this block on the frontend, during render.
get_block_type()  : string
Get the block type.
get_block_type_attributes()  : array<string|int, mixed>
Get block attributes.
get_block_type_editor_script()  : array<string|int, mixed>|string
Get the editor script data for this block type.
get_block_type_editor_style()  : string|null
Get the editor style handle for this block type.
get_block_type_render_callback()  : callable|null
Get the render callback for this block type.
get_block_type_script()  : array<string|int, mixed>|string|null
Get the frontend script handle for this block type.
get_block_type_style()  : array<string|int, string>|null
Get the frontend style handle for this block type.
get_block_type_supports()  : string
Get the supports array for this block type.
get_block_type_uses_context()  : array<string|int, mixed>
Get block usesContext.
get_chunks_paths()  : array<string|int, string>
Generate an array of chunks paths for loading translation.
get_full_block_name()  : string
Get the interactivity namespace. Only used when utilizing the interactivity API.
get_routes_from_namespace()  : array<string|int, mixed>
Get routes from a REST API namespace.
initialize()  : mixed
Initialize this block type.
parse_render_callback_attributes()  : array<string|int, mixed>
Parses block attributes from the render_callback.
register_block_type()  : array<string|int, string>
Registers the block type with WordPress.
register_block_type_assets()  : mixed
Register script and style assets for the block type before it is registered.
register_chunk_translations()  : mixed
Injects Chunk Translations into the page so translations work for lazy loaded components.
render()  : string
Render the block. Extended by children.
array_merge_recursive_replace_non_array_properties()  : mixed
Merge two array recursively but replace the non-array values instead of merging them. The merging strategy:
check_if_post_template_has_support_for_grid_view()  : mixed
Post Template support for grid view was introduced in Gutenberg 16 / WordPress 6.3 Fixed in: - https://github.com/woocommerce/woocommerce-blocks/pull/9916 - https://github.com/woocommerce/woocommerce-blocks/pull/10360
filter_query_to_only_include_ids()  : array<string|int, mixed>
Apply the query only to a subset of products
get_custom_orderby_query()  : array<string|int, mixed>
Return query params to support custom sort values
get_filter_by_attributes_query()  : array<string|int, mixed>
Return a query that filters products by attributes.
get_filter_by_attributes_query_vars()  : array<string|int, mixed>
Get all the query args related to the filter by attributes block.
get_filter_by_keyword_query()  : array<string|int, mixed>
Returns the keyword filter from the given query.
get_filter_by_price_query()  : array<string|int, mixed>
Return a query that filters products by price.
get_filter_by_rating_query()  : array<string|int, mixed>
Return a query that filters products by rating.
get_filter_by_stock_status_query()  : array<string|int, mixed>
Return a query that filters products by stock status.
get_filter_by_taxonomies_query()  : array<string|int, mixed>
Return a query to filter products by taxonomies (product categories, product tags, etc.)
get_global_query()  : array<string|int, mixed>
Get product-related query variables from the global query.
get_on_sale_products_query()  : array<string|int, mixed>
Return a query for on sale products.
get_product_attributes_query()  : array<string|int, mixed>
Return the `tax_query` for the requested attributes
get_product_visibility_query()  : array<string|int, mixed>
Return a query for product visibility depending on their stock status.
get_queries_by_applied_filters()  : array<string|int, mixed>
Return queries that are generated by query args.
get_queries_by_custom_attributes()  : array<string|int, mixed>
Return queries that are generated by attributes
get_query_vars_from_filter_blocks()  : array<string|int, mixed>
Set the query vars that are used by filter blocks.
get_stock_status_query()  : array<string|int, mixed>
Return a query for products depending on their stock status.
get_valid_query_vars()  : array<string|int, mixed>
Return or initialize $valid_query_vars.
merge_queries()  : array<string|int, mixed>
Merge in the first parameter the keys "post_in", "meta_query" and "tax_query" of the second parameter.
merge_tax_queries()  : array<string|int, mixed>
Merge tax_queries from various queries.

Properties

$attributes_filter_query_args

All the query args related to the filter by attributes block.

protected array<string|int, mixed> $attributes_filter_query_args = array()

$custom_order_opts

Orderby options not natively supported by WordPress REST API

protected array<string|int, mixed> $custom_order_opts = array('popularity', 'rating')

$is_custom_inherit_global_query_implementation_enabled

This is a feature flag to enable the custom inherit Global Query implementation.

protected bool $is_custom_inherit_global_query_implementation_enabled = false

This is not intended to be a permanent feature flag, but rather a temporary. It is also necessary to enable this feature flag on the PHP side: assets/js/blocks/product-query/utils.tsx:83. https://github.com/woocommerce/woocommerce-blocks/pull/7382

Methods

__construct()

Constructor.

public __construct(Api $asset_api, AssetDataRegistry $asset_data_registry, IntegrationRegistry $integration_registry[, string $block_name = '' ]) : mixed
Parameters
$asset_api : Api

Instance of the asset API.

$asset_data_registry : AssetDataRegistry

Instance of the asset data registry.

$integration_registry : IntegrationRegistry

Instance of the integration registry.

$block_name : string = ''

Optionally set block name during construct.

Return values
mixed

build_query()

Return a custom query based on attributes, filters and global WP_Query.

public build_query(WP_Query $query) : array<string|int, mixed>
Parameters
$query : WP_Query

The WordPress Query.

Return values
array<string|int, mixed>

enqueue_editor_assets()

Enqueue assets used for rendering the block in editor context.

public enqueue_editor_assets() : mixed

This is needed if a block is not yet within the post content--render and enqueue_assets may not have ran.

Return values
mixed

enqueue_styles()

Enqueues the variation styles when rendering the Product Query variation.

public enqueue_styles(string $block_content, array<string|int, mixed> $block) : string
Parameters
$block_content : string

The block content.

$block : array<string|int, mixed>

The full block, including name and attributes.

Return values
stringThe block content.

extend_rest_query_allowed_params()

Extends allowed `collection_params` for the REST API

public extend_rest_query_allowed_params(array<string|int, mixed> $params) : array<string|int, mixed>

By itself, the REST API doesn't accept custom orderby values, even if they are supported by a custom post type.

Parameters
$params : array<string|int, mixed>

A list of allowed orderby values.

Return values
array<string|int, mixed>

is_woocommerce_variation()

Check if a given block

public static is_woocommerce_variation(array<string|int, mixed> $parsed_block) : bool
Parameters
$parsed_block : array<string|int, mixed>

The block being rendered.

Return values
bool

render_callback()

The default render_callback for all blocks. This will ensure assets are enqueued just in time, then render the block (if applicable).

public render_callback([array<string|int, mixed>|WP_Block $attributes = [] ][, string $content = '' ][, WP_Block|null $block = null ]) : string
Parameters
$attributes : array<string|int, mixed>|WP_Block = []

Block attributes, or an instance of a WP_Block. Defaults to an empty array.

$content : string = ''

Block content. Default empty string.

$block : WP_Block|null = null

Block instance.

Return values
stringRendered block type output.

set_query_vars()

Set the query vars that are used by filter blocks.

public set_query_vars(array<string|int, mixed> $public_query_vars) : array<string|int, mixed>
Parameters
$public_query_vars : array<string|int, mixed>

Public query vars.

Return values
array<string|int, mixed>

update_query()

Update the query for the product query block.

public update_query(string|null $pre_render, array<string|int, mixed> $parsed_block) : mixed
Parameters
$pre_render : string|null

The pre-rendered content. Default null.

$parsed_block : array<string|int, mixed>

The block being rendered.

Return values
mixed

update_rest_query()

Update the query for the product query block in Editor.

public update_rest_query(array<string|int, mixed> $args, WP_REST_Request $request) : array<string|int, mixed>
Parameters
$args : array<string|int, mixed>

Query args.

$request : WP_REST_Request

Request.

Return values
array<string|int, mixed>

enqueue_data()

Extra data passed through from server to client for block.

protected enqueue_data([array<string|int, mixed> $attributes = [] ]) : mixed
Parameters
$attributes : array<string|int, mixed> = []

Any attributes that currently are available from the block. Note, this will be empty in the editor context when the block is not in the post content on editor load.

Return values
mixed

enqueue_scripts()

Register/enqueue scripts used for this block on the frontend, during render.

protected enqueue_scripts([array<string|int, mixed> $attributes = [] ]) : mixed
Parameters
$attributes : array<string|int, mixed> = []

Any attributes that currently are available from the block.

Return values
mixed

get_block_type_attributes()

Get block attributes.

protected get_block_type_attributes() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_block_type_editor_script()

Get the editor script data for this block type.

protected get_block_type_editor_script([string $key = null ]) : array<string|int, mixed>|string
Parameters
$key : string = null

Data to get, or default to everything.

Tags
see

$this->register_block_type()

Return values
array<string|int, mixed>|string

get_block_type_editor_style()

Get the editor style handle for this block type.

protected get_block_type_editor_style() : string|null
Tags
see

$this->register_block_type()

Return values
string|null

get_block_type_render_callback()

Get the render callback for this block type.

protected get_block_type_render_callback() : callable|null

Dynamic blocks should return a callback, for example, return [ $this, 'render' ];

Tags
see

$this->register_block_type()

Return values
callable|null

get_block_type_script()

Get the frontend script handle for this block type.

protected get_block_type_script([string $key = null ]) : array<string|int, mixed>|string|null
Parameters
$key : string = null

Data to get, or default to everything.

Tags
see

$this->register_block_type()

Return values
array<string|int, mixed>|string|null

get_block_type_style()

Get the frontend style handle for this block type.

protected get_block_type_style() : array<string|int, string>|null
Return values
array<string|int, string>|null

get_block_type_supports()

Get the supports array for this block type.

protected get_block_type_supports() : string
Tags
see

$this->register_block_type()

Return values
string

get_block_type_uses_context()

Get block usesContext.

protected get_block_type_uses_context() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_chunks_paths()

Generate an array of chunks paths for loading translation.

protected get_chunks_paths(string $chunks_folder) : array<string|int, string>
Parameters
$chunks_folder : string

The folder to iterate over.

Return values
array<string|int, string>$chunks list of chunks to load.

get_full_block_name()

Get the interactivity namespace. Only used when utilizing the interactivity API.

protected get_full_block_name() : string
Return values
stringThe interactivity namespace, used to namespace interactivity API actions and state.

get_routes_from_namespace()

Get routes from a REST API namespace.

protected get_routes_from_namespace(string $namespace) : array<string|int, mixed>
Parameters
$namespace : string

Namespace to retrieve.

Return values
array<string|int, mixed>

initialize()

Initialize this block type.

protected initialize() : mixed
  • Hook into WP lifecycle.
  • Register the block with WordPress.
  • Hook into pre_render_block to update the query.
Return values
mixed

parse_render_callback_attributes()

Parses block attributes from the render_callback.

protected parse_render_callback_attributes(array<string|int, mixed>|WP_Block $attributes) : array<string|int, mixed>
Parameters
$attributes : array<string|int, mixed>|WP_Block

Block attributes, or an instance of a WP_Block. Defaults to an empty array.

Return values
array<string|int, mixed>

register_block_type()

Registers the block type with WordPress.

protected register_block_type() : array<string|int, string>
Return values
array<string|int, string>Chunks paths.

register_block_type_assets()

Register script and style assets for the block type before it is registered.

protected register_block_type_assets() : mixed

This registers the scripts; it does not enqueue them.

Return values
mixed

register_chunk_translations()

Injects Chunk Translations into the page so translations work for lazy loaded components.

protected register_chunk_translations(array<string|int, string> $chunks) : mixed

The chunk names are defined when creating lazy loaded components using webpackChunkName.

Parameters
$chunks : array<string|int, string>

Array of chunk names.

Return values
mixed

render()

Render the block. Extended by children.

protected render(array<string|int, mixed> $attributes, string $content, WP_Block $block) : string
Parameters
$attributes : array<string|int, mixed>

Block attributes.

$content : string

Block content.

$block : WP_Block

Block instance.

Return values
stringRendered block type output.

array_merge_recursive_replace_non_array_properties()

Merge two array recursively but replace the non-array values instead of merging them. The merging strategy:

private array_merge_recursive_replace_non_array_properties(array<string|int, mixed> $base, array<string|int, mixed> $new) : mixed
  • If keys from merge array doesn't exist in the base array, create them.

  • For array items with numeric keys, we merge them as normal.

  • For array items with string keys:

    • If the value isn't array, we'll use the value comming from the merge array. $base = ['orderby' => 'date'] $new = ['orderby' => 'meta_value_num'] Result: ['orderby' => 'meta_value_num']

    • If the value is array, we'll use recursion to merge each key. $base = ['meta_query' => [ [ 'key' => '_stock_status', 'compare' => 'IN' 'value' => ['instock', 'onbackorder'] ] ]] $new = ['meta_query' => [ [ 'relation' => 'AND', [...<max_price_query>], [...<min_price_query>], ] ]] Result: ['meta_query' => [ [ 'key' => '_stock_status', 'compare' => 'IN' 'value' => ['instock', 'onbackorder'] ], [ 'relation' => 'AND', [...<max_price_query>], [...<min_price_query>], ] ]]

      $base = ['post__in' => [1, 2, 3, 4, 5]] $new = ['post__in' => [3, 4, 5, 6, 7]] Result: ['post__in' => [1, 2, 3, 4, 5, 3, 4, 5, 6, 7]]

Parameters
$base : array<string|int, mixed>

First array.

$new : array<string|int, mixed>

Second array.

Return values
mixed

check_if_post_template_has_support_for_grid_view()

Post Template support for grid view was introduced in Gutenberg 16 / WordPress 6.3 Fixed in: - https://github.com/woocommerce/woocommerce-blocks/pull/9916 - https://github.com/woocommerce/woocommerce-blocks/pull/10360

private check_if_post_template_has_support_for_grid_view() : mixed
Return values
mixed

filter_query_to_only_include_ids()

Apply the query only to a subset of products

private filter_query_to_only_include_ids(array<string|int, mixed> $query, array<string|int, mixed> $ids) : array<string|int, mixed>
Parameters
$query : array<string|int, mixed>

The query.

$ids : array<string|int, mixed>

Array of selected product ids.

Return values
array<string|int, mixed>

get_custom_orderby_query()

Return query params to support custom sort values

private get_custom_orderby_query(string $orderby) : array<string|int, mixed>
Parameters
$orderby : string

Sort order option.

Return values
array<string|int, mixed>

get_filter_by_attributes_query()

Return a query that filters products by attributes.

private get_filter_by_attributes_query() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_filter_by_attributes_query_vars()

Get all the query args related to the filter by attributes block.

private get_filter_by_attributes_query_vars() : array<string|int, mixed>
Return values
array<string|int, mixed>[color] => Array ( [filter] => filter_color [query_type] => query_type_color ) [size] => Array ( [filter] => filter_size [query_type] => query_type_size ) )

get_filter_by_keyword_query()

Returns the keyword filter from the given query.

private get_filter_by_keyword_query(WP_Query $query) : array<string|int, mixed>
Parameters
$query : WP_Query

The query to extract the keyword filter from.

Return values
array<string|int, mixed>The keyword filter, or an empty array if none is found.

get_filter_by_price_query()

Return a query that filters products by price.

private get_filter_by_price_query() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_filter_by_rating_query()

Return a query that filters products by rating.

private get_filter_by_rating_query() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_filter_by_stock_status_query()

Return a query that filters products by stock status.

private get_filter_by_stock_status_query() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_filter_by_taxonomies_query()

Return a query to filter products by taxonomies (product categories, product tags, etc.)

private get_filter_by_taxonomies_query(array<string|int, mixed> $query) : array<string|int, mixed>

For example: User could provide "Product Categories" using "Filters" ToolsPanel available in Inspector Controls. We use this function to extract it's query from $tax_query.

For example, this is how the query for product categories will look like in $tax_query array: Array ( [taxonomy] => product_cat [terms] => Array ( [0] => 36 ) )

For product categories, taxonomy would be "product_tag"

Parameters
$query : array<string|int, mixed>

WP_Query.

Return values
array<string|int, mixed>Query to filter products by taxonomies.

get_global_query()

Get product-related query variables from the global query.

private get_global_query(array<string|int, mixed> $parsed_block) : array<string|int, mixed>
Parameters
$parsed_block : array<string|int, mixed>

The Product Query that being rendered.

Return values
array<string|int, mixed>

get_on_sale_products_query()

Return a query for on sale products.

private get_on_sale_products_query() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_product_attributes_query()

Return the `tax_query` for the requested attributes

private get_product_attributes_query([array<string|int, mixed> $attributes = array() ]) : array<string|int, mixed>
Parameters
$attributes : array<string|int, mixed> = array()

Attributes and their terms.

Return values
array<string|int, mixed>

get_product_visibility_query()

Return a query for product visibility depending on their stock status.

private get_product_visibility_query(array<string|int, mixed> $stock_query) : array<string|int, mixed>
Parameters
$stock_query : array<string|int, mixed>

Stock status query.

Return values
array<string|int, mixed>Tax query for product visibility.

get_queries_by_applied_filters()

Return queries that are generated by query args.

private get_queries_by_applied_filters() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_queries_by_custom_attributes()

Return queries that are generated by attributes

private get_queries_by_custom_attributes(array<string|int, mixed> $parsed_block) : array<string|int, mixed>
Parameters
$parsed_block : array<string|int, mixed>

The Product Query that being rendered.

Return values
array<string|int, mixed>

get_query_vars_from_filter_blocks()

Set the query vars that are used by filter blocks.

private get_query_vars_from_filter_blocks() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_stock_status_query()

Return a query for products depending on their stock status.

private get_stock_status_query(array<string|int, mixed> $stock_statii) : array<string|int, mixed>
Parameters
$stock_statii : array<string|int, mixed>

An array of acceptable stock statii.

Return values
array<string|int, mixed>

get_valid_query_vars()

Return or initialize $valid_query_vars.

private get_valid_query_vars() : array<string|int, mixed>
Return values
array<string|int, mixed>

merge_queries()

Merge in the first parameter the keys "post_in", "meta_query" and "tax_query" of the second parameter.

private merge_queries(array<string|int, array<string|int, mixed>> ...$queries) : array<string|int, mixed>
Parameters
$queries : array<string|int, array<string|int, mixed>>

Query arrays to be merged.

Return values
array<string|int, mixed>

merge_tax_queries()

Merge tax_queries from various queries.

private merge_tax_queries(array<string|int, mixed> ...$queries) : array<string|int, mixed>
Parameters
$queries : array<string|int, mixed>

Query arrays to be merged.

Return values
array<string|int, mixed>