¿Cómo publicar con categorías en WordPress usando WP REST API?

3 minutos de lectura

avatar de usuario
Jeflopo

Creé este pequeño script para crear publicaciones de wordpres, usando autenticación básica, y funciona. El problema es cuando trato de asignar varias categorías a una publicación.

la referencia es bonita impreciso. Dice que el categories el campo debe ser una matriz. Pero no especifica si debe ser una matriz de category objetos o si el id de estas categorías se debe pasar al campo.
https://developer.wordpress.org/rest-api/reference/posts/#schema-categories

Así que traté de hacer que fallara para poder obtener más información de un mensaje de excepción. El mensaje de excepción dice algo como categories[0] is not an integer Así que probé con una lista de enteros. Y luego, funciona. Pero solo se asigna una categoría, solo la última categoría de la lista.

Entonces, ¿cómo agrego más categorías a una publicación?

N1: Categorías con identificación 13 y 16 en realidad existe en mi instalación de wordpress.

N2: Sé que podría crear un borrador, luego crear nuevas solicitudes para crear categorías y luego usar un punto final de publicación de actualización para asignar categorías a las publicaciones… Pero en teoría, debería ser posible pasar varias categorías simplemente creando la publicación, ya que está en la referencia xdd

N3: No me importa la seguridad. No es un requisito.

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":[] ...

  • Hasta que comprenda cómo usar múltiples taxonomías con la API REST de WP. Usaré xmlrpc como solución alternativa. Usando algo como: gist.github.com/jeflopo/a1143e4dda496443c95f218f5bf6ae39

    – Jeflopo

    28 de abril de 2017 a las 10:53

  • No puedo instalar bibliotecas, ¿cómo hacer eso?

    – ehsan shirzadi

    31 de enero de 2018 a las 9:22

  • @ehsanshirzadi Si te refieres a base64 y requests estas son bibliotecas de python, por lo que necesita instalar python y luego usar la línea de comando pip install <library_name>

    – Jeflopo

    3 de marzo de 2018 a las 22:21

avatar de usuario
Samuel

La referencia de la API de WP es engañosa.

En realidad, se espera una cadena separada por comas con ID de categorías:

data: {
    ...
    categories: "162,224"
    ...
}

  • ¡Dios mío, cómo alguien podría saber esto! No tiene sentido, ¿por qué una cuerda? ¿Supongo que tal vez los valores del elemento seleccionado son cadenas? -_-

    – OctaviaLo

    23 de febrero de 2020 a las 12:59


  • @OctaviaLo, correcto, deberían arreglar su referencia de API

    – Samuel

    23 de febrero de 2020 a las 13:32

  • Muy molesto, tuve el mismo problema… Pero tu comentario me ayudó @Samuel, ¡gracias!

    – dnwjn

    23 de marzo de 2020 a las 13:20

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad