Skip to content

Icons: Add APIs for collection and icon registration#11559

Open
t-hamano wants to merge 5 commits into
WordPress:trunkfrom
t-hamano:64847-icon-api-extend
Open

Icons: Add APIs for collection and icon registration#11559
t-hamano wants to merge 5 commits into
WordPress:trunkfrom
t-hamano:64847-icon-api-extend

Conversation

@t-hamano

@t-hamano t-hamano commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

@t-hamano

t-hamano commented Apr 13, 2026

Copy link
Copy Markdown
Contributor Author

I am encountering the following error.

Fatal error: Access level to Gutenberg_Icons_Registry_7_1::register() must be public (as in class WP_Icons_Registry) in /var/www/src/wp-content/plugins/gutenberg/lib/compat/wordpress-7.1/class-gutenberg-icons-registry-7-1.php on line 68

This issue will likely be resolved once the Gutenberg ref is updated in wordpress-develop.

Gutenberg_Icons_Registry_7_1::register() no longer exists in the Gutenberg trunk. Instead, WP_Icons_Registry_Gutenberg::registerI() will be a public method once WordPress/gutenberg#77260 is merged, which should resolve the issue.

t-hamano and others added 2 commits June 11, 2026 17:04
Align the icon registry's internal property with WordPress core's
snake_case array-key convention by renaming the registered icon property
from filePath to file_path. The conversion now happens only at the
registration/mapping boundary in the constructor: the generated manifest
keeps the upstream camelCase `filePath` key (as produced by Gutenberg),
which is read and mapped to the internal `file_path` property when each
icon is registered.

This updates the registry validation, allowed property keys,
`get_content()` lookup, and the related docblocks and error messages,
while leaving the manifest and the copy:icon-library-manifest Grunt task
untouched.

Co-Authored-By: Claude <noreply@anthropic.com>
Add the public icon collection and icon registration APIs on top of the
snake_case icon registry. Introduces WP_Icon_Collections_Registry,
icons.php (wp_register_icon/wp_unregister_icon/wp_register_icon_collection
and the default registration callbacks), the collection-scoped REST routes,
and the related tests.

Icon properties use the internal snake_case `file_path` key established in
the icon registry; the Gutenberg manifest's upstream camelCase `filePath`
key is read and mapped to `file_path` at the registration boundary.

Co-Authored-By: Claude <noreply@anthropic.com>
@t-hamano t-hamano force-pushed the 64847-icon-api-extend branch from de545bf to d08cbfa Compare June 11, 2026 09:00
t-hamano and others added 2 commits June 11, 2026 18:35
The icon registries warn via _doing_it_wrong() when a collection or icon
is already registered. Because tests such as the Customize widgets suite
fire `do_action( 'init' )` again after bootstrap, the default icon
registration runs twice and triggers those notices, failing unrelated
tests.

Match the existing pattern used for font and connector registration by
unhooking `_wp_register_default_icon_collections` and
`_wp_register_default_icons` from `init` after the first run.

Co-Authored-By: Claude <noreply@anthropic.com>
The REST icons controller now registers a per-collection route,
`/wp/v2/icons/(?P<namespace>[a-z][a-z-]*)`. Add it to the expected
routes list so test_expected_routes_in_schema reflects the registered
routes.

Co-Authored-By: Claude <noreply@anthropic.com>
The icons controller now exposes a `namespace` argument on the
collection endpoint and a new per-collection route. Regenerate the
QUnit fixtures so `git diff --exit-code` passes in CI.

Co-Authored-By: Claude <noreply@anthropic.com>
@t-hamano t-hamano marked this pull request as ready for review June 11, 2026 10:40
@github-actions

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Core Committers: Use this line as a base for the props when committing in SVN:

Props wildworks.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant