Intereting Posts
вы можете установить значение по умолчанию для настраиваемого поля Необходимо изменить URL ссылки, встроенный в несколько сообщений, в новый URL ссылки Удалить роль суперадмина из меню «изменить роль в» в списке пользователей Как настроить WP CLI на машине разработки Windows с AMPPS? WooCommerce – добавление пользовательских полей для выставления счета Новый статус сообщения для пользовательского типа сообщения Медленное начальное время загрузки сайта Как удалить сиротские вложения? Как изменить локальный запрос, а не основной запрос Как запросить настраиваемый тип сообщения с фильтром таксономии, но отобразить страницу архива типа сообщения? Как установить сообщения на страницу с помощью WP_Query () как я вставляю галерею pdf в сообщение WordPress Запретный вкладчик просматривает черновики WordPress не может записывать файлы на сервере Ошибка 404 при создании динамических таблиц стилей

Рекомендуемый способ удаления 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; }