J'essaie d'exécuter un plugin personnalisé sur wp 4.7.4. Ci-dessous mon plugin 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;
}
Lorsque je demande wp-json
endpoint, je ne vois aucune route de plug-in à cet endroit. Le plugin a été activé avec succès. Ai-je raté quelque chose? Le plugin ci-dessus (ou un plug-in similaire basé sur l'événement rest_api_init
) fonctionne-t-il pour quelqu'un d'autre? Merci.
Voir ci-dessous la liste de contrôle,
1. Changez votre permalien en joli permalien et vérifiez.
2. Vérifiez votre fichier .htacess (il devrait être accessible en écriture lorsque vous sauvegardez la structure permalink, il est réinscriptible par wp).
3. Check Auth.
4. Vérifiez ci-dessous la méthode de création de point de terminaison personnalisée,
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/author/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'my_awesome_func',
) );
} );
REF: https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/
Dans mon cas, le rappel était en fait une méthode privée. Je devais le changer à une méthode publique pour que tout fonctionne:
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();
Sur une installation, la méthode étant privée provoquait une erreur avec une trace de pile, mais sur une autre installation, la méthode privée n'était tout simplement pas appelée et aucune erreur n'était générée. Je ne sais toujours pas pourquoi une machine a réagi dans un sens et non dans l'autre, alors que WP_DEBUG
et WP_DEBUG_LOG
étaient définis sur true.
J'ai la solution, vous devez utiliser wp-json avec votre URL ... comme https://votredomaine.com/wp-json/namespace/and-so-on/
Alors ça va marcher. Il me manquait wp-json dans l'URL.
En utilisant la dernière version, l'action "rest_api_init" n'a pas été déclenchée. On dirait que ce code dans plugin.php est toujours vide et retourne, ne permettant jamais à l'action rest_api_init d'être déclenchée:
if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
return;
}