Intereting Posts
Популярное сообщение 'недели' Права доступа к файлам на основе подписи под открытым небом в Git Использование media-upload.php – требует от пользователя возможности edit_posts? Как изменить количество сообщений, отображаемых на главной странице, и на другие страницы? Плагин превышает ограничение памяти Странная проблема с настройкой WP 3.0 с балансировкой нагрузки the_content () Возвращает содержимое сообщения, когда мне нужен контент страницы Включая CSS и JS на экране администратора настраиваемых параметров темы WordPress Dashboard организует сообщения по категориям Один пост несет 30 значений после метмы, это слишком много? Создать пост для каждого пользователя? Предоставление большего количества элементов в комментариях через functions.php Показать сообщения в категории x и y с шестой по счету последней публикации woocommerce отображает продукты определенной страницы Регистрация без адреса электронной почты!

Рекомендуемый способ удаления WP REST API возвращаемых данных для пользовательской почты

Я искал правильный способ изменения возвращаемых ответов для пользовательского типа сообщений. Я нашел способ сделать это, но официальная документация отпугивает этот метод.

Я лично не думаю, что это имеет значение, поскольку это настраиваемый тип сообщения, который взаимодействует только с частью приложения, с которым я работал, но я все равно хотел бы сделать это надлежащим образом.

WordPress предлагает создать пользовательский контекст перед удалением любых данных из ответа, но я не могу найти документацию, показывающую, как это сделать. Может кто-то указать мне в правильном направлении на это.

Я знаю, что они сильно отговаривают эту практику, но я получаю более 20 полей, которые включают в себя массивы и объекты, когда мне нужно всего лишь 5/6 из них. Я уверен, что это сильно повлияет на скорость и отзывчивость приложения.

Solutions Collecting From Web of "Рекомендуемый способ удаления WP REST API возвращаемых данных для пользовательской почты"

Пока в документах указано:

Обратите внимание, что API не может помешать вам изменять ответы, но код структурирован, чтобы сильно препятствовать этому. Внутренне регистрация поля осуществляется фильтрами , и их можно использовать, если у вас нет другого выбора.

в большинстве случаев есть другой выбор, а именно: пользовательские конечные точки / маршруты .

Вы даже можете назначить класс контроллера останова для CPT. Таким образом, вы можете расширить WP_Rest_Posts_Controller и установить настраиваемые конечные точки, их маршруты , параметры и соответствующие обратные вызовы, чтобы отвечать тем, что вам нужно.

Шаги включают:

  1. set rest_controller_class для пользовательского типа сообщения (CPT)
  2. Extend WP_REST_Controller или WP_REST_Posts_Controller
  3. Зарегистрировать маршруты и определить методы
  4. Возможно управление форматом ответа с помощью схемы

ПРИМЕЧАНИЕ: WP_REST_Posts_Controller сам расширяет WP_REST_Controller .

Установка аргумента rest_controller_class для CPT:

1) В массиве $args при регистрации:

  $labels = array( ... ); $args = array( 'labels' => $labels, ... ... 'show_in_rest' => true, 'rest_base' => 'my_rest_base', //'rest_controller_class' => 'WP_REST_Posts_Controller', 'rest_controller_class' => 'My_CPT_Controller_Class' ); register_post_type( 'my-post-type', $args ); 

2) Чтобы добавить после регистрации CPT, используйте крючок фильтра: register_post_type_args

 function add_rest_stuff( $args, $post_type ) { $custom_post_type = 'my-post-type'; if ( $post_type !== $custom_post_type ) { return $args; } $args['show_in_rest'] = true; $args['rest_base'] = 'my_rest_base'; $args['rest_controller_class'] = 'My_CPT_Controller_Class'; return $args; } add_filter('register_post_type_args', 'make_it_public' ); 

Расширение WP_REST_Controller для пользовательских конечных точек / маршрутов (ов):

Быстрый частичный пример в качестве отправной точки (из предыдущего ответа )

  class My_CPT_Controller_Class extends WP_REST_Controller { public function __construct() { add_action( 'rest_api_init', array( $this, 'register_routes' ) ); }//end __construct public function register_routes() { $version = '1'; $namespace = 'my-fancy-namespace/v' . $version; $base = 'my-route-base'; // so, site.com/wp-json/my-fancy-namespace/v1/my-route-base/ register_rest_route( $namespace, '/'. $base, array( array( 'methods' => 'GET', 'callback' => array( $this, 'my_get_callback' ), 'permission_callback' => array( $this, 'key_permissions_check' ), ), array( 'methods' => 'POST', 'callback' => array( $this, 'my_post_callback' ), 'permission_callback' => array( $this, 'key_permissions_check' ), ),) ); $base2 = 'my-second-base'; // so, site.com/wp-json/my-fancy-namespace/v1/my-second-base/ register_rest_route( $namespace, '/'. $base2, array( array( 'methods' => 'GET', 'callback' => array( $this, 'my_get_callback_two' ), 'permission_callback' => array( $this, 'key_permissions_check' ), ), array( 'methods' => 'POST', 'callback' => array( $this, 'my_post_callback_two' ), 'permission_callback' => array( $this, 'key_permissions_check' ), ),) ); }//register_routes public function key_permissions_check() { //do permissions check stuff } public function my_get_callback( WP_REST_Request $request ) { //do stuff with $request //see the methods mentioned below }//end }//end class 

Класс WP_Rest_Request предоставляет несколько методов для обработки $request .

схема

Посмотрите на схему, а также на построение ответов.

Я добавил prefix_get_comment() из нижней части этой страницы, поскольку это простой пример:

 function prefix_register_my_comment_route() { register_rest_route( 'my-namespace/v1', '/comments', array( // Notice how we are registering multiple endpoints the 'schema' equates to an OPTIONS request. array( 'methods' => 'GET', 'callback' => 'prefix_get_comment_sample', ), // Register our schema callback. 'schema' => 'prefix_get_comment_schema', ) ); } /** * Get our sample schema for comments. */ function prefix_get_comment_schema() { $schema = array( // This tells the spec of JSON Schema we are using which is draft 4. '$schema' => 'http://json-schema.org/draft-04/schema#', // The title property marks the identity of the resource. 'title' => 'comment', 'type' => 'object', // In JSON Schema you can specify object properties in the properties attribute. 'properties' => array( 'id' => array( 'description' => esc_html__( 'Unique identifier for the object.', 'my-textdomain' ), 'type' => 'integer', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'author' => array( 'description' => esc_html__( 'The id of the user object, if author was a user.', 'my-textdomain' ), 'type' => 'integer', ), 'content' => array( 'description' => esc_html__( 'The content for the object.', 'my-textdomain' ), 'type' => 'string', ), ), ); return $schema; }