En este cuarto artículo de conexión entre Microsoft Access y WordPress, vamos a trabajar con unas de las mejores funcionalidades de CMS que posee WordPress, los tipos de contenidos personalizados. Eso quiere decir que crearemos un nuevo ítem de tipo de contenido en forma remota a través de XMLRPC.
Como siempre, les recomiendo que previamente lean los artículos anteriores:
Parte 1: creación de un post
Parte 2: upload de una foto
Parte 3: post con imagen destacada
Un importante cambio de enfoque
Hasta ahora venimos trabajando con la API metaWeblog. A partir de ahora la abandonaremos porque no soporta tipos de contenido. En rigor, sí los soporta pero sólo si son páginas o posts. Con lo cual pasamos a utilizar sólo los métodos con prefijo wp que pueden encontrar en: http://codex.wordpress.org/XML-RPC_WordPress_API
Este pequeño detalle genera algunos cambios a nuestro código respecto a lo que veníamos viendo previamente. Remarqué esos cambios en bold.
Cambios en nuestro sitio de WordPress
Instalamos un plugin para manejar Tipos de Contenido, en este caso elijo "Custom Post Type UI"
Luego creamos un tipo de contenido nuevo, sin crearle aún campos personalizados (eso viene en la parte 5):
El código
Sub PublicarEnWordPress()
' Datos de Autenticación
CargarConstantes
txtURL = SITIO
txtUserName = USUARIO
txtPassword = PASSWORD
' Datos del Post
txtTitulo = "Certificado 5"
txtContenido = "Este es un custom post de ejemplo publicado desde Microsoft Access"
Dim txtCategorias(1) As String
txtCategorias(1) = "Uncategorized"
txtImagen = "25"
txtTipoContenido = "proceso"
' ServerXMLHTTP
Dim objSvrHTTP As ServerXMLHTTP
Dim strT As String
Set objSvrHTTP = New ServerXMLHTTP
' Autenticación
objSvrHTTP.Open "POST", txtURL, False, CStr(txtUsuario), CStr(txtPassword)
objSvrHTTP.setRequestHeader "Accept", "application/xml"
objSvrHTTP.setRequestHeader "Content-Type", "application/xml"
strT = strT & "<methodCall>"
' Acción
strT = strT & "<methodName>wp.newPost</methodName>"
' General
strT = strT & "<params>"
strT = strT & "<param><value><string>0</string></value></param>"
strT = strT & "<param><value>" & txtUserName & "</value></param>"
strT = strT & "<param><value><string>" & txtPassword & "</string></value></param>"
strT = strT & "<param>"
strT = strT & "<struct>"
' Categorías
strT = strT & "<member><name>categories</name><value><array>"
strT = strT & "<data>"
For i = 1 To UBound(txtCategorias)
strT = strT & "<value>" & txtCategorias(i) & "</value>"
Next i
strT = strT & "</data>"
strT = strT & "</array></value></member>"
' Título, contenido y fecha
strT = strT & "<member><name>post_content</name><value><![CDATA[" & txtContenido & "]]></value></member>"
strT = strT & "<member><name>post_title</name><value>" & txtTitulo & "</value></member>"
strT = strT & "<member><name>dateCreated</name><value><dateTime.iso8601>" & Format(Now(), "yyyyMMdd") & "T" & Format(Now(), "hh:mm:ss") & "</dateTime.iso8601></value></member>"
' Imagen destacada
strT = strT & "<member><name>post_thumbnail</name><value><![CDATA[" & txtImagen & "]]></value></member>"
' Tipo de contenido
strT = strT & "<member><name>post_type</name><value>" & txtTipoContenido & "</value></member>"
' Tipo de publicación
strT = strT & "<member><name>post_status</name><value>publish</value></member>"
strT = strT & "</struct>"
strT = strT & "</param>"
strT = strT & "</params>"
strT = strT & "</methodCall>"
' Publicación
objSvrHTTP.send strT
' Debug
Debug.Print objSvrHTTP.responseText
MsgBox objSvrHTTP.responseText
End Sub
La publicación
En caso que no abandonemos la API metaWeblog, obtendremos el siguiente mensaje de error:
Con la API wp podremos insertar el "proceso" tal como se ve en esta imagen:
Bibliografía
Hasta la próxima!
No hay comentarios:
Publicar un comentario