Intereting Posts
Включение создания пользователя с помощью «Интеграция с Active Directory» Категория фильтра на странице магазина WooCommerce для отображения связанной подкатегории Отключить страницу главного магазина Woocommerce, но не страницы страниц категории продуктов Как импортировать только определенные комментарии из сообщения Как мне потребовать файл в коротком коде? Есть ли способ изменить почтовый заказ через клик пользователя? Как получить расположение меню в wp_update_nav_menu Проблемы с пейджингом Как упорядочить и отсортировать галерею изображений программное добавление категорий к пользовательской таксономии Ограничьте количество успешных логинов Как заказывать теги по тегам? Как изменить атрибут title для изображения логотипа WP на wp-login.php Сортировать по категориям Страница установленных плагинов не отображается в панели инструментов 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?

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

Согласно документам 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/ .

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