Intereting Posts
Детский раздел с раздвижными дверями Заказы отправляются на неправильный адрес электронной почты администратора в WooCommerce Опубликовать проверку, если отредактированный контент имеет HTML-раздел "div" Показать продукты woocommerce в архиве авторов is_admin () не работает при обновлении сообщения в панели администратора Как я могу передать $ post объект в 'save_post' add_action? Если пользовательский поиск по категориям, а затем страница 2 не найден Как остановить фатальную ошибку при загрузке файла шаблона темы напрямую Не удалось создать настраиваемое поле после попытки создать список последних сообщений в шаблоне страницы. Добавление нового значения в существующий мета ключ Я не могу добавить больше категорий в мое меню Использование wp_get_image_editor в автономном скрипте Как решить проблему «Устранить блокирование визуализации JavaScript и CSS в верхнем слое» для нескольких файлов? Регистрация google jquery будет перезаписана плагином Я переместил сайт WordPress в основной каталог, и теперь я не могу получить доступ к моему администратору

Попытка получить персонализированную мета-почту через Jetpack JSON API

Я использую Jetpack для WordPress для создания JSON API для настраиваемого типа сообщений для моих событий , который отлично работает:

https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100

Однако этот CPT также включает в себя немало почтовых метаполей, созданных Custom Meta Boxes и Fields для WordPress . Эти поля включают такие вещи, как:

  • _ecmb_supporting_bands
  • _ecmb_tickets_avail
  • _ecmb_event_agelim

И по умолчанию эти поля не возвращаются API JSON … Я пытался запускать запросы, такие как:

https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100&meta_key='_ecmb_supporting_bands'

Или без кавычек вокруг мета-ключа: https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100&meta_key=_ecmb_supporting_bands

К сожалению, это не работает. Кто-нибудь знает, как я могу вернуть эти настраиваемые метаполя в ответ на JSON?

Solutions Collecting From Web of "Попытка получить персонализированную мета-почту через Jetpack JSON API"

Из документации:

Согласно документам JetPack JSON API :

По умолчанию все ключи метаданных разрешены в API, если они не являются защищенными ключами. Любой ключ метаданных, который начинается с _, по умолчанию защищен. Тем не менее, ключи защищенных метаданных могут быть доступны и отредактированы пользователями с параметрами edit_post_meta (используется для редактирования и просмотра), add_post_meta и delete_post_meta, как это подходит для каждой операции. Мы также добавили фильтр rest_api_allowed_public_metadata, который позволяет вам настраивать определенные белые ключи определенных метаданных для доступа любого пользователя, даже если этот ключ защищен.

поэтому фильтр rest_api_allowed_public_metadata – это то, что вы ищете.

Из исходного кода:

Если вы проверите исходный код JetPack, вы найдете эту часть:

  function is_metadata_public( $key ) { if ( empty( $key ) ) return false; // whitelist of post types that can be accessed if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', array() ) ) ) return true; return false; } 

в файле class.json-api-endpoints.php .

Вы также можете проверить allow_bbpress_public_metadata() здесь, чтобы увидеть, как реализовать этот фильтр rest_api_allowed_public_metadata .

Пример:

Вот пример для вашего случая:

 /** * Whitelist protected meta keys * * @param array $allowed_meta_keys * @return array $allowed_meta_keys */ function custom_rest_api_allowed_public_metadata( $allowed_meta_keys ) { // only run for REST API requests if ( ! defined( 'REST_API_REQUEST' ) || ! REST_API_REQUEST ) return $allowed_meta_keys; $allowed_meta_keys[] = '_ecmb_supporting_bands'; $allowed_meta_keys[] = '_ecmb_tickets_avail'; $allowed_meta_keys[] = '_ecmb_event_agelim'; return $allowed_meta_keys; } add_filter( 'rest_api_allowed_public_metadata', 'custom_rest_api_allowed_public_metadata' ); 

с выходом JSON, подобным этому:

 "metadata":[{"id":"196711","key":"_ecmb_event_agelim","value":"18"}, {"id":"196709","key":"_ecmb_supporting_bands","value":"The Rolling Stones"}, {"id":"196710","key":"_ecmb_tickets_avail","value":"5500"}] 

В дополнение к ответу @birgire, размещение кода фильтра где-то может быть сложным:

  • Если вы разместите его под файлом «functions.php» вашей темы, обновление темы может перезаписать ваш код
  • Написание плагина для добавления фильтра – это много пуха

Вот почему я использовал следующий плагин, который позволяет вам писать свои пользовательские действия и фильтры в панели администратора WordPress, не беспокоясь о его потере. http://wordpress.org/plugins/add-actions-and-filters/ .

У меня была такая же проблема, как у вас, и после включения фильтра теперь он работает как шарм.