Настраиваемое поле не отображается в ответе WordPress REST API

Я пытаюсь добавить настраиваемое поле в ответ REST API для моего настраиваемого типа сообщения в WordPress. Поле должно отображать значение my_custom_field. Однако настраиваемое поле не отображается в ответе.

Вот код, который я использую:

function add_custom_fields_to_rest_api() {
    register_rest_field(
        'my_custom_post_type',
        'my_custom_field',
        array(
            'get_callback' => 'get_custom_field_value',
            'update_callback' => null,
            'schema' => null,
        )
    );
}

function get_custom_field_value($object, $field_name, $request) {
    return get_post_meta($object->ID, $field_name, true);
}

add_action('rest_api_init', 'add_custom_fields_to_rest_api');

Что я делаю неправильно?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема заключается в том, как вы получаете доступ к сообщению ID в функции get_custom_field_value. Параметр $object следует рассматривать как массив, а не как объект.

Вот как должен выглядеть ваш код:

function add_custom_fields_to_rest_api() {
    register_rest_field(
        'my_custom_post_type',
        'my_custom_field',
        array(
            'get_callback' => 'get_custom_field_value',
            'update_callback' => null,
            'schema' => null,
        )
    );
}

function get_custom_field_value($object, $field_name, $request) {
    return get_post_meta($object['id'], $field_name, true);
}

add_action('rest_api_init', 'add_custom_fields_to_rest_api');

В функции get_custom_field_value$object['id'] корректно обращается к сообщению ID. Это должно гарантировать, что my_custom_field появится в ответе REST API, как и ожидалось.

да, похоже, в этом была проблема, спасибо!

Stamp 06.08.2024 00:51
add_action('rest_api_init', 'restapi_fetch_data');
function restapi_fetch_data()
    {
        register_rest_route( 'testapidata', '/getalldata', array(
                            array(
                                    'methods'             => 'GET',
                                    'callback'            => 'get_items_all_data',
                                    'args'                => array(),
                            )
                            ) 
        );
        register_rest_route( 'testapidata', '/getproductdata', array(
                            array(
                                    'methods'             => 'GET',
                                    'callback'            => 'getproduct_all_data',
                                    'args'                => array(),
                            )
                            ) 
        );
    }
function get_items_all_data()
    {
        $result=array();
        $result['name'] ='hello';
        return $result;
    }
function getproduct_all_data()
    {
        $product_all_result = array();
        $pro_args = array(
                    'status'    => array('publish' ),
                    'type'      => array_merge( array_keys( wc_get_product_types() ) ),
                    'limit'     => -1,
                    'orderby'   => 'ID'
                );
        $products_all_data = wc_get_products( $pro_args );
        foreach ($products_all_data as $products_all_data_key => $products_all_data_value) {
            $product_all_result[$products_all_data_key]['id'] = $products_all_data_value->get_id();
            $product_all_result[$products_all_data_key]['name'] = $products_all_data_value->get_name();
        }
        
        return $product_all_result;
    }

Другие вопросы по теме

Используйте 2 десятичных знака для суммы скидки в Woocommerce с настройками 0 десятичных знаков
Страница индивидуальных заказов WooCommerce добавляет настраиваемое поле роли клиента
Добавить выбранное значение переключателя в качестве данных пользовательского элемента корзины через Ajax. Добавить в корзину в цикле продуктов WooCommerce
Woocommerce Проблема с крючками для одного продукта: заменить кнопку «Добавить в корзину»
Создание пользовательской кнопки добавления в корзину для переменных продуктов с вариациями в WooCommerce
Почему изображение с водяным знаком так сильно увеличивается в размере в WordPress?
Добавьте несколько суффиксов к отображаемым ценам продуктов WooCommerce
Ограничить клиентам возможность покупать один раз в год в WooCommerce
Получите заказы woocommerce, сделанные 4 часа назад - Wordpress
Почему API интерактивности WordPress нуждается в контексте?