Skip to content

Icons: Prevent unregistering core-admin icons (Trac #66344) - #14621

Open
ArkaPrabhaChowdhury wants to merge 1 commit into
WordPress:trunkfrom
ArkaPrabhaChowdhury:trac-66344-protect-admin-icons
Open

ArkaPrabhaChowdhury wants to merge 1 commit into
WordPress:trunkfrom
ArkaPrabhaChowdhury:trac-66344-protect-admin-icons

Conversation

@ArkaPrabhaChowdhury

@ArkaPrabhaChowdhury ArkaPrabhaChowdhury commented Oct 21, 2026 •

Copy link
Copy Markdown

The admin menu and admin bar depend on the non-public core-admin icon collection. Unregistering that collection, or one of its icons, currently leaves the corresponding admin UI without icons.

Reject those operations with _doing_it_wrong() and return false before changing either registry. The guards live in the registry methods so both direct calls and the public helpers are covered. Only core-admin is protected: the public core collection and third-party collections remain removable, including cascading removal of their icons.

Regression tests exercise both blocked operations, unchanged SVG output, and successful removal of core icons and their collection. The REST icon test fixture now uses temporary registry instances instead of unregistering the protected collection, and restores the original instances afterward.

Human verification

On a development installation with WP_DEBUG and WP_DEBUG_LOG enabled, add this temporary MU plugin:

<?php
add_action( 'init', function () {
    wp_unregister_icon_collection( 'core-admin' );
    wp_unregister_icon( 'core-admin/dashboard' );
}, 20 );
  1. Open the dashboard. The admin menu and admin bar icons should remain visible. The debug log should contain an incorrect-usage notice for each attempted removal. Without the patch, the admin icons disappear.
  2. Test each removal separately. Each call should return false, and wp_get_icon( 'core-admin/dashboard' ) should still return SVG markup.
  3. Change the callback to unregister core/plus, then core. Both calls should return true; the public collection should be removed while the admin icons remain visible.
  4. Remove the temporary MU plugin.

These are verification steps for a human reviewer; no completed human review is claimed.

Trac ticket: https://core.trac.wordpress.org/ticket/66344

Use of AI Tools

AI assistance: Yes
Tool(s): OpenAI Codex
Model(s): GPT-6
Used for: Ticket analysis, implementation, regression tests, local verification, and PR text. Human review remains pending.


This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.

@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 arkaprabhachowdhury.

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

@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.

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