The WordPress Abilities API replaces your wrapper classes

I remember a big membership site I worked on about two years ago. It was one of those projects where the client kept bolting on plugins: WooCommerce for subscriptions, a custom LMS for courses, and a booking engine that looked like it was written in 2012. The requirement sounded simple. “Can this specific user book this specific class?” But every plugin had its own internal logic and no way to discover it from the outside, so I ended up writing brittle, nested conditional checks. That is the exact problem the WordPress Abilities API now solves.

My first move was the classic obvious-but-wrong step: a massive wrapper class, basically fifty layers of function_exists() and method_exists(). It held up for about a month. Then the LMS renamed its internal methods without a changelog entry and the whole booking flow collapsed. I spent three days chasing a race condition that only showed up when a user had two different subscription types. If those plugins had had a standard way to tell me what they could do, I would have saved the client thousands in billable hours.

Standardizing logic with the WordPress Abilities API

That is why the upcoming WordPress 6.9 release matters to anyone doing integration work. It introduces something called “Abilities,” which you can think of as a functional primitive. Instead of every plugin author reinventing how they expose their logic to the world, there is now a registry. Plugin capabilities become genuinely discoverable, and they adapt across contexts: the REST API, the Command Palette, or AI agents over the Model Context Protocol (MCP).

The change moves WordPress from a set of isolated silos toward one system. AI is part of the story, since the AI team built it, but the useful part is a self-documenting public API that states what input it needs and what output it returns. You stop digging through class-internal-logic-v2-final.php to find a hook.

/**
 * Registering a custom ability the right way.
 * We want our booking logic to be discoverable by other plugins.
 */
function bbioon_register_booking_ability() {
    if ( ! function_exists( 'register_block_ability' ) ) {
        return;
    }

    register_block_ability( 'bbioon/can-book-class', array(
        'description' => __( 'Checks if a user has the credentials to book a specific class.', 'bbioon-textdomain' ),
        'permission_callback' => function( $user_id, $args ) {
            return user_can( $user_id, 'read' );
        },
        'callback' => 'bbioon_execute_booking_logic',
        'args' => array(
            'user_id'  => array( 'type' => 'integer', 'required' => true ),
            'class_id' => array( 'type' => 'integer', 'required' => true ),
        ),
    ) );
}
add_action( 'init', 'bbioon_register_booking_ability' );

The part I like most is the “Context Adapter.” Once an Ability is registered, you do not have to hand-write a REST endpoint, then a WP-CLI command, then a Command Palette integration. The system does the translation. You write the logic once and it is available everywhere. That should finally kill the “spaghetti wrapper” approach that has dogged high-end WordPress development for a decade.

Integration becomes a query

We are heading toward a WordPress where “integration” means querying a registry instead of hacking together a bridge. For clients that means more stable sites. For us it means building features instead of playing detective in someone else’s wp-content folder.

This stuff gets complicated fast. If you are tired of debugging someone else’s mess and just want your site to run on an architecture that still makes sense in two years, drop my team a line. We have probably seen it before.

Are you planning to refactor your legacy hooks into the new Abilities API, or will you wait until 7.0 forces your hand?

author avatar
Ahmad Wael
I'm a WordPress and WooCommerce developer with 15+ years of experience building custom e-commerce solutions and plugins. I specialize in PHP development, following WordPress coding standards to deliver clean, maintainable code. Currently, I'm exploring AI and e-commerce by building multi-agent systems and SaaS products that integrate technologies like Google Gemini API with WordPress platforms, approaching every project with a commitment to performance, security, and exceptional user experience.