Problem
When running WP-CLI commands (e.g., wp datamachine-events health-check), multiple PHP notices are generated about duplicate ability registrations:
Notice: Function WP_Ability_Categories_Registry::register was called incorrectly.
Ability category "datamachine" is already registered.
Notice: Function WP_Abilities_Registry::register was called incorrectly.
Ability "datamachine/get-handlers" is already registered.
Notice: Function WP_Abilities_Registry::register was called incorrectly.
Ability "datamachine/get-handler" is already registered.
Notice: Function WP_Abilities_Registry::register was called incorrectly.
Ability "datamachine/validate-handler" is already registered.
Notice: Function WP_Abilities_Registry::register was called incorrectly.
Ability "datamachine/get-handler-config-fields" is already registered.
Notice: Function WP_Abilities_Registry::register was called incorrectly.
Ability "datamachine/apply-handler-defaults" is already registered.
Notice: Function WP_Abilities_Registry::register was called incorrectly.
Ability "datamachine/get-handler-site-defaults" is already registered.
Additionally, some abilities are missing the required category string:
Notice: Function WP_Abilities_Registry::register was called incorrectly.
The ability properties must contain a `category` string.
Root Cause
Abilities are being registered multiple times during a single WP-CLI request. This could be caused by:
- Registration code running on multiple hooks without deduplication
- Multiple plugins registering the same abilities
- Registration code being included/required multiple times
Expected Behavior
Each ability category and ability should only be registered once per request, with guards to prevent duplicate registration.
Suggested Fix
Add existence checks before registering:
// For categories
if ( ! WP_Ability_Categories_Registry::is_registered( 'datamachine' ) ) {
wp_register_ability_category( 'datamachine', $args );
}
// For abilities
if ( ! WP_Abilities_Registry::is_registered( 'datamachine/get-handlers' ) ) {
wp_register_ability( 'datamachine/get-handlers', $args );
}
Also ensure all ability registrations include the required category property.
Reproduction
homeboy wp extra-chill:events datamachine-events health-check --scope=upcoming
Environment
- WordPress 6.9
- datamachine-events plugin
- WP-CLI execution context
Problem
When running WP-CLI commands (e.g.,
wp datamachine-events health-check), multiple PHP notices are generated about duplicate ability registrations:Additionally, some abilities are missing the required
categorystring:Root Cause
Abilities are being registered multiple times during a single WP-CLI request. This could be caused by:
Expected Behavior
Each ability category and ability should only be registered once per request, with guards to prevent duplicate registration.
Suggested Fix
Add existence checks before registering:
Also ensure all ability registrations include the required
categoryproperty.Reproduction
Environment