Blogs are a great communications tool. Finding a way to post to WordPress through R Markdown can be a nice efficiency hack. This post documents a method for generating WordPress posts through RStudio. It uses the RWordPress package by Duncan Temple Lang. This tutorial is basically a scaled-down version of Peter Bumgartner’s excellent tutorial.
At the time of posting, both that and this tutorial are distributed using a CC-BY-NC-SA license.
Set Up Your Session
Installing the RWordPress and XMLRPC Packages
library(devtools) install_github("duncantl/RWordPress") install_github("duncantl/XMLRPC")
Load Necessary Packages
In addition to RWordPress and XMLRP, we need knitr, a suite of operations for generating reports.
library(RWordPress) library(XMLRPC) library(knitr)
Create / Load a Script with Your Credentials
To post to WordPress, your login and password must be included in the script. Posting or circulating a Markdown file with your WordPress login credentials creates a huge web security risk. On the other hand, we teach you to be open about your coding, so that others can review, replicate, and build on it. How to negoatiate the two?
Bumgartner’s solution is to add the following variables to your .Rprofile file using this code
options(WordPressLogin = c(yourUserName = 'yourPassword'), WordPressURL = 'yourWordPressURL')
Do not delete the quotation marks in this template. For the ‘yourWordPressURL’, be sure to add a “https://” before and and “/xmlrpc.php” after your site address. So, for the site “joeblog.com”, you would enter “https://joeblog.com/xmlrpc.php”
Once you have generated and stored the file, you can add it to any Markdown file that you intend to post. I called my file “WPCrds.R”:
source("E:/My Documents/BlogCreds.R") #Or wherever you store the file
Set Images to Post to imgur.com
To save time and resources, post your images to the open online site Imgur.com. To do so, add these knitr options to your script:
# To upload images to imgur.com opts_knit$set(upload.fun = imgur_upload, base.url = NULL) # Set default image dimensions # Change them to change the dimensions of figures opts_chunk$set(fig.width = 5, fig.height = 5, cache = TRUE)
Generate a Polished html Report
Create a Markdown file that renders your report in html. Render it locally to something sufficiently polished, and then move on to the next step.
I will download and insert an image into the report, in case someone needs to do that:
#Download the image download.file( "http://josephnathancohen.info/wp-content/uploads/2021/11/service-pnp-ppmsca-09600-09629r.jpg", destfile = "BBCard.jpg")
Then, OUTSIDE the chunk, enter into the main text of the document this line, without the hashtag
Post Your Information
In another chunk, set your post title as the variable postTitle, and define fileName as the name of the Markdown file that you are using to generate the post:
postTitle = "Your Title" fileName = "Your-Markdown-File.Rmd"
Post using the knit2wp command, whose options include:
- the Markdown file name (option: input)
- the post title (option: title)
- whether the post should be published upon rendering (option: publish, set true to directly publish – not advisable)
- for a new post, the action variable should be set to “newPost” (option: action)
- to set the post’s category. Use the slugs designated on your site. (option: categories)
- to set the post’s tags. Use the slugs designated on your site. (option: tags)
postID <- knit2wp( input = fileName, title = postTitle, publish = FALSE, action = "newPost", categoories = c("Insert Slugs here"), tags = c("insert slugs here"), mt_excerpt = "Insert excerpt here" )
Clean It Up on WordPress
From here, you will have a draft post on your WordPress site. I find WordPress to have a far more user-friendly interface to complete the last steps of a post.
Remember: Risk the temptation to do everything in R if it costs a lot of time. Yes, it would be cool if you could do it. The problem is no one but data nerds will appreciate it, and there’s not a lot of data nerds out there.
To post to WordPress through R Markdown, start with this setup to your script. Remember that the source() line points to a file with your credentials. For this post, it is:
source("D:/Dropbox/Web/WPCrds.R") postTitle = "Post to WordPress via R Markdown" fileName = "Using-RWordPress.Rmd" postID <- knit2wp( input = fileName, title = postTitle, publish = FALSE, action = "newPost", categories = c("analytics"), tags = c("communications", "Markdown"), mt_excerpt = "Publish a Markdown report direct to your WordPress blog" )
Then write the script until it is polished, and then you can post by running this code. I recommend that you set eval = F, so that it doesn’t run when you render the Markdown file into html. Then, once the file runs, execute this code on its own, not as part of a larger operation.
Then, polish the piece in WordPress.