• WP версия 6.8, плагин WordPress REST API Authentication

    вроде как запрос должен идти на posts/post_id/meta но я не вижу такого роутера в списке api и запрос туда ничего не меняет, возвращает инфу по посту, нужное поле:

    [«myhome_130»]=>
    array(1) {
    [0]=>
    string(13) «$ 100,200,300»
    }

    но в базе(таблица wp_postmeta) ключ выглядит иначе: myhome_130_myhome_13

    может его(роутер) где нить руками надо добавить?

    • Тема изменена 4 дня, 3 часа назад пользователем dvladimirov77.
Просмотр 15 ответов — с 1 по 15 (всего 15)
  • Автор dvladimirov77

    (@dvladimirov77)

    Спасибо, поле в описании роутера нашёл, но вот чего то не хочет меняться.

    Отправляю так:

    $meta = new stdClass();
    $meta->myhome_130_myhome_13 = $row[‘price_obj’];
    $obj = [
    ‘slug’ => $row[‘ssylka’] . ‘_’ . $row[‘kod’],
    ‘title’ => make_object_title($row),
    ‘content’ => string_normalize($row[‘opis’]),
    ‘status’ => ‘publish’,
    ‘myhome_5495’ => $myhome_5495,
    ‘myhome_9508’ => $myhome_9508,
    ‘myhome_14’ => $myhome_14,
    ‘meta’ => $meta,
    ];

    • Ответ изменён 4 дня, 2 часа назад пользователем dvladimirov77.

    Что то Вы перемудрили. Там обычный json объект

    плюс проверьте, чтобы при регистрации полей они были доступны по рест апи ‘show_in_rest’ => true,

    примеры https://rudrastyh.com/wordpress/add-meta-fields-with-rest-api.html

    Автор dvladimirov77

    (@dvladimirov77)

    Запутанно как то всё получается. Пост в базе есть, ид — 15691 в таблице wp_posts.

    Но… он создан через плагин MyHome, он не виден в списке постов на /wp-admin/edit.php, у него свой роутер — /wp/v2/listings/(?P<id>[\d]+) и там нет мета поля.

    А если я пытаюсь сохранить через роутер /wp/v2/posts/(?P<id>[\d]+), то получаю ошибку rest_post_invalid_id

    пытаюсь сохранить через роутер /wp/v2/posts/(?P[\d]+),

    Надеюсь Вы не имеете ввиду прямо такой url

    Возможно изначально лучше рассказать что Вы хотите получить, а не то что Вы делаете. Может есть альтернативные варианты решения задачи.

    Автор dvladimirov77

    (@dvladimirov77)

    Конечно же не такой урл у апи, это из списка роутеров /wp-json/ скопировал 🙂

    Я хочу через апи изменить/добавить значение поля meta_value в таблице wp_postmeta

    у Вас внешний сервис, сайт, услуга? Или просто через апи в рамках самого вордпресс? Потому что апи обычно используют чтобы менять из вне… обычными запросами…

    Автор dvladimirov77

    (@dvladimirov77)

    Именно так — с другого сайта надо заливать данные в ВП.

    Сами посты через роутер темы/плагина я создаю без проблем. А вот с мета полями засада приключилась. Сама тема MyHome, https://tangiblewp.com/.

    Честно говоря уже не понимаю что у Вас может не так пойти. Делаю обычный запрос например на /wp-json/wp/v2/posts/20945, в теле отправляю json

    {
    "title": "Новый какой то заголовок",
    "meta":{
    "footnotes": "998"
    }

    }

    и все работает. Важно чтобы эти метаполя были доступны для запросов rest. Эта доступность определяется как писал выше. Это в принципе легко проверить, если на странице гутенберг и они отображаются для редактирования то значит все нормально.

    Автор dvladimirov77

    (@dvladimirov77)

    Через /wp-json/wp/v2/posts/20945 не получается отправить — апи ругается: rest_post_invalid_id

    Эта тема/плагин имеют собственный роутер, а у него — нет мета аргумента, попробую скрин закинуть, может получится 🙂

    Скрин никак, текстом:

    /wp/v2/listings/(?P[\d]+)
    namespace "wp/v2"
    methods (5)[ "GET", "POST", "PUT", "PATCH", "DELETE" ]
    endpoints
    0 { methods: (1)[…], allow_batch: {…}, args: {…} }
    1
    methods (3)[ "POST", "PUT", "PATCH" ]
    allow_batch { v1: true }
    args
    id { description: "Unique identifier for the post.", type: "integer", required: false }
    date { description: "The date the post was published, in the site's timezone.", format: "date-time", required: false, … }
    date_gmt { description: "The date the post was published, as GMT.", format: "date-time", required: false, … }
    slug { description: "An alphanumeric identifier for the post unique to its type.", type: "string", required: false }
    status { description: "A named status for the post.", type: "string", required: false, … }
    password { description: "A password to protect access to the content and excerpt.", type: "string", required: false }
    title { description: "The title for the post.", type: "object", required: false, … }
    content { description: "The content for the post.", type: "object", required: false, … }
    author { description: "The ID for the author of the post.", type: "integer", required: false }
    template { description: "The theme file to use to display the post.", type: "string", required: false }
    myhome_5495 { description: "The terms assigned to the post in the myhome_5495 taxonomy.", type: "array", required: false, … }
    myhome_14 { description: "The terms assigned to the post in the myhome_14 taxonomy.", type: "array", required: false, … }
    myhome_9508 { description: "The terms assigned to the post in the myhome_9508 taxonomy.", type: "array", required: false, … }
    myhome_15545 { description: "The terms assigned to the post in the myhome_15545 taxonomy.", type: "array", required: false, … }
    myhome_4661 { description: "The terms assigned to the post in the myhome_4661 taxonomy.", type: "array", required: false, … }
    • Ответ изменён 3 дня, 4 часа назад пользователем dvladimirov77.

    Извините, я забыл что у Вас свой роут listings . Я примеры даю для стандартных роутов.

    Если сделать гет запрос на пост через рест апи, то что приходит в ответ? Приложите полный ответ. Если в ответе нет данных по нужным полям, то скорей всего не получится поменять без доработок.

    Даже когда отдельный роут, например созданный тип записи через acf то приходит в ответ информация и мета поля можно поменять типа так

    {
    "title": "Новый какой то заголовок",
    "acf":{
    "ooo": "998"
    }
    }

    И кстати, тема у Вас платная, нужно бы в поддержку написать и они уж точно помогут.

    • Ответ изменён 3 дня, 3 часа назад пользователем ravilr63.
    Автор dvladimirov77

    (@dvladimirov77)

    В поддержку написано, жду ответ.

    Роутеры проще наверное показать в сети — https://m2metr.ru/wp-json/

    Я думал может как нить через инит мета поля поднять, на вроде register_term_meta.

    Но я пока в ВП ничего не понимаю, а доков и примеров очень мало в сети(ну или я не нахожу :)).

    Автор dvladimirov77

    (@dvladimirov77)

    Через листинг такое прилетает:

    object(stdClass)#2 (50) {
    ["id"]=>
    int(15691)
    ["date"]=>
    string(19) "2025-06-08T09:23:09"
    ["date_gmt"]=>
    string(19) "2025-06-08T09:23:09"
    ["guid"]=>
    object(stdClass)#3 (2) {
    ["rendered"]=>
    string(72) "https://wp.q/listing/prodazha_kvartira_4k_1_3_et__v_evpatoriya_0_452250/"
    ["raw"]=>
    string(72) "https://wp.q/listing/prodazha_kvartira_4k_1_3_et__v_evpatoriya_0_452250/"
    }
    ["modified"]=>
    string(19) "2025-06-10T07:01:06"
    ["modified_gmt"]=>
    string(19) "2025-06-10T07:01:06"
    ["password"]=>
    string(0) ""
    ["slug"]=>
    string(50) "prodazha_kvartira_4k_1_3_et__v_evpatoriya_0_452250"
    ["status"]=>
    string(7) "publish"
    ["type"]=>
    string(14) "myhome_listing"
    ["link"]=>
    string(72) "https://wp.q/listing/prodazha_kvartira_4k_1_3_et__v_evpatoriya_0_452250/"
    ["title"]=>
    object(stdClass)#4 (2) {
    ["raw"]=>
    string(6) "112233"
    ["rendered"]=>
    string(6) "112233"
    }
    ["content"]=>
    object(stdClass)#5 (4) {
    ["raw"]=>
    string(2018) "<p>Продается 3 х уровневая, большая квартира (Таунхауз), со своим гаражем, в престижном жилом комплексе "Мойнаки", имеющем свой уникальный парк с краснокнижными деревьями.&nbsp;В квартире 3 выхода, один через гараж; 4 очень просторные, светлые комнаты. На первом этаже прихожая, с/у, огромная кухня - гостинная с дорогой мебелью и встроенной техникой (остается покупателям), гараж,выделена своя територия - зона отдыха. На 2 этаже две большие спальни с балконами, в одной вместительная гардеробная(так же с выходом на балкон), большая прачечная комната с душевой кабинкой и с/у, просторная кладовая комната. На 3 этаже огромный спортзал с выделенной спальной зоной и большая комната с выходом на балкон и своей ванной комнатой(с душевой кабиной и ванной, и с/у). Квартира с автономным отоплением, с дорогой мебелью и техникой, выполнен евро ремонт. Дом находится на закрытой територии, со своими зонами отдыха,детские и спортивные площадки, бассейном и парком, имеются дополнительные места для авто. Все необходимое в шаговой доступности. Один собственник, документы РФ.Торг. Принимается любая форма оплаты.</p>"
    ["rendered"]=>
    string(2050) "

    <p>Продается 3 х уровневая, большая квартира (Таунхауз), со своим гаражем, в престижном жилом комплексе “Мойнаки”, имеющем свой уникальный парк с краснокнижными деревьями.&nbsp;В квартире 3 выхода, один через гараж; 4 очень просторные, светлые комнаты. На первом этаже прихожая, с/у, огромная кухня – гостинная с дорогой мебелью и встроенной техникой (остается покупателям), гараж,выделена своя територия – зона отдыха. На 2 этаже две большие спальни с балконами, в одной вместительная гардеробная(так же с выходом на балкон), большая прачечная комната с душевой кабинкой и с/у, просторная кладовая комната. На 3 этаже огромный спортзал с выделенной спальной зоной и большая комната с выходом на балкон и своей ванной комнатой(с душевой кабиной и ванной, и с/у). Квартира с автономным отоплением, с дорогой мебелью и техникой, выполнен евро ремонт. Дом находится на закрытой територии, со своими зонами отдыха,детские и спортивные площадки, бассейном и парком, имеются дополнительные места для авто. Все необходимое в шаговой доступности. Один собственник, документы РФ.Торг. Принимается любая форма оплаты.</p>
    "
    ["protected"]=>
    bool(false)
    ["block_version"]=>
    int(0)
    }
    ["author"]=>
    int(1)
    ["template"]=>
    string(0) ""
    ["permalink_template"]=>
    string(32) "https://wp.q/listing/%pagename%/"
    ["generated_slug"]=>
    string(6) "112233"
    ["class_list"]=>
    array(8) {
    [0]=>
    string(10) "post-15691"
    [1]=>
    string(14) "myhome_listing"
    [2]=>
    string(19) "type-myhome_listing"
    [3]=>
    string(14) "status-publish"
    [4]=>
    string(6) "hentry"
    [5]=>
    string(20) "myhome_5495-for-sale"
    [6]=>
    string(18) "myhome_14-kvartira"
    [7]=>
    string(22) "myhome_9508-evpatoriya"
    }
    ["myhome_5495"]=>
    array(1) {
    [0]=>
    string(8) "For Sale"
    }
    ["myhome_14"]=>
    array(1) {
    [0]=>
    string(16) "Квартира"
    }
    ["myhome_130"]=>
    array(1) {
    [0]=>
    string(8) "$ 444.10"
    }
    ["myhome_5974"]=>
    array(0) {
    }
    ["myhome_9508"]=>
    array(1) {
    [0]=>
    string(18) "Евпатория"
    }
    ["myhome_15545"]=>
    array(0) {
    }
    ["myhome_5462"]=>
    string(0) ""
    ["myhome_5463"]=>
    string(0) ""
    ["myhome_340"]=>
    string(0) ""
    ["myhome_9694"]=>
    string(0) ""
    ["myhome_9733"]=>
    string(0) ""
    ["myhome_15544"]=>
    string(0) ""
    ["myhome_4661"]=>
    array(0) {
    }
    ["myhome_145"]=>
    string(0) ""
    ["myhome_344"]=>
    string(0) ""
    ["myhome_345"]=>
    object(stdClass)#6 (2) {
    ["url"]=>
    string(0) ""
    ["embed"]=>
    string(0) ""
    }
    ["myhome_3411"]=>
    object(stdClass)#7 (2) {
    ["url"]=>
    string(0) ""
    ["embed"]=>
    string(0) ""
    }
    ["myhome_153"]=>
    object(stdClass)#8 (2) {
    ["address"]=>
    string(0) ""
    ["location"]=>
    bool(false)
    }
    ["myhome_15694"]=>
    string(5) "1 2 3"
    ["_edit_lock"]=>
    string(12) "1749528887:1"
    ["_edit_last"]=>
    string(1) "1"
    ["expire"]=>
    string(0) ""
    ["featured_expire"]=>
    string(0) ""
    ["views"]=>
    string(2) "11"
    ["phone_reveals"]=>
    string(1) "0"
    ["favorite_count"]=>
    string(1) "0"
    ["myhome_5974_myhome_13"]=>
    string(0) ""
    ["myhome_5973_myhome_13"]=>
    string(0) ""
    ["myhome_130_myhome_13"]=>
    string(6) "444.10"
    ["featured"]=>
    string(1) "0"
    ["myhome_15692"]=>
    string(61) "https://www.m2baza.ru/images/foto/49/foto/6842a885110dde8.jpg"
    ["_links"]=>
    object(stdClass)#11 (9) {
    ["self"]=>
    array(1) {
    [0]=>
    object(stdClass)#9 (2) {
    ["href"]=>
    string(41) "https://wp.q/wp-json/wp/v2/listings/15691"
    ["targetHints"]=>
    object(stdClass)#10 (1) {
    ["allow"]=>
    array(5) {
    [0]=>
    string(3) "GET"
    [1]=>
    string(4) "POST"
    [2]=>
    string(3) "PUT"
    [3]=>
    string(5) "PATCH"
    [4]=>
    string(6) "DELETE"
    }
    }
    }
    }
    ["collection"]=>
    array(1) {
    [0]=>
    object(stdClass)#12 (1) {
    ["href"]=>
    string(35) "https://wp.q/wp-json/wp/v2/listings"
    }
    }
    ["about"]=>
    array(1) {
    [0]=>
    object(stdClass)#13 (1) {
    ["href"]=>
    string(47) "https://wp.q/wp-json/wp/v2/types/myhome_listing"
    }
    }
    ["author"]=>
    array(1) {
    [0]=>
    object(stdClass)#14 (2) {
    ["embeddable"]=>
    bool(true)
    ["href"]=>
    string(34) "https://wp.q/wp-json/wp/v2/users/1"
    }
    }
    ["wp:attachment"]=>
    array(1) {
    [0]=>
    object(stdClass)#15 (1) {
    ["href"]=>
    string(45) "https://wp.q/wp-json/wp/v2/media?parent=15691"
    }
    }
    ["wp:action-publish"]=>
    array(1) {
    [0]=>
    object(stdClass)#16 (1) {
    ["href"]=>
    string(41) "https://wp.q/wp-json/wp/v2/listings/15691"
    }
    }
    ["wp:action-unfiltered-html"]=>
    array(1) {
    [0]=>
    object(stdClass)#17 (1) {
    ["href"]=>
    string(41) "https://wp.q/wp-json/wp/v2/listings/15691"
    }
    }
    ["wp:action-assign-author"]=>
    array(1) {
    [0]=>
    object(stdClass)#18 (1) {
    ["href"]=>
    string(41) "https://wp.q/wp-json/wp/v2/listings/15691"
    }
    }
    ["curies"]=>
    array(1) {
    [0]=>
    object(stdClass)#19 (3) {
    ["name"]=>
    string(2) "wp"
    ["href"]=>
    string(23) "https://api.w.org/{rel}"
    ["templated"]=>
    bool(true)
    }
    }
    }
    }

    А если на роутер пост кидать, то так:

    object(stdClass)#2 (3) {
    [«code»]=>
    string(20) «rest_post_invalid_id»
    [«message»]=>
    string(16) «Invalid post ID.»
    [«data»]=>
    object(stdClass)#3 (1) {
    [«status»]=>
    int(404)
    }
    }

    Попробуйте в json добавить типа

    "myhome_5495":["Продажа"],

    если никак, то ждите поддержки темы. Других подсказок нет у меня.

    • Ответ изменён 3 дня, 2 часа назад пользователем ravilr63.
    • Ответ изменён 3 дня, 2 часа назад пользователем ravilr63.
    Автор dvladimirov77

    (@dvladimirov77)

    Подсказали решение, указать мой тип страницы: myhome_listing

    add_action(«rest_insert_myhome_listing», function (\WP_Post $post, $request, $creating) {
    $metas = $request->get_param(«meta»);
    if (is_array($metas)) {
    foreach ($metas as $name => $value) {
    update_post_meta($post->ID, $name, $value);
    }
    }
    }, 10, 3);

Просмотр 15 ответов — с 1 по 15 (всего 15)