Как добавить пользовательские таблицы и эндпоинты в WP REST API?

26 мар. 2016 г., 20:49:25
Просмотры: 14.9K
Голосов: 9

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

2
Комментарии

Вы нашли решение? У меня такой же вопрос.

Simon H Simon H
12 апр. 2017 г. 21:45:52

Пока нет. Временно использовал пользовательские типы записей. Не самое лучшее решение, но пока не разобрался.

codescribblr codescribblr
18 апр. 2017 г. 15:29:09
Все ответы на вопрос 3
1
12

В конечном итоге я нашел решение для своей таблицы 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-операций.

18 апр. 2017 г. 15:31:18
Комментарии

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

User User
10 июн. 2019 г. 03:34:42
0

Вместо создания пользовательских таблиц в базе данных, лучше создать собственные типы записей (в WordPress, начиная с версии 4.7+), а также любые необходимые пользовательские поля (и таксономии).

Всё это можно реализовать как плагин или через файл functions.php в теме.

Вот очень простой, но подробный пример, как это сделать.

Он демонстрирует создание пользовательского типа записи (названного 'acme_products') с пользовательскими полями и возможностью добавления пользовательских таксономий (категорий). Всё с поддержкой REST API. Также в примере показано, как настроить поля ввода (метабоксы) для форм в админке и столбцы на страницах списка.

https://gist.github.com/kosso/47004c9fa71920b441f3cd0c35894409

19 янв. 2017 г. 01:28:38
0

У меня это сработало с 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()
        ));
    });
4 янв. 2022 г. 15:22:35