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.
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' )