web-dev-qa-db-fra.com

Douane REST Le point de terminaison de l'API retourne rest_no_route lorsqu'il est appelé via le lien permanent wp-json

J'ai le code suivant dans mon plugin, qui pendant le développement a parfaitement fonctionné (appelé dans rest_api_init).

// ?rest_route=bridge/v1/test-data/process/bbe_examples
    register_rest_route(
        'bridge/v1', '/(?P<participant>[a-zA-Z0-9-_]+)/process/(?P<section>[a-zA-Z0-9-_]+)', [
            'methods'  => 'GET',
            'callback' => [ $this->api, 'process' ],
        ]
    );

<My URL>/index.php?rest_route=/bridge/v1/test-data/process/bbe_sortables&replace&_wpnonce=<thenonce> fonctionne bien, qu'ils soient activés ou non.

<My URL>/wp-json/bridge/v1/test-data/process/bbe_sortables&replace&_wpnonce=<thenonce> renvoie 404 rest_no_route à l'appel.

Ces deux boutons sont actuellement appelés par certains boutons générés, générés à l'aide de rest_url( "bridge/v1/test-data/process/" ) (la variable section est ajoutée à la chaîne lors de l'affichage).

Je ne suis pas tout à fait sûr de ce qui ne va pas ici. J'ai supposé que je devais générer l'URL complète avec rest_url(), mais lorsqu'il est directement appelé via le navigateur ou le système d'API, la réponse est la même.

1
soup-bowl

Le problème est avec le bbe_sortables&replace dans le permalien:

<My URL>/wp-json/bridge/v1/test-data/process/bbe_sortables&replace&_wpnonce=<thenonce>

qui aboutit à un itinéraire non valide, où la chaîne de requête supposée est considérée comme faisant partie de l'itinéraire:

/bridge/v1/test-data/process/bbe_sortables&replace&_wpnonce=<thenonce>

(la route valide pour cette URL est /bridge/v1/test-data/process/bbe_sortables)

et finalement l'API REST _ lève l'erreur rest_no_route.

Pour résoudre le problème, utilisez add_query_arg() lors de la génération de l'URL, pour ajouter la chaîne de requête appropriée. par exemple. avec rest_url() :

$url = add_query_arg( array(
    'replace'  => 'VALUE',
    '_wpnonce' => 'VALUE',
), rest_url( 'bridge/v1/test-data/process/bbe_sortables/' ) );

/* Sample $url output:

a) Permalinks enabled
http://example.com/wp-json/bridge/v1/test-data/process/bbe_sortables/?replace=VALUE&_wpnonce=VALUE

b) Permalinks *not* enabled
http://example.com/index.php?rest_route=%2Fbridge%2Fv1%2Ftest-data%2Fprocess%2Fbbe_sortables%2F&replace=VALUE&_wpnonce=VALUE
*/

Ou si vous êtes certain que les permaliens sont toujours activés sur le site, alors tout ira bien:

rest_url( 'bridge/v1/test-data/process/bbe_sortables/?replace=VALUE&_wpnonce=VALUE' )
0
Sally CJ