Вопрос или проблема
Когда я делаю REST-запрос для поста, я не получаю никаких пользовательских полей (мета). Есть ли REST-запрос или параметр, который я могу использовать, чтобы получить метаинформацию вместе со всей информацией о посте?
Как упомянул буэлтге, вам нужно зарегистрировать пользовательские метаполя и сделать их доступными для API. У меня недавно была эта проблема, когда я пытался получить пользовательское метаполе для наших пользователей. Я думаю, что моё решение будет работать для вас, если вы адаптируете его для постов вместо пользователей (обратите внимание на раздел Зарегистрировать новое поле
). Документация codex тоже была очень полезной.
// Расширяет профили пользователей полем building_id
function fb_add_custom_user_profile_fields( $user ) {
?>
<table class="form-table">
<tr>
<th>
<label for="building_id"><?php _e('ID здания', 'your_textdomain'); ?>
</label></th>
<td>
<input type="text" name="building_id" id="building_id" value="<?php echo esc_attr( get_the_author_meta( 'building_id', $user->ID ) ); ?>" class="regular-text" /><br />
<span class="description"><?php _e('Пожалуйста, введите ваш building_id.', 'your_textdomain'); ?></span>
</td>
</tr>
</table>
<?php }
function fb_save_custom_user_profile_fields( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
return FALSE;
update_usermeta( $user_id, 'building_id', $_POST['building_id'] );
}
add_action( 'show_user_profile', 'fb_add_custom_user_profile_fields' );
add_action( 'edit_user_profile', 'fb_add_custom_user_profile_fields' );
add_action( 'personal_options_update', 'fb_save_custom_user_profile_fields' );
add_action( 'edit_user_profile_update', 'fb_save_custom_user_profile_fields' );
// Регистрация нового поля (building_id) и его экспонирование в WP REST API
// См. документацию: https://developer.wordpress.org/reference/functions/register_rest_field/
add_action( 'rest_api_init', 'create_api_users_meta_field' );
function create_api_users_meta_field() {
// Пример формата codex: register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
register_rest_field( 'user', 'building_id', array(
'get_callback' => 'get_user_meta_for_api',
'schema' => null,
)
);
}
function get_user_meta_for_api( $object ) {
// Получаем ID пользователя из массива объекта
$user_id = $object['id'];
// Возвращаем мета пользователя
return get_user_meta( $user_id );
}
.
Ответ или решение
Для успешной работы с пользовательскими полями (мета-данными) в REST API WordPress необходимо правильно зарегистрировать эти поля и сделать их доступными через API. Если вы сталкиваетесь с проблемой отсутствия мета-данных при выполнении запроса на получение постов, следуйте приведенной ниже инструкции.
Шаг 1: Регистрация пользовательских мета-полей
Сначала вам нужно зарегистрировать ваши пользовательские мета-поля и сделать их доступными в REST API. Для этого вы можете использовать хук rest_api_init
.
add_action('rest_api_init', 'create_api_posts_meta_field');
function create_api_posts_meta_field() {
register_rest_field('post', 'custom_meta_field', array(
'get_callback' => 'get_post_meta_for_api',
'schema' => null,
));
}
function get_post_meta_for_api($object) {
// Получаем ID поста
$post_id = $object['id'];
// Возвращаем нужные мета-данные
return get_post_meta($post_id);
}
В этом коде мы регистрируем новое поле custom_meta_field
для постов, используя функцию register_rest_field
. Это поле будет возвращать все мета-данные, связанные с постом.
Шаг 2: Использование поля в запросах REST API
После регистрации мета-полей вы сможете использовать их в ваших REST-запросах на получение постов. Например, вы можете выполнить GET-запрос к следующему эндпоинту:
GET /wp-json/wp/v2/posts
В результате ответа вы увидите стандартные поля поста, а также новое поле custom_meta_field
, в котором будут перечислены все ваши мета-данные.
Шаг 3: Проверка результата
После выполнения запроса убедитесь, что в ответе присутствует ваше новое поле. Пример ответа может выглядеть следующим образом:
[
{
"id": 1,
"title": {
"rendered": "Заголовок поста"
},
"content": {
"rendered": "Содержимое поста"
},
"custom_meta_field": {
"building_id": "12345",
"another_meta_field": "значение"
}
}
]
Заключение
Следуя данным шагам, вы сможете успешно получить мета-данные ваших постов через REST API. Это не только расширяет функциональность вашего API, но и позволяет эффективно управлять данными на вашем сайте.
Дополнительные ресурсы
Для более подробной информации о работе с REST API WordPress вы можете обратиться к официальной документации:
Эти ресурсы помогут вам углубить свои знания и оптимизировать дальнейшую работу с API WordPress.