Añadir un endpoint a la REST API

Php marzo 10, 2026

La REST API de WordPress permite que aplicaciones externas interactúen con el contenido del sitio mediante peticiones HTTP estándar. Crear endpoints propios es esencial para desarrollar apps móviles, sitios headless con React/Vue/Next.js, o integrar WordPress con herramientas externas. Cada endpoint define su ruta, métodos HTTP permitidos y permisos de acceso.

Casos de uso: app móvil que consume el contenido del sitio, frontend en React separado del backend WordPress, integración con herramientas de terceros, exportación de datos en formato JSON.

<?php
add_action( 'rest_api_init', 'mi_registrar_endpoint' );
function mi_registrar_endpoint() {
    register_rest_route(
        'mi-plugin/v1',
        '/proyectos',
        array(
            'methods'             => 'GET',
            'callback'            => 'mi_endpoint_proyectos',
            'permission_callback' => '__return_true',
        )
    );
}

function mi_endpoint_proyectos( WP_REST_Request $request ) {
    $query = new WP_Query( array(
        'post_type'      => 'proyecto',
        'posts_per_page' => 10,
    ) );

    $data = array();
    foreach ( $query->posts as $post ) {
        $data[] = array(
            'id'     => $post->ID,
            'titulo' => get_the_title( $post ),
            'url'    => get_permalink( $post ),
        );
    }

    return rest_ensure_response( $data );
}
// Acceso: /wp-json/mi-plugin/v1/proyectos

¿Qué hace cada parte?

  • rest_api_init: hook específico para registrar endpoints de la REST API. Es el único hook correcto para esto.
  • register_rest_route(): registra la ruta. El primer parámetro es el namespace (nombre del plugin + versión), el segundo la ruta relativa dentro del namespace.
  • methods => ‘GET’: define los métodos HTTP permitidos. Puede ser GET, POST, PUT, DELETE o una combinación con WP_REST_Server::READABLE, CREATABLE, etc.
  • permission_callback => ‘__return_true’: hace el endpoint público. Para restringirlo a usuarios logueados usa 'is_user_logged_in' o una función que compruebe capacidades.
  • WP_REST_Request $request: objeto con todos los datos de la petición — parámetros GET/POST, cabeceras, body. Úsalo con $request->get_param( 'nombre' ).
  • rest_ensure_response(): asegura que la respuesta sea un objeto WP_REST_Response correcto y gestiona los errores de forma estándar.