Skip to content

Commit

Permalink
Editor: Add Block Bindings API helpers
Browse files Browse the repository at this point in the history
It is part of the sync from the Gutenberg plugin that introduces the registry for block binding sources required for the new Block Bindings API: WordPress/gutenberg#54536.

See #60282.
Follow-up [57373].
Props czapla, artemiosans, santosguillamot, sc0ttkclark, lgladdy, talldanwp, swissspidy, youknowriad, fabiankaegy, mukesh27.


Built from https://develop.svn.wordpress.org/trunk@57375


git-svn-id: https://core.svn.wordpress.org/trunk@56881 1a063a9b-81f0-0310-95a4-ce76da25c4cd
  • Loading branch information
gziolo committed Jan 29, 2024
1 parent 68c472c commit 579f683
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 17 deletions.
66 changes: 66 additions & 0 deletions wp-includes/block-bindings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php
/**
* Block Bindings API
*
* Contains functions for managing block bindings in WordPress.
*
* @package WordPress
* @subpackage Block Bindings
* @since 6.5.0
*/

/**
* Registers a new block bindings source.
*
* Sources are used to override block's original attributes with a value
* coming from the source. Once a source is registered, it can be used by a
* block by setting its `metadata.bindings` attribute to a value that refers
* to the source.
*
* @since 6.5.0
*
* @param string $source_name The name of the source.
* @param array $source_properties {
* The array of arguments that are used to register a source.
*
* @type string $label The label of the source.
* @type callback $get_value_callback A callback executed when the source is processed during block rendering.
* The callback should have the following signature:
*
* `function ($source_args, $block_instance,$attribute_name): mixed`
* - @param array $source_args Array containing source arguments
* used to look up the override value,
* i.e. {"key": "foo"}.
* - @param WP_Block $block_instance The block instance.
* - @param string $attribute_name The name of an attribute .
* The callback has a mixed return type; it may return a string to override
* the block's original value, null, false to remove an attribute, etc.
* }
* @return array|false Source when the registration was successful, or `false` on failure.
*/
function register_block_bindings_source( $source_name, array $source_properties ) {
return WP_Block_Bindings_Registry::get_instance()->register( $source_name, $source_properties );
}

/**
* Unregisters a block bindings source.
*
* @since 6.5.0
*
* @param string $source_name Block bindings source name including namespace.
* @return array|false The unregistred block bindings source on success and `false` otherwise.
*/
function unregister_block_bindings_source( $source_name ) {
return WP_Block_Bindings_Registry::get_instance()->unregister( $source_name );
}

/**
* Retrieves the list of all registered block bindings sources.
*
* @since 6.5.0
*
* @return array The array of registered block bindings sources.
*/
function get_all_registered_block_bindings_sources() {
return WP_Block_Bindings_Registry::get_instance()->get_all_registered();
}
29 changes: 14 additions & 15 deletions wp-includes/class-wp-block-bindings-registry.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
*/

/**
* Core class used for interacting with block binding sources.
* Core class used for interacting with block bindings sources.
*
* @since 6.5.0
*/
Expand All @@ -20,7 +20,6 @@ final class WP_Block_Bindings_Registry {
* Holds the registered block bindings sources, keyed by source identifier.
*
* @since 6.5.0
*
* @var array
*/
private $sources = array();
Expand All @@ -34,7 +33,7 @@ final class WP_Block_Bindings_Registry {
private static $instance = null;

/**
* Registers a new block binding source.
* Registers a new block bindings source.
*
* Sources are used to override block's original attributes with a value
* coming from the source. Once a source is registered, it can be used by a
Expand Down Expand Up @@ -66,7 +65,7 @@ public function register( $source_name, array $source_properties ) {
if ( ! is_string( $source_name ) ) {
_doing_it_wrong(
__METHOD__,
__( 'Block binding source name must be a string.' ),
__( 'Block bindings source name must be a string.' ),
'6.5.0'
);
return false;
Expand All @@ -75,7 +74,7 @@ public function register( $source_name, array $source_properties ) {
if ( preg_match( '/[A-Z]+/', $source_name ) ) {
_doing_it_wrong(
__METHOD__,
__( 'Block binding source names must not contain uppercase characters.' ),
__( 'Block bindings source names must not contain uppercase characters.' ),
'6.5.0'
);
return false;
Expand All @@ -85,7 +84,7 @@ public function register( $source_name, array $source_properties ) {
if ( ! preg_match( $name_matcher, $source_name ) ) {
_doing_it_wrong(
__METHOD__,
__( 'Block binding source names must contain a namespace prefix. Example: my-plugin/my-custom-source' ),
__( 'Block bindings source names must contain a namespace prefix. Example: my-plugin/my-custom-source' ),
'6.5.0'
);
return false;
Expand All @@ -94,8 +93,8 @@ public function register( $source_name, array $source_properties ) {
if ( $this->is_registered( $source_name ) ) {
_doing_it_wrong(
__METHOD__,
/* translators: %s: Block binding source name. */
sprintf( __( 'Block binding source "%s" already registered.' ), $source_name ),
/* translators: %s: Block bindings source name. */
sprintf( __( 'Block bindings source "%s" already registered.' ), $source_name ),
'6.5.0'
);
return false;
Expand All @@ -112,18 +111,18 @@ public function register( $source_name, array $source_properties ) {
}

/**
* Unregisters a block binding source.
* Unregisters a block bindings source.
*
* @since 6.5.0
*
* @param string $source_name Block binding source name including namespace.
* @return array|false The unregistred block binding source on success and `false` otherwise.
* @param string $source_name Block bindings source name including namespace.
* @return array|false The unregistred block bindings source on success and `false` otherwise.
*/
public function unregister( $source_name ) {
if ( ! $this->is_registered( $source_name ) ) {
_doing_it_wrong(
__METHOD__,
/* translators: %s: Block binding source name. */
/* translators: %s: Block bindings source name. */
sprintf( __( 'Block binding "%s" not found.' ), $source_name ),
'6.5.0'
);
Expand Down Expand Up @@ -153,7 +152,7 @@ public function get_all_registered() {
* @since 6.5.0
*
* @param string $source_name The name of the source.
* @return array|null The registered block binding source, or `null` if it is not registered.
* @return array|null The registered block bindings source, or `null` if it is not registered.
*/
public function get_registered( $source_name ) {
if ( ! $this->is_registered( $source_name ) ) {
Expand All @@ -164,12 +163,12 @@ public function get_registered( $source_name ) {
}

/**
* Checks if a block binding source is registered.
* Checks if a block bindings source is registered.
*
* @since 6.5.0
*
* @param string $source_name The name of the source.
* @return bool `true` if the block binding source is registered, `false` otherwise.
* @return bool `true` if the block bindings source is registered, `false` otherwise.
*/
public function is_registered( $source_name ) {
return isset( $this->sources[ $source_name ] );
Expand Down
2 changes: 1 addition & 1 deletion wp-includes/version.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*
* @global string $wp_version
*/
$wp_version = '6.5-alpha-57374';
$wp_version = '6.5-alpha-57375';

/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
Expand Down
3 changes: 2 additions & 1 deletion wp-settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -329,8 +329,8 @@
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-posts.php';
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-taxonomies.php';
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-users.php';
require ABSPATH . WPINC . '/class-wp-block-editor-context.php';
require ABSPATH . WPINC . '/class-wp-block-bindings-registry.php';
require ABSPATH . WPINC . '/class-wp-block-editor-context.php';
require ABSPATH . WPINC . '/class-wp-block-type.php';
require ABSPATH . WPINC . '/class-wp-block-pattern-categories-registry.php';
require ABSPATH . WPINC . '/class-wp-block-patterns-registry.php';
Expand All @@ -343,6 +343,7 @@
require ABSPATH . WPINC . '/class-wp-block-parser.php';
require ABSPATH . WPINC . '/class-wp-classic-to-block-menu-converter.php';
require ABSPATH . WPINC . '/class-wp-navigation-fallback.php';
require ABSPATH . WPINC . '/block-bindings.php';
require ABSPATH . WPINC . '/blocks.php';
require ABSPATH . WPINC . '/blocks/index.php';
require ABSPATH . WPINC . '/block-editor.php';
Expand Down

0 comments on commit 579f683

Please sign in to comment.