Bemutatkozik a WordPress Abilities API

A WordPress fejlesztők régóta küzdenek egy alapvető problémával: nincs egységes módszer arra, hogy a rendszer képességeit felfedezhetővé és gépileg olvashatóvá tegyék. Eddig mindenki a saját módszerét használta – action hookok, globális függvények, REST végpontok, osztályok – és az eredmény egy kaotikus ökoszisztéma lett, ahol külső eszközök (beleértve az AI ügynököket) nehezen tudják feltérképezni, mit is tud valójában egy WordPress oldal.

A WordPress Core AI csapata erre a problémára adott választ az Abilities API-val.

Mi az Abilities API?

Az Abilities API egy szabványosított felület, amelyen keresztül a WordPress core, a pluginok és a témák egységesen tudják deklarálni és közzétenni a képességeiket. A lényeg: egyetlen helyen, egységes formátumban, gépileg és emberek számára is olvasható módon.

Ez nem csupán egy újabb API – ez egy paradigmaváltás abban, ahogyan a WordPress kommunikál a külvilággal.

Miért fontos ez?

Felfedezhetőség: Bármely eszköz lekérdezheti, milyen képességek érhetők el egy WordPress oldalon.

Biztonság: Minden képességhez explicit jogosultság-ellenőrzés tartozik.

Interoperabilitás: Az egységes séma lehetővé teszi, hogy különböző komponensek összetett munkafolyamatokat építsenek.

Fokozatos bevezetés: Először Composer csomagként jelenik meg, majd beépül a WordPress core-ba.

Gyakorlati példa: List All URLs plugin

Nézzünk egy egyszerű példát. Készítünk egy plugint, ami lekéri az oldal összes URL-jét.

WordPress Abilities API - List All URLs plugin

Képesség regisztrálása

A képességeket a wp_abilities_api_init hookba kell regisztrálni a wp_register_ability() függvénnyel:

add_action( 'wp_abilities_api_init', 'list_all_urls_register_abilities' );

function list_all_urls_register_abilities() {
    wp_register_ability(
        'list-all-urls/urls',
        array(
            'label'       => __( 'Get All URLs', 'list-all-urls' ),
            'description' => __( 'Retrieves a list of URLs from the WordPress site.', 'list-all-urls' ),
            'category'    => 'site',
            'input_schema' => array(
                'type'       => 'object',
                'properties' => array(
                    'post_type' => array(
                        'type'        => 'string',
                        'description' => 'A post típus (pl. post, page).',
                    ),
                    'posts_per_page' => array(
                        'type'        => 'integer',
                        'description' => 'Lekérendő bejegyzések száma. -1 = összes.',
                    ),
                    'post_status' => array(
                        'type'        => 'string',
                        'description' => 'Bejegyzés státusz (pl. publish, draft).',
                    ),
                    'makelinks' => array(
                        'type'        => 'boolean',
                        'description' => 'Kattintható linkként adja vissza?',
                    ),
                ),
            ),
            'output_schema' => array(
                'type'       => 'object',
                'properties' => array(
                    'url' => array(
                        'type'        => 'string',
                        'description' => 'URL vagy kattintható link'
                    )
                )
            ),
            'execute_callback'   => 'list_all_urls_generate_url_list',
            'permission_callback' => '__return_true',
        )
    );
}

Minden képességnek van:

  • Egyedi azonosítója (namespace/ability-name formátum)
  • Címkéje és leírása
  • Input és output sémája (JSON Schema)
  • Kategóriája
  • Végrehajtó függvénye
  • Jogosultság-ellenőrző függvénye

A végrehajtó függvény

function list_all_urls_generate_url_list( array $arguments = array() ): array {
    $default_args = array(
        'post_type'      => 'post',
        'posts_per_page' => -1,
        'post_status'    => 'publish',
    );
    $args  = wp_parse_args( $arguments, $default_args );
    $posts = get_posts( $args );

    $links = array();
    foreach ( $posts as $post ) {
        $permalink = get_permalink( $post );
        if ( ! empty( $arguments['makelinks'] ) ) {
            $links[] = '<a href="' . esc_url( $permalink ) . '">' . esc_html( $permalink ) . '</a>';
        } else {
            $links[] = esc_html( $permalink );
        }
    }

    return $links;
}

Képesség végrehajtása PHP-ból

$input = array(
    'post_type'      => 'post',
    'posts_per_page' => -1,
    'post_status'    => 'publish',
    'makelinks'      => false,
);

$ability = wp_get_ability( 'list-all-urls/urls' );
$urls    = $ability->execute( $input );
WordPress Abilities API - Kód és kimenet

REST API támogatás

Az Abilities API automatikusan elérhetővé teszi a regisztrált képességeket REST végpontokon keresztül a wp-abilities/v1 namespace alatt. Ehhez csak a show_in_rest meta értéket kell beállítani:

'meta' => array(
    'show_in_rest' => true,
),

Ezután a képesség elérhető lesz REST-en:

  • GET /wp-json/wp-abilities/v1/abilities – összes képesség listázása
  • POST /wp-json/wp-abilities/v1/abilities/{name}/execute – képesség végrehajtása

Visszafelé kompatibilitás

Ha régebbi WordPress verziókat is támogatni akarsz, érdemes ellenőrizni az API jelenlétét:

if ( function_exists( 'wp_register_ability' ) ) {
    add_action( 'wp_abilities_api_init', 'my_plugin_register_abilities' );
}

// vagy

if ( class_exists( 'WP_Ability' ) ) {
    add_action( 'wp_abilities_api_init', 'my_plugin_register_abilities' );
}

WordPress 6.9 és azon túl

A szerver oldali PHP funkcionalitás a WordPress 6.9-ben debütál (2025. december eleje). A JavaScript kliens egyelőre a GitHub repóban érhető el, később Gutenberg csomagként lesz terjesztve.

Az Abilities API kombinálva a WordPress MCP adapterrel lehetővé teszi, hogy AI ügynökök programozottan kommunikáljanak WordPress oldalakkal. Ez csak a kezdet – a jövőben az egész WordPress ökoszisztéma erre az alapra épülhet.

Források


Eredeti cikk: Introducing the WordPress Abilities API – Jonathan Bossenger

Leave a Comment