Cómo agregar tablas/endpoints personalizados a la API REST de WordPress
He creado tablas personalizadas por razones de rendimiento para productos, carritos y notificaciones. Quiero hacer que estas tablas y sus datos estén disponibles para operaciones CRUD normales a través de la API REST de WP v2. ¿Cómo puedo agregar tablas personalizadas (y sus columnas) a la API para poder obtener/actualizar esos registros?

Eventualmente encontré una solución para mi tabla restaurants
, que se encuentra junto a las tablas wp_*
en mi base de datos de WordPress. Espero que esto ayude.
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;
}
Tengo variaciones sobre este tema para todas las acciones CRUD que necesito

Sé que es una publicación antigua, pero ¿habría alguna posibilidad de que compartieras tu otro código CRUD por favor? Me gusta tu enfoque y estaría interesado en ver cómo abordas el resto. Estoy construyendo una aplicación de WP que puede manejar la mayoría de sus datos con CPTs, pero hay un gran conjunto de datos que necesita ir a una tabla 'normal' por rendimiento, y ser accesible a través de la API de WP. Muchas gracias.

En lugar de crear tablas personalizadas en la base de datos, sería mejor que crearas tus propios tipos de contenido personalizados (dentro de WordPress - Desde la versión 4.7.+), junto con los campos personalizados que necesites (así como taxonomías).
Todo esto se puede hacer como un plugin o mediante el archivo functions.php
de un tema.
Aquí hay un ejemplo muy simple pero completo de cómo hacerlo.
Muestra cómo crear un tipo de contenido personalizado (llamado 'acme_products') y sus campos personalizados con la capacidad de usar taxonomías personalizadas (categorías). Todo con soporte para REST API incluido. También te mostrará cómo personalizar los cuadros de entrada (meta) para los formularios de WP-Admin y las columnas de las páginas de listado.
https://gist.github.com/kosso/47004c9fa71920b441f3cd0c35894409

Acaba de funcionarme con la API REST v1. La v2 rechazó el permiso de callback para seleccionar los resultados de la tabla. Aquí tienes un ejemplo de endpoint para obtener datos desde una tabla personalizada: 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()
));
});
