Intereting Posts
Обнаружение браузера браузера Safari и включение обнаружения в короткий код Загрузка изображения с внешнего интерфейса с помощью иконок Добавление значений параметров в виде массива с использованием многоразового блока выбора Пользовательский пост.php Как назначить дополнительную / дополнительную / вторую пользовательскую роль нескольким пользователям (определенной роли пользователя) Как показать содержимое страницы, а также списки сообщений Как применить класс к пользовательским пунктам меню на основе пользовательских ролей Получить термин «слизняк» текущего сообщения Моя пользовательская страница шаблона не загружает содержимое внутри него? возможно ли открыть ссылки в новом окне? Любые предложения о том, как сделать эту функцию более эффективной или более полезной? Редактирование размера изображения – для редактирования основного файла изображения Как скрыть ссылки на страницы из меню темы Как изменить метку столбца в параметрах экрана для настраиваемого столбца? Создать вкладки «Создать» в файле single-{content-type} .php с настройками Custom Field

Попытка получить персонализированную мета-почту через 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/ .

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