Как добавить пользовательские таблицы и эндпоинты в WP REST API?
Я создал пользовательские таблицы для продуктов, корзин и уведомлений из соображений производительности. Хочу сделать эти таблицы и их данные доступными для стандартных CRUD операций через WP REST API v2. Как добавить пользовательские таблицы (и их колонки) в API, чтобы можно было получать/обновлять эти записи?

В конечном итоге я нашел решение для своей таблицы restaurants
, которая находится рядом с таблицами wp_*
в моей базе данных WordPress. Надеюсь, это поможет:
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;
}
У меня есть различные варианты этого кода для всех необходимых CRUD-операций.

Я знаю, что это старый пост, но есть ли шанс, что вы могли бы выложить остальной ваш CRUD-код? Мне нравится ваш подход, и мне было бы интересно увидеть, как вы реализуете остальную часть. Я разрабатываю приложение на WP, которое может обрабатывать большую часть своих данных через CPT, но есть один огромный набор данных, который для производительности нужно поместить в "обычную" таблицу и сделать доступным через WP API. Большое спасибо.

Вместо создания пользовательских таблиц в базе данных, лучше создать собственные типы записей (в WordPress, начиная с версии 4.7+), а также любые необходимые пользовательские поля (и таксономии).
Всё это можно реализовать как плагин или через файл functions.php
в теме.
Вот очень простой, но подробный пример, как это сделать.
Он демонстрирует создание пользовательского типа записи (названного 'acme_products') с пользовательскими полями и возможностью добавления пользовательских таксономий (категорий). Всё с поддержкой REST API. Также в примере показано, как настроить поля ввода (метабоксы) для форм в админке и столбцы на страницах списка.
https://gist.github.com/kosso/47004c9fa71920b441f3cd0c35894409

У меня это сработало с REST API версии 1. Версия 2 отказала в разрешении на callback для выбора результатов из таблицы. Вот пример конечной точки для получения данных из пользовательской таблицы базы данных: domain.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()
));
});
