create wordpress rest routes wp-api

create - wordpress post rest api



Deshabilitar rutas predeterminadas de WP REST API (3)

Según la otra pregunta, esta es la única forma "limpia" de hacerlo actualmente. La forma más limpia de abordar las cosas en Wordpress es mediante el uso de filtros y / o acciones; esto le permite interactuar con el núcleo sin realizar cambios en el núcleo.

Al hacer clic en filtros / acciones, también le está dando a otros complementos la oportunidad de operar en los argumentos de filtro / acción antes / después de su enlace.

Si echa un vistazo a class-wp-rest-server.php , puede ver fácilmente todos los filtros disponibles y las acciones relacionadas con el descanso.

Notarás este en particular:

/** * Filters the array of available endpoints. * * @since 4.4.0 * * @param array $endpoints The available endpoints. An array of matching regex patterns, each mapped * to an array of callbacks for the endpoint. These take the format * `''/path/regex'' => array( $callback, $bitmask )` or * `''/path/regex'' => array( array( $callback, $bitmask ). */ $endpoints = apply_filters( ''rest_endpoints'', $this->endpoints );

Según mi investigación, este es el último lugar para modificar (eliminar, cambiar o agregar) puntos finales, y es el propósito exacto del filtro.

Como nota al margen, no es necesario que lo haga "uno por uno"; puede hacer $endpoints = [] para comenzar de cero.

Necesito desactivar las rutas predeterminadas de WP REST API y agregar rutas personalizadas.

Encontré esta pregunta que me ayuda a encontrar la siguiente respuesta.

remove_action(''rest_api_init'', ''create_initial_rest_routes'', 99);

Sin embargo, esto también eliminará cualquier tipo de rutas de contenido personalizado. Entonces, en su lugar, puede optar por usar:

add_filter(''rest_endpoints'', function($endpoints) { if ( isset( $endpoints[''/wp/v2/users''] ) ) { unset( $endpoints[''/wp/v2/users''] ); } // etc });

Pero de esa manera necesito saber todas las rutas predeterminadas y eliminar una por una, que no es la forma más limpia de hacerlo.

Me gustaría saber si hay alguna manera más limpia de lograr eso?

ACTUALIZACIÓN 1:

Según la sugerencia de Chris, agregaría más detalles a la pregunta.

Actualmente estoy usando el filtro rest_api_init para agregar mis rutas personalizadas mediante el método register_rest_route según el siguiente código que encontré en este artículo .

add_action( ''rest_api_init'', function () { register_rest_route( ''myplugin/v1'', ''/sample/'', array( ''methods'' => ''GET'', ''callback'' => ''my_awesome_func'', ) ); } ); function my_awesome_func( $data ) { return ''somthing''; }

La ruta personalizada funciona bien, pero desafortunadamente no puedo deshabilitar las rutas predeterminadas como /wp/v2/posts .

Mi pregunta :

¿Cómo desarmar / desactivar las rutas predeterminadas al usar el filtro rest_api_init para registrar nuevas rutas personalizadas?


REST API Toolbox hizo el trabajo por mí.

Podemos manejar muchas cosas a través de ese complemento.


Esta pregunta ya ha aceptado la respuesta. Pero si alguien encuentra esto útil. Podemos eliminar fácilmente las rutas predeterminadas. Agregue el siguiente código en functions.php de su tema (tema infantil si lo hay) o en cualquier complemento personalizado

add_filter(''rest_endpoints'', function( $endpoints ) { foreach( $endpoints as $route => $endpoint ){ if( false !== stripos( $route, ''/wp/'' ) ){ unset( $endpoints[ $route ] ); } } return $endpoints; });