viernes, 12 de septiembre de 2014

Publicar en WordPress desde Microsoft Access via XMLRPC Parte 4

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:



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!

0 comentarios:

Publicar un comentario en la entrada