WordPress 6.9 introdujo la Abilities API, un sistema que permite a plugins, temas y al propio núcleo de WordPress exponer sus funcionalidades de forma estandarizada para que agentes de inteligencia artificial y herramientas de automatización puedan interactuar con tu sitio.
Si quieres entender a fondo qué es y cómo funciona, te recomiendo leer mi guía completa sobre la Abilities API. Aquí vamos directos al grano: cómo desactivarla si has decidido que no la necesitas.
Por qué podrías querer desactivarla
Hay varios motivos más que lógicos para querer en un momento dado desactivar esta API.
Privacidad
Las abilities incluidas en WordPress exponen información sensible de tu instalación:
- Versión exacta de WordPress.
- Versión de PHP.
- Información del servidor de base de datos.
- Email del administrador.
- Tipo de entorno (producción, staging, desarrollo, local).
- URL de instalación de WordPress.
Aunque requiere identificarse como administrador es información que quizás prefieras no tener disponible de forma tan abierta.
Seguridad
La Abilities API está diseñada para que agentes de IA externos (Claude, ChatGPT, Gemini y otros) puedan «descubrir» qué puede hacer tu WordPress y ejecutar acciones. Si no vas a usar esta funcionalidad es una puerta abierta, posible destino de ataques, totalmente innecesaria.
Además, plugins mal diseñados podrían registrar abilities con permisos demasiado abiertos, abriendo vulnerabilidades que no controlas y para los que los plugins de seguridad aún no están preparados (la mayoría).
Filosofía de mínima exposición
Si no usas algo, ¿para qué tenerlo activo? Siguiendo el principio de reducir al mínimo lo que tu sitio expone al exterior, desactivar APIs que no necesitas tiene todo el sentido, al menos para mi, pero igual es que yo me tomo demasiado en serio la seguridad, no sé, ahí lo dejo.
Rendimiento
El impacto es mínimo pero existe, pues. hay clases que se cargan, endpoints REST adicionales bajo /wp-abilities/v1/, hooks que se ejecutan. En sitios que necesitan estar muy optimizados (spoiler: todos) cada pequeño ahorro cuenta.
Pero mi duda es … ¿debería desactivar la Abilities API?
No todo son ventajas a la hora de desactivar la Abilities API. Plantéate estas cuestiones antes de lanzarte a ello.
Compatibilidad futura
WordPress va claramente en esta dirección. La paleta de comandos, antes solo disponible en el editor, pero desde diciembre de 2025 habilitada en todo el escritorio, probablemente usará abilities en el futuro, y el cliente JavaScript de la API se integrará en WordPress 7.0, así que desactivar la API hoy podría darte problemas mañana con funcionalidades del editor de bloques o incluso de todo el admin de WordPress.
Plugins que la usen
Si tienes instalado el MCP Adapter de Automattic o cualquier plugin que registre abilities propias, como mismamente VigIA como te conté, desactivar la API les afectará. Podrían mostrar errores o directamente dejar de funcionar.
¿Realmente lo necesitas?
Por defecto, de las 3 abilities actuales del core de WordPress solo 2 se exponen vía REST, y ambas requieren autenticación de administrador. Sin plugins de IA ni agentes configurados el riesgo real es prácticamente nulo. Valora si el esfuerzo merece la pena para tu caso.
Qué abilities registra WordPress por defecto
WordPress, en la versión 6.9, la actual, registra 2 categorías y 3 abilities.
Categorías
| Slug | Nombre | Descripción |
|---|---|---|
site |
Site | Abilities que obtienen o modifican información del sitio |
user |
User | Abilities relacionadas con información de usuarios |
Abilities
| Nombre | Categoría | Permiso | En REST | Datos que expone |
|---|---|---|---|---|
core/get-site-info |
site | manage_options | Sí | Título, descripción, URL, URL de WP, email de administración, mapa de caractres, idioma, versión |
core/get-user-info |
user | is_user_logged_in | No | ID, nombre, nombre visible, acceso, perfiles, idioma del usuario actual |
core/get-environment-info |
site | manage_options | Sí | Tipo de entorno, versión PHP, info del servidor BD, versión WP |
Métodos de desactivación
Te ofrezco varias opciones, de menos a más agresiva, tú decides usar la que mejor se adapte a lo que necesitas, si es que lo necesitas.
Desactivar solo los endpoints REST
La opción más conservadora. Las abilities siguen funcionando internamente en PHP, pero no son accesibles desde fuera vía REST API. Esto bloquea el acceso a agentes IA externos manteniendo la funcionalidad interna.
<?php
/**
* Disable Abilities API REST endpoints
*
* Removes all REST endpoints under /wp-abilities/v1/ namespace
* Abilities still work internally via PHP
*/
add_filter( 'rest_endpoints', 'ayudawp_disable_abilities_rest_endpoints' );
function ayudawp_disable_abilities_rest_endpoints( $endpoints ) {
foreach ( $endpoints as $route => $data ) {
if ( strpos( $route, '/wp-abilities/v1' ) === 0 ) {
unset( $endpoints[ $route ] );
}
}
return $endpoints;
}
Desactivar abilities específicas del core
Si solo te molestan ciertas abilities, puedes eliminarlas individualmente después de que se registren:
<?php
/**
* Quitar registro de abilities de WP
*
* Quita solo las que no quieras
* Debe ejecutarse despues del gancho 'wp_abilities_api_init' (prioridad > 10)
*/
add_action( 'wp_abilities_api_init', 'ayudawp_unregister_specific_abilities', 20 );
function ayudawp_unregister_specific_abilities() {
// Quita la información del entorno (expone versión de PHP, info de BD, etc.)
if ( function_exists( 'wp_unregister_ability' ) ) {
wp_unregister_ability( 'core/get-environment-info' );
}
// Quita la información del sitio (expone el email de admin, versión de WP, etc.)
// Quita las barras de comentado a la siguiente línea si también quieres quitarla
// wp_unregister_ability( 'core/get-site-info' );
// Quita la información de usuario
// Quita las barras de comentado a la siguiente línea si también quieres quitarla
// wp_unregister_ability( 'core/get-user-info' );
}
Desactivar todas las abilities del core
Elimina las 3 abilities que registra WordPress por defecto, pero permite que plugins registren las suyas:
<?php
/**
* Quitar registro de todas las abilities de WP
*
* Quita las 3 abilities por defecto registradas por WordPress
* Las abilities de plugins seguirán funcionando
*/
add_action( 'wp_abilities_api_init', 'ayudawp_unregister_all_core_abilities', 20 );
function ayudawp_unregister_all_core_abilities() {
if ( ! function_exists( 'wp_unregister_ability' ) ) {
return;
}
$core_abilities = array(
'core/get-site-info',
'core/get-user-info',
'core/get-environment-info',
);
foreach ( $core_abilities as $ability ) {
wp_unregister_ability( $ability );
}
}
Desactivar abilities de plugins específicos
Si un plugin registra abilities que no quieres, puedes eliminarlas conociendo su nombre (siempre siguen el formato namespace/ability-name):
<?php
/**
* Quitar registro de abilities de plugins específicos
*
* Añade al array los nombres de ability que quieras quitar
*/
add_action( 'wp_abilities_api_init', 'ayudawp_unregister_plugin_abilities', 999 );
function ayudawp_unregister_plugin_abilities() {
if ( ! function_exists( 'wp_unregister_ability' ) ) {
return;
}
// Añade aquí las abilities que quieras quitar
// Ejemplo: 'woocommerce/get-products', 'jetpack/get-stats', etc.
$abilities_to_remove = array(
// 'slug-de-plugin/nombre-ability',
// 'otro-plugin/otra-ability',
);
foreach ( $abilities_to_remove as $ability ) {
wp_unregister_ability( $ability );
}
}
Consejo: Si tienes acceso a WP-CLI, puedes listar todas las abilities registradas en tu sitio con el comando wp ability list.
Bloquear el registro de nuevas abilities
Esta opción es más agresiva: impide que se registren abilities nuevas devolviendo siempre un error en la validación. Las abilities existentes del core se registran antes, así que también hay que eliminarlas:
<?php
/**
* Bloquea el registro de nuevas abilities
*
* Impide que se registren nuevas abilities devolviendo
* argumentos inútiles que hacen fallar la validación
*/
add_filter( 'wp_register_ability_args', 'ayudawp_block_ability_registration', 1, 2 );
function ayudawp_block_ability_registration( $args, $ability_name ) {
// Devuelve argumentos vacíos para hacer que falle el registro
return array();
}
// También quita las abilities de WP que se hayan registrado antes del filtro
add_action( 'wp_abilities_api_init', 'ayudawp_unregister_all_core_abilities', 20 );
function ayudawp_unregister_all_core_abilities() {
if ( ! function_exists( 'wp_unregister_ability' ) ) {
return;
}
$core_abilities = array(
'core/get-site-info',
'core/get-user-info',
'core/get-environment-info',
);
foreach ( $core_abilities as $ability ) {
wp_unregister_ability( $ability );
}
}
Desactivación completa de Abilities API
La opción más drástica: elimina los endpoints REST, bloquea el registro de nuevas abilities, elimina las del core y también elimina las categorías. Básicamente, deja la Abilities API inoperativa:
<?php
/**
* Desactivación completa de Abilities API
*
* - Quita los endpoints REST
* - Bloquea el registro de nuevas abilities
* - Quita el registro de todas las abilities de WP
* - Quita el registro de todas las categorías de abilities de WP
*/
// Quita endpoints REST
add_filter( 'rest_endpoints', 'ayudawp_disable_abilities_rest_endpoints' );
function ayudawp_disable_abilities_rest_endpoints( $endpoints ) {
foreach ( $endpoints as $route => $data ) {
if ( strpos( $route, '/wp-abilities/v1' ) === 0 ) {
unset( $endpoints[ $route ] );
}
}
return $endpoints;
}
// Bloquea el registro de nuevas abilities
add_filter( 'wp_register_ability_args', '__return_empty_array', 1 );
// Bloquea el registro de nuevas categorías de abilities
add_filter( 'wp_register_ability_category_args', '__return_empty_array', 1 );
// Quita las abilities de WP
add_action( 'wp_abilities_api_init', 'ayudawp_nuclear_unregister_abilities', 20 );
function ayudawp_nuclear_unregister_abilities() {
if ( ! function_exists( 'wp_unregister_ability' ) ) {
return;
}
// Quita el registro de todas las abilities de WP
$core_abilities = array(
'core/get-site-info',
'core/get-user-info',
'core/get-environment-info',
);
foreach ( $core_abilities as $ability ) {
wp_unregister_ability( $ability );
}
}
// Quita las categorías de abilities de WP
add_action( 'wp_abilities_api_categories_init', 'ayudawp_nuclear_unregister_categories', 20 );
function ayudawp_nuclear_unregister_categories() {
if ( ! function_exists( 'wp_unregister_ability_category' ) ) {
return;
}
// Quita el registro de todas las categorías de abilities de WP
$core_categories = array(
'site',
'user',
);
foreach ( $core_categories as $category ) {
wp_unregister_ability_category( $category );
}
}
Plugin para deshabilitar la Abilities API al gusto
Este pequeño trabalenguas (deshabilitar abilities jeje) se justifica porque si prefieres no andar con fragmentos de código he preparado un plugin que te permite elegir qué nivel de desactivación quieres desde una sencilla página de ajustes. De momento lo tengo aquí subido pero si gusta igual me animo, lo pongo bonito y lo subo a WordPress.org.
Opciones que ofrece:
- Ninguno – La Abilities API funciona con normalidad.
- Solo endpoints REST – Las abilities funcionan en PHP pero no se exponen vía REST API.
- Selectivo – Eliges qué abilities desactivar de las detectadas automáticamente o añadidas manualmente.
- Completo – Desactiva la Abilities API por completo.
El plugin detecta automáticamente las abilities expuestas mediante REST (las del core y las de plugins que las expongan correctamente).
Además incluye un campo para añadir abilities de forma manual, útil para plugins que registren abilities pero no las expongan en REST, o para prepararte para plugins futuros, solo tienes que escribirlas en formato namespace/ability-name (por ejemplo vigia/get-crawler-stats).
→ Descargar Disable Abilities API (ZIP)
¿Dónde se ponen los snippets?
Si optas por usar los snippets en lugar del plugin, tienes dos opciones en mi opinión (hay más pero te recomiendo estas):
- mu-plugin (recomendado): Crea un archivo PHP en
/wp-content/mu-plugins/con el código, se ejecutará automáticamente y no se puede desactivar por error desde el admin. - functions.php del tema hijo: Funciona, pero si cambias de tema perderás la configuración.
Cómo se comprueba que funcionan o no las abilities
Para comprobar que la desactivación ha surtido efecto:
- Endpoints REST: Visita
tu-sitio.com/wp-json/wp-abilities/v1/abilities– debería dar error 404 o lista vacía. - WP-CLI: Ejecuta
wp ability list– debería mostrar lista vacía o las abilities que hayas dejado activas. - PHP: Usa
wp_get_abilities()en tu código para ver qué abilities están registradas.
¿Dudas, agradecimientos, insultos?
¿Qué, interesante no?
Y lo que nos queda por aprender. Yo estoy como loco, de verdad que no había pasado nada tan interesante en tecnología en décadas, pero vaya, que una cosa no quita la otra, y tenemos que estar al día, y aquí me tienes, como siempre, para ayudarte con tu WordPress, y sino cerramos, jeje.
Venga, que los comentarios son gratis y se agradecen.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!






