Как отправлять сообщения с категориями в Wordpress с помощью WP REST API?

Я создал этот небольшой скрипт для создания сообщений wordpres, используя Basic Auth, и он работает. Проблема в том, что я пытаюсь назначить посту несколько категорий.

Ссылка довольно расплывчата. В нем говорится, что поле categories должно быть массивом. Но он не указывает, должен ли это быть массив из category объектов или id из этих категорий должны быть переданы в поле. https://developer.wordpress.org/rest-api/reference/posts/#schema-categories

Поэтому я попытался сделать это неудачно, чтобы получить дополнительную информацию из сообщения об исключении. Сообщение об исключении говорит что-то вроде categories[0] is not an integer Итак, я попробовал со списком целых чисел. И тогда это работает. Но присваивается только одна категория, только последняя категория в списке.

Итак, как мне добавить больше категорий к сообщению?

N1: Категории с идентификаторами 13 и 16 действительно существуют в моей установке Wordpress.

N2: Я знаю, что могу создать черновик, а затем создать новые запросы для создания категорий, а затем использовать конечную точку обновления публикации для назначения категорий публикациям ... Но теоретически должна быть возможность передать несколько категории, просто создающие сообщение, так как в ссылке xd

N3: Меня не волнует безопасность. Это не требование.

import base64
import requests

r = requests.session()

wp_host = 'wphost.dev'
wp_username = 'FIXME'
wp_password = 'FIXME'

# BUILD BASIC AUTH STRING
basic_auth = str(
    base64.b64encode('{user}:{passwd}'.format(
        user=wp_username,
        passwd=wp_password
    ).encode()
), 'utf-8')

# PARAMETERS TO POST REQUEST
p = {
    'url': 'http://{wp_host}/wp-json/wp/v2/posts'.format(wp_host=wp_host),
    'headers': {'Authorization': 'Basic {basic_auth}'.format(basic_auth=basic_auth)},
    'data': {
        'title': 'My title',
        'content': 'My content',
        'categories': [13, 16],
        'status': 'publish',
    },
}

# THE REQUEST ITSELF
r = r.post(url=p['url'], headers=p['headers'], data=p['data'])

# Output
print(r.content)
# ... "categories":[16],"tags":[] ...

person Jeflopo    schedule 28.04.2017    source источник
comment
Пока я не пойму, как использовать несколько таксономий с WP REST API. Я использую xmlrpc в качестве обходного пути. Используя что-то вроде: gist.github.com/jeflopo/a1143e4dda496443c95f218f5bf6ae   -  person Jeflopo    schedule 28.04.2017
comment
Я не могу устанавливать библиотеки, как это сделать?   -  person ehsan shirzadi    schedule 31.01.2018
comment
@ehsanshirzadi Если вы имеете в виду base64 и requests, это библиотеки python, поэтому вам нужно установить python, а затем из командной строки использовать pip install <library_name>   -  person Jeflopo    schedule 04.03.2018


Ответы (1)


Ссылка на WP API вводит в заблуждение.

На самом деле ожидается разделенная запятыми строка с идентификаторами категорий:

data: {
    ...
    categories: "162,224"
    ...
}
person Samuel    schedule 31.07.2018
comment
Боже мой, как кто-нибудь мог это узнать !!! Не имеет смысла, почему строка? Я предполагаю, что значения из элемента select являются строками? -_- - person OctaviaLo; 23.02.2020
comment
@OctaviaLo, верно, они должны исправить свою ссылку на API - person Samuel; 23.02.2020
comment
Так раздражает, у меня была такая же проблема ... Но ваш комментарий помог мне @ Samuel, спасибо! - person dnwjn; 23.03.2020