Come posso aggiungere tabelle personalizzate/endpoint all'API REST di WordPress?
Ho creato tabelle personalizzate per motivi di prestazioni per prodotti, carrelli e notifiche. Vorrei rendere queste tabelle e i loro dati disponibili per normali operazioni CRUD tramite l'API REST di WordPress v2. Come posso aggiungere tabelle personalizzate (e le loro colonne) all'API in modo da poter ottenere/aggiornare quei record?

Alla fine ho trovato una soluzione per la mia tabella restaurants
, che si trova insieme alle tabelle wp_*
nel mio database di WordPress. Spero che possa essere utile
add_action( 'rest_api_init', function () {
register_rest_route( 'restos/v1', '/all', array(
'methods' => 'GET',
'callback' => 'handle_get_all',
'permission_callback' => function () {
return current_user_can( 'edit_others_posts' );
}
) );
} );
function handle_get_all( $data ) {
global $wpdb;
$query = "SELECT qname, rname, recommendation FROM `restaurants`";
$list = $wpdb->get_results($query);
return $list;
}
Ho diverse varianti di questo codice per tutte le azioni CRUD di cui ho bisogno

So che è un vecchio post, ma c'è qualche possibilità che tu possa pubblicare il resto del tuo codice CRUD per favore? Mi piace il tuo approccio e sarei interessato a vedere come affronti il resto. Sto costruendo un'applicazione WP che può gestire la maggior parte dei suoi dati con CPT, ma c'è un enorme dataset che deve finire in una tabella 'normale' per questioni di performance, e deve essere accessibile tramite l'API di WP. Grazie mille.

Invece di creare tabelle personalizzate nel database, sarebbe meglio creare i tuoi tipi di post personalizzati (all'interno di WordPress - dalla versione 4.7 in poi), insieme a qualsiasi campo personalizzato di cui hai bisogno (così come le tassonomie).
Tutto questo può essere fatto tramite un plugin o attraverso il file functions.php
di un tema.
Ecco un esempio molto semplice ma completo di come fare ciò.
Mostra come creare un tipo di post personalizzato (chiamato 'acme_products') e i suoi campi personalizzati con la possibilità di utilizzare tassonomie personalizzate (categorie). Tutto con il supporto per l'API REST integrato. Ti mostrerà anche come personalizzare le caselle di input (meta) per i moduli di WP-Admin e le colonne delle pagine di elenco.
https://gist.github.com/kosso/47004c9fa71920b441f3cd0c35894409

Per me ha funzionato con l'API REST v1. La v2 ha rifiutato il permesso di callback per la selezione dei risultati della tabella. Ecco un esempio di endpoint per recuperare dati da una tabella personalizzata del database: dominio.com/wp-json/test/v1/testing
add_action( 'rest_api_init', function () {
$namespace = 'test/v1';
$route = '/testing';
register_rest_route($namespace, $route, array(
'methods' => WP_REST_Server::READABLE,
'callback' => function () {
global $wpdb;
$table = $wpdb->prefix . 'test';
$query = "SELECT name, color, etc.. FROM $table";
$results = $wpdb->get_results($query);
return $results;
},
'permission_callback' => '__return_true',
'args' => array()
));
});
