REST-запрос Post с учетом мета/пользовательских полей

Вопрос или проблема

Когда я делаю 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.

Оцените материал
Добавить комментарий

Капча загружается...