evento rest_api_init no activado

3 minutos de lectura

avatar de usuario
Anton Putaú

Estoy tratando de ejecutar un complemento personalizado en wp 4.7.4. A continuación se muestra mi complemento simple

add_action( 'rest_api_init', 'register_routes');


function register_routes() {
   register_rest_route( 'taxonomy-manager/v1', '/taxonomies/(P<taxonomy_type>[a-zA-Z]+)', array(
   'methods' => 'GET',
   'callback' => 'get_or_insert'
  ) );
} 

function get_or_insert( WP_REST_Request $request ) {

   $parameters = $request->get_params();

   return $parameters;

}

cuando pido wp-json punto final No veo ninguna ruta de complemento allí. El complemento se activó con éxito. ¿Me he perdido algo? ¿El complemento anterior (o uno similar basado en rest_api_init event) funciona para alguien más? Gracias.

  • ¿Tienes bonitos enlaces permanentes habilitados?

    – Ty Bailey

    31 mayo 2017 a las 20:34

  • @TyBailey, en la configuración de enlaces permanentes tengo la estructura ‘Día y nombre’.

    – Anton Putaú

    1 de junio de 2017 a las 8:31

  • ¿Puedes probar una página estática y ver si funciona? Descarte algo que suceda con .htaccess o alguna otra regla de enrutamiento en algún otro lugar de su código. No olvides que también hay una precedencia. Es posible que desee agregar el cuarto parámetro como verdadero.

    – Shawn

    1 jun 2017 a las 20:52

Tengo una solución, necesitas usar wp-json con tu URL… como https://yourdomain.com/wp-json/namespace/and-so-on/

Entonces funcionará. Me faltaba wp-json en la URL.

avatar de usuario
Gnanasekaran Loganathan

Consulte la siguiente lista de verificación,
1. Cambie su enlace permanente como un enlace permanente bonito y compruébelo.
2. Verifique su archivo .htacess (debe ser escribible cuando guarde la estructura de enlace permanente, wp lo puede volver a escribir).
3. Verifique la autenticación.
4. Verifique a continuación el método de creación de punto final personalizado,

add_action( 'rest_api_init', function () {
  register_rest_route( 'myplugin/v1', '/author/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'my_awesome_func',
  ) );
} );

REFERENCIA: https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

  • Muy enlace permanente hizo el trabajo

    – Muhammad Arslán

    21 de abril de 2021 a las 5:27

En mi caso, la devolución de llamada era en realidad un método privado. Tuve que cambiarlo a un método público para que todo funcionara:

class Example {
    function __construct() {
        add_action( 'rest_api_init', [ $this, 'example_method' ] );
    }

    public function example_method() {
        /* This will not work if the method is private! */
        /* ... */
    }
}
new Example();

En una instalación, el método privado provocó un error con un seguimiento de la pila, pero en otra instalación, el método privado simplemente no se llamó y no se generaron errores. Todavía no estoy seguro de por qué una máquina reaccionó de una manera y no de la otra, ambas tenían WP_DEBUG y WP_DEBUG_LOG establecido en verdadero.

Usando la última compilación, no veo que se active la acción rest_api_init. Parece que este código en plugin.php siempre está vacío y regresa, sin permitir que se active la acción rest_api_init:

if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
    return;
}

Compruebe si su complemento está activado, no se activará si no está activado.

¿Ha sido útil esta solución?