通过 RWordpress 和 knit2wp 从 R 发布带有自定义 post 类型的 posts

Publish posts with custom post type from R via RWordpress and knit2wp

我目前正在使用 Yihui Xie 的 RWordpress-package from Duncan Temple Lang and the knitr-package 直接从 R 生成博客 posts。对于常规的 posts 效果很好,但是我想生成一个post 与以前定制的 post 类型。通过 knit2wp 我似乎只能生成一个常规的新 post,编辑一个已经发布的 post 或生成一个新页面。

如果我想手写 post,我会访问 Wordpress 后端中的一个页面。对于常规 post 那将是

https://www.your-wordpress.blog/wp-admin/post-new.php

对于定制的 post 那将是

https://www.your-wordpress.blog/wp-admin/post-new.php?post_type=custom

所以我的建议是我必须通过 knitr 的 knit2wp 函数发送一些额外的信息和动作参数。

knit2wp函数调用定义如下:

knit2wp(input, title = "A post from knitr", ..., envir = parent.frame(), 
shortcode = FALSE, action = c("newPost", "editPost", "newPage"), postid, 
encoding = getOption("encoding"), publish = TRUE)

定义通过

发送到 Wordpress 的参数后
  WPargs = list(content = list(description = content, title = title, 
                           ...), publish = publish)

调用本身已完成:

  do.call("library", list(package = "RWordPress", character.only = TRUE))
  do.call(action, args = WPargs)

Wordpress 提供的信息向我提示了一个名为 enclosure 的结构字段。因此,我的想法是包含一个名为 enclosure:

的列表
  WPargs = list(content = list(description = content, title = title, 
                           ...), enclosure = list(type = "custom"), publish = publish)

不幸的是,这会导致一条错误消息:

unused argument (enclosure = list(type = "custom", categories = c("test1", "test2"), wp_post_thumbnail = 12345))

我假设如果我修改来自 XMLRPC 包的一些调用,我可以正确地包含 post 类型,但我不知道从哪里开始。有人知道如何在 Wordpress 中通过 R 生成自定义类型的 posts 吗?

也许不是直接的答案,但我找到了使用 curl 命令的解决方案(参见 Media Api Reference of WordPress)。以这种方式,我只是将命令作为系统调用发送。我将几个字符串连接成一个 curl 命令,例如:

header<- "--header 'Authorization: Basic your_token_here'"
title<- "'title=Some title here'"
excerpt<- "-d 'Some excerpt here'"
url <- "-d 'slug=some-customized-url-structure-here'")
command<-paste("curl ",header," -X POST -d ",title," -d 'status=publish' -d 'categories=12345' -d 'content= here goes the content' -d 'featured_media=xxxyyy' -d 'author=zzzz' ",url," ",excerpt,"  https://www.your-ur.l/wp-json/wp/v2/customized_structure_update",sep="")

如果我再火起来

system(command)

一切正常。