AddToWishlistButton
extends AbstractBlock
in package
Add to Wishlist Button block.
Single-product trigger UI for the wishlist. Shipped as an inner block of
woocommerce/add-to-cart-with-options (ATCWO) via the per-product-type
template parts, so it always renders inside the form's iAPI scope and can
read its selectedAttributes context directly. The ancestor restriction
in block.json prevents merchants from inserting the block outside ATCWO
(where it'd lose iAPI scope and the variation-attribute read would break).
Hidden for guests and gated by the product_wishlist feature flag. On
click, toggles the currently configured product (parent or selected
variation) in the shopper's wishlist via the shared
woocommerce/shopper-lists iAPI store. Errors are surfaced through the
page's existing woocommerce/store-notices region — no inline notices
area of its own.
Table of Contents
- LIST_SLUG = 'wishlist'
- The list slug this block writes to.
- $asset_api : Api
- Instance of the asset API.
- $asset_data_registry : AssetDataRegistry
- Instance of the asset data registry.
- $block_name : string
- Block name.
- $enqueued_assets : bool
- Tracks if assets have been enqueued.
- $integration_registry : IntegrationRegistry
- Instance of the integration registry.
- $namespace : string
- Block namespace.
- __construct() : mixed
- Constructor.
- enqueue_editor_assets() : mixed
- Enqueue assets used for rendering the block in editor context.
- 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).
- enqueue_data() : mixed
- 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() : null
- Disable 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() : null
- Get the frontend script handle for this block type. Scripts are loaded via `viewScriptModule` in block.json.
- get_block_type_style() : null
- Get the frontend style handle for this block type. Returning null lets WP use the `style` array from block.json.
- 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 full block name, including namespace.
- get_routes_from_namespace() : array<string|int, mixed>
- Get routes from a REST API namespace.
- initialize() : mixed
- Initialize this block type.
- is_block_editor() : mixed
- Are we currently on the admin block editor screen?
- 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.
- get_add_label() : string
- Visible label when the product is not in the wishlist.
- get_saved_label() : string
- Visible label when the product is already in the wishlist.
- get_select_options_label() : string
- Visible label when the shopper still needs to pick variation attributes before the wishlist toggle can resolve to a specific variation.
- is_initial_in_wishlist() : bool
- Whether the current product (or its parent, for a variable parent with no selection yet) is already in the prefetched wishlist. For variable products the SSR star is always empty — we can't know which variation the shopper will pick before JS hydrates.
- prefetch_items() : array<int, array<string, mixed>>
- Prefetch the wishlist items via `rest_do_request()`. Logged-out users short-circuit to an empty list — the route requires authentication and we don't want to fire an API call that's only going to 401.
Constants
LIST_SLUG
The list slug this block writes to.
private
mixed
LIST_SLUG
= 'wishlist'
Properties
$asset_api
Instance of the asset API.
protected
Api
$asset_api
$asset_data_registry
Instance of the asset data registry.
protected
AssetDataRegistry
$asset_data_registry
$block_name
Block name.
protected
string
$block_name
= 'add-to-wishlist-button'
$enqueued_assets
Tracks if assets have been enqueued.
protected
bool
$enqueued_assets
= false
$integration_registry
Instance of the integration registry.
protected
IntegrationRegistry
$integration_registry
$namespace
Block namespace.
protected
string
$namespace
= 'woocommerce'
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 —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 —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
string — Rendered block type output.enqueue_data()
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()
Get the block type.
protected
get_block_type() : string
Tags
Return values
string —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
Return values
array<string|int, mixed>|string —get_block_type_editor_style()
Disable the editor style handle for this block type.
protected
get_block_type_editor_style() : null
Return values
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
Return values
callable|null —get_block_type_script()
Get the frontend script handle for this block type. Scripts are loaded via `viewScriptModule` in block.json.
protected
get_block_type_script([string|null $key = null ]) : null
Parameters
- $key : string|null = null
-
The key of the script to get.
Return values
null —get_block_type_style()
Get the frontend style handle for this block type. Returning null lets WP use the `style` array from block.json.
protected
get_block_type_style() : null
Return values
null —get_block_type_supports()
Get the supports array for this block type.
protected
get_block_type_supports() : string
Tags
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 full block name, including namespace.
protected
get_full_block_name() : string
Return values
string —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.
Return values
mixed —is_block_editor()
Are we currently on the admin block editor screen?
protected
is_block_editor() : mixed
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.
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
string — Rendered block type output.get_add_label()
Visible label when the product is not in the wishlist.
private
get_add_label() : string
Return values
string —get_saved_label()
Visible label when the product is already in the wishlist.
private
get_saved_label() : string
Return values
string —get_select_options_label()
Visible label when the shopper still needs to pick variation attributes before the wishlist toggle can resolve to a specific variation.
private
get_select_options_label() : string
Return values
string —is_initial_in_wishlist()
Whether the current product (or its parent, for a variable parent with no selection yet) is already in the prefetched wishlist. For variable products the SSR star is always empty — we can't know which variation the shopper will pick before JS hydrates.
private
is_initial_in_wishlist(array<int, array<string, mixed>> $items, WC_Product $product) : bool
Parameters
- $items : array<int, array<string, mixed>>
-
Schema-shape items.
- $product : WC_Product
-
The product being viewed.
Return values
bool —prefetch_items()
Prefetch the wishlist items via `rest_do_request()`. Logged-out users short-circuit to an empty list — the route requires authentication and we don't want to fire an API call that's only going to 401.
private
prefetch_items() : array<int, array<string, mixed>>
