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

WP-API更新后Node端create()方法失效,无法上传内容求助

解决WP-API更新后Node端create()方法失效问题

嘿,我刚踩过这个坑!WP-API更新之后,Node端调用create()方法直接罢工,发文章、传图片全失败——和你遇到的问题一模一样。结合你贴的代码片段,我整理了几个靠谱的修复方向,你可以挨个试试:

  • 检查WP-API端点版本与认证方式
    新版本的WP REST API默认使用/wp-json/wp/v2/作为端点前缀,老版本可能是/wp-json/wp/v1/,先确认你的请求URL是否正确。另外,新版本对认证要求更严格:

    • 如果用JWT认证,请求头里必须带Authorization: Bearer <你的JWT令牌>
    • 如果用Basic Auth(仅测试环境用,生产别用明文),要把用户名:密码做Base64编码后,在请求头里加Authorization: Basic <编码后的字符串>
  • 上传图片必须用multipart/form-data格式
    直接用JSON格式POST图片肯定不行,得用表单数据来处理。推荐用form-data这个npm包,示例代码如下:

    const FormData = require('form-data');
    const axios = require('axios');
    const fs = require('fs');
    const path = require('path');
    
    // 异步上传图片的函数
    async function uploadImage(filePath) {
      const form = new FormData();
      // 把图片文件添加到表单里
      form.append('file', fs.createReadStream(filePath), {
        filename: path.basename(filePath),
        contentType: 'image/jpeg' // 根据你的图片类型调整,比如png就用image/png
      });
    
      try {
        const response = await axios.post('https://你的站点域名/wp-json/wp/v2/media', form, {
          headers: {
            ...form.getHeaders(), // 自动生成表单数据的请求头
            'Authorization': 'Bearer 你的JWT令牌' // 替换成你的认证信息
          }
        });
        return response.data.id; // 返回图片ID,方便后续关联到文章
      } catch (error) {
        console.error('图片上传失败:', error.response.data);
        throw error;
      }
    }
    
  • 调整文章发布的参数格式
    新版本WP-API对文章参数的格式有变化,比如标题、内容需要嵌套在raw字段里,示例代码:

    async function createPost(featuredImageId) {
      try {
        const response = await axios.post('https://你的站点域名/wp-json/wp/v2/posts', {
          title: { raw: '我的新文章标题' },
          content: { raw: '<p>这是文章内容,还可以插入图片:<img src="'+featuredImageId+'"></p>' },
          status: 'publish', // 设置为publish直接发布,draft是草稿
          featured_media: featuredImageId // 关联刚才上传的图片作为特色图片
        }, {
          headers: {
            'Authorization': 'Bearer 你的JWT令牌',
            'Content-Type': 'application/json'
          }
        });
        console.log('文章发布成功:', response.data.link);
      } catch (error) {
        console.error('文章发布失败:', error.response.data);
        throw error;
      }
    }
    
  • 排查异步处理问题
    你的代码里用到了fs.read...,如果是异步读取文件,一定要确保文件读取完成后再发起请求。建议用async/await或者Promise来处理,避免出现“还没读完文件就发请求”的情况。

你可以先从检查端点和认证开始,然后逐步测试图片上传和文章发布的流程,把你的代码替换成上面的示例试试,应该能解决问题。

内容的提问来源于stack exchange,提问作者Максим Малин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:31:03