You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R通过knit2wp将含交互式内容的Rmarkdown发布到WordPress

R发布带交互式内容的Rmarkdown到WordPress解决方案

核心逻辑:先将交互式组件单独渲染为内嵌所有依赖的独立HTML,上传至WordPress媒体库获取公网URL,再在Rmd中通过iframe引用该URL后发布。

1. 渲染交互式组件为独立HTML

将ggplotly等htmlwidget组件单独导出为单文件HTML,所有JS、样式依赖全部内嵌,避免外部依赖加载失败:

library(ggplot2)
library(plotly)
library(htmlwidgets)

# 生成交互式图表
g <- ggplot(cars, aes(dist, speed)) + geom_point()
ply_plot <- ggplotly(g)

# 导出为自包含HTML文件
saveWidget(
  widget = ply_plot,
  file = "cars_scatter.html",
  selfcontained = TRUE,
  title = "车速与刹车距离交互图"
)

2. 上传HTML文件至WordPress媒体库

使用wordpressr包完成认证和文件上传,获取上传后的公网访问URL:

library(wordpressr)

# WordPress账号认证,推荐使用后台生成的应用密码,不要直接用登录密码
wp_auth(
  site_url = "https://blog.site.com",
  username = "你的WordPress用户名",
  password = "你的WordPress应用密码"
)

# 上传HTML文件
upload_result <- wp_upload_media(
  file_path = "cars_scatter.html",
  media_type = "text/html"
)

# 提取上传后的公开访问URL
interactive_plot_url <- upload_result$source_url

注意:如果WordPress默认禁止HTML格式文件上传,可在站点根目录wp-config.php中添加define('ALLOW_UNFILTERED_UPLOADS', true);放开权限,或使用媒体上传权限管理类插件放开HTML格式限制。

3. 修改Rmd文件插入iframe

在原Rmd中删除交互式图表生成代码,替换为动态iframe渲染代码块,注意给代码块添加results='asis'和echo=FALSE参数:

# 代码块头:{r, results='asis', echo=FALSE}
cat(
  glue::glue(
    '<iframe src="{interactive_plot_url}" width="100%" height="500px" frameborder="0" allowfullscreen></iframe>'
  )
)

4. 调用knit2wp发布内容

使用你原有发布逻辑即可正常发布,交互式图表可以正常加载:

options(
  WordpressLogin = c(你的用户名 = '你的应用密码'),
  WordpressURL = 'https://blog.site.com/xmlrpc.php'
)

knit2wp(
  input = 'test.Rmd',
  title = '测试交互内容发布',
  publish = FALSE,
  action = "newPost"
)

常见问题说明

  • 之前的path.expand报错是因为iframe引用的是本地文件路径,未上传到WordPress服务器,路径解析失败导致
  • 部分WordPress主题会过滤iframe标签,可在发布后检查文章页HTML源码确认iframe是否被正常保留,如被过滤可安装自定义HTML权限类插件解决

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 11:36:02