Cómo agregar tablas/endpoints personalizados a la API REST de WordPress

26 mar 2016, 20:49:25
Vistas: 14.9K
Votos: 9

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?

2
Comentarios

¿Encontraste una solución? Tengo la misma pregunta.

Simon H Simon H
12 abr 2017 21:45:52

Todavía no. Por ahora usé custom post types como solución temporal. No es la mejor opción, pero aún no he podido resolverlo.

codescribblr codescribblr
18 abr 2017 15:29:09
Todas las respuestas a la pregunta 3
1
12

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

18 abr 2017 15:31:18
Comentarios

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.

User User
10 jun 2019 03:34:42
0

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

19 ene 2017 01:28:38
0

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()
        ));
    });
4 ene 2022 15:22:35