WordPress REST API - 允许任何人发帖

2024-04-20

我正在 WordPress 上构建一个应用程序,它需要一个简单的前端表单,任何人都可以提交需要保存在数据库中的信息。我正在尝试通过 REST API 来处理这个问题。 (由于应用程序的性质,提交此信息时不能进行任何页面重定向。)

我可以毫无问题地设置 REST API (v2),以便我可以提交帖子。当我登录 WordPress 时它效果很好。当我在未登录 WordPress 的情况下尝试填写表单时,收到错误消息。

无法加载资源:服务器响应状态为 403(禁止)

如何设置 API 以在没有身份验证的情况下接收任何人的 POST?

这是我的 JavaScript:

$( '#post-submission-form' ).on( 'submit', function(e) {
    e.preventDefault();
    var title = $( '#post-submission-title' ).val();
    var excerpt = $( '#post-submission-excerpt' ).val();
    var content = $( '#post-submission-content' ).val();
    var status = 'draft';

    var data = {
        title: title,
        excerpt: excerpt,
        content: content
    };

    $.ajax({
        method: "POST",
        url: POST_SUBMITTER.root + 'wp/v2/posts',
        data: data,
        beforeSend: function ( xhr ) {
            //xhr.setRequestHeader( 'X-WP-Nonce', POST_SUBMITTER.nonce );
        },
        success : function( response ) {
            console.log( response );
            alert( POST_SUBMITTER.success );
        },
        fail : function( response ) {
            console.log( response );
            alert( POST_SUBMITTER.failure );
        }

    });

});

以下是我初始化 javascript 的方式:

function holiday_scripts() {

    // Onload JS
    wp_enqueue_script( 'holiday-js', get_template_directory_uri() . '/js/holiday.js', array(), false, true );

    //localize data for script
    wp_localize_script( 'holiday-js', 'POST_SUBMITTER', array(
        'root' => esc_url_raw( rest_url() ),
        'nonce' => wp_create_nonce( 'wp_rest' ),
        'success' => __( 'Thanks for your submission!', 'your-text-domain' ),
        'failure' => __( 'Your submission could not be processed.', 'your-text-domain' ),
        'current_user_id' => 9
        )
     );
}
add_action( 'wp_enqueue_scripts', 'holiday_scripts' );

有谁知道如何实现这一目标?

Thanks!


可通过三种不同的选项对 REST API 进行身份验证:

  1. Cookie- 这就是你现在使用的
  2. OAuth- 需要 OAuth 插件并在前端嵌入密钥
  3. Basic- 需要在前端嵌入用户名/密码

请参阅此处有关使用这些方法的文档:http://v2.wp-api.org/guide/authentication/ http://v2.wp-api.org/guide/authentication/.

在前端嵌入auth信息存在明显的安全风险,这是需要的OAuth and Basic因为任何人都可以作为与密钥关联的用户进行身份验证。我对 WP OAuth 插件不太熟悉,不知道您可以如何精细地控制访问,但我认为您真的不能。

最简单的解决方案是在 REST API 之外编写您自己的方法来处理这些更新(或为项目做出贡献以使未经身份验证的请求成为可能)。我写了一份指南创建 AJAX 函数 http://justinsilver.com/technology/wordpress/creating-ajax-functions-in-wordpress/在我的网站上,但基本上你想附加一个功能wp_ajax_nopriv_*钩子,其中*是您请求的“action”参数。在您挂钩的 PHP 函数中,您可以处理帖子插入并使用 JSON 进行响应(您甚至可以匹配 WP REST API 格式)。

PHP

// insert new post
function create_post_33741541() {
    // use the $_POST to create your post
    $args = array(
         'post_title' => isset( $_POST['title'] )? $_POST['title'] : 'Empty Title',
         // more parameters....
    );
    $post_id = wp_insert_post( $args );

    // make a response
    $response = array( 'post_id' => $post_id, 'message' => 'post created!' );

    // set the content type and return json encode response, then exit
    header( 'Content-type: application/json' );
    die( json_encode( $response ) );
}
// use wp_ajax_nopriv to access from front end
add_action( 'wp_ajax_nopriv_create_post_33741541', 'create_post_33741541' );
add_action( 'wp_ajax_create_post_33741541', 'create_post_33741541' );

JavaScript

function createThePost(){
    var data = {
        // use the part after "wp_ajax_nopriv" as the action
        action: 'create_post_33741541',
        title: 'Your title',
        // other params
    };

    $.ajax({
        method: "POST",
        url: ajaxurl,
        data: data,
        // your handlers
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WordPress REST API - 允许任何人发帖 的相关文章

  • Ember 模型中的自定义请求 url

    我正在尝试将 Ember 数据与已构建的 REST api 一起使用 它适用于顶级路由 例如我在 api 端有课程路由 如下所示 app get courses app controllers courses findAll app get
  • MySQL 中复制一条记录

    我有一个表 我想复制表中的特定行 我知道这不是最好的方法 但我们正在寻找快速解决方案 这比我最初想象的要难 我需要做的就是将整个记录复制到 MySql 中自动增量表中的新记录 而不需要指定每个字段 这是因为该表将来可能会发生变化 并且可能会
  • 在 Windows 10 中安装 laravel 安装程序时出现错误

    我正在使用 Windows 10 并且composer已安装 当我尝试安装时laravel使用此命令全局安装程序 composer global require laravel installer Composer Downloader T
  • 解释一下 $CI =& get_instance();

    查看codeigniter的源代码 在它的辅助函数中我不断看到代码 CI get instance 谁能向我解释一下这段代码是如何工作的 我知道它正在返回对 CI 超级对象的引用 但是在哪里get instance 来自 这基本上是一个单例
  • 这段php代码安全吗?

    我知道我应该使用准备好的语句 但我的下一个项目将使用准备好的语句 我只需要完成这个简单的小应用程序 所以我的问题是 以下代码片段安全吗 我使用了 htmlentities 以及 mysql real escape string 因为我认为这
  • 如何在alert()之后给予focus()?

    我有类似的东西
  • 无法加载 php_curl

    我已经在WindowsXp上安装了php5 2 13 apache2 2 15 将C php添加到PATH ssystem变量中 我无法启用卷曲扩展 我配置了extension dir并删除了 在 php ini 中形成 php curl
  • PHP 如何保持下拉列表中选定的选项在提交时保持选中状态?

    I have
  • ImmutableJS:合并两个对象列表,而不重复它们

    假设我有以下内容 var allFoods Immutable List var frenchFood Immutable List type french fries price 3 type petit gateau price 40
  • 社交登录重复帐户冲突

    我正在制作一个新应用程序 除了常规电子邮件 密码注册之外 还需要多个社交注册 但是有一种特殊情况可能会导致数据完整性问题 例子 用户在 Facebook 上注册 但没有收到任何电子邮件回复 我在数据库中创建一个用户 将电子邮件和密码设置为
  • 如何从对象 URL 获取文件或 blob?

    我允许用户通过拖放和其他方法将图像加载到页面中 当图像被删除时 我正在使用URL createObjectURL转换为对象 URL 以显示图像 我不会撤销该网址 因为我会重复使用它 所以 当需要创建一个FormData对象 以便我可以允许他
  • 尝试利用?

    我看到我的 nopCommerce 网站记录了以下搜索 ADw script AD4 alert 202 ADw script AD4 我有点好奇他们想要完成什么 我搜索了一下 似乎是ADw script AD4 以 UTF7 编码为
  • /etc/php5/conf.d 文件夹中的 .ini 文件有什么用?

    我知道 ini 文件位于 etc php5 cli与 PHP 的 CLI 使用有关 文件位于 etc php5 fpm是关于 PHP 的 FastCGI FPM 方面 但是位于以下位置的 ini 文件又如何呢 etc php5 conf d
  • 在 Laravel 中使用 PUT/DELETE 有什么价值?

    用于将路由定义为资源Route resource 文档表明 Verb Path Action Route Name GET resource index resource index GET resource create create r
  • 如何对 Slim 框架应用程序进行单元测试

    我一直在尝试对修改其他人代码的示例进行单元测试 每次我到达测试运行时都没有错误的程度 当我期望它们通过时 我只是遇到相同的失败 网上没有大量文档 我真的不知道还能去哪里 任何人都可以看到我的代码哪里出错了 bootstrap php php
  • 使用 php 将 HTML 输出转换为纯文本

    我正在尝试将示例 HTML 输出转换为纯文本 但我不知道如何操作 我使用 file get contents 但我尝试转换的页面返回的结果最相似 raw http localhost guestbook profiles php file
  • PHP IMAP 解码消息

    我有通过 Base64 编码和 8 位编码发送的电子邮件 我想知道如何使用 imap fetchstruct 检查消息的编码 已经这样做了大约两个小时 所以丢失了 然后正确解码 Gmail 和 Mailbox iOS 上的应用程序 将其作为
  • Google Universal Analytics - 命令被忽略

    我正在使用 Google Universal Analytics 来跟踪页面浏览量 当我导航到具有 Google Analytics 网站实时功能的页面时 我可以看到 因此我的代码一定可以正常工作 然而 Chrome 一直在控制台中显示 I
  • 现实世界抽象类使用简单示例

    有没有使用抽象类的现实世界简单示例 我试图进入 PHP 的 OOP 但我仍然无法理解 为什么应该使用抽象类以及何时使用 是的 我知道不可能创建抽象类实例 只能创建继承它的类的实例 也许您有一个图像类 并且有 2 个驱动程序 GD 和 Ima
  • PHP 命名空间 - 提升一个级别?

    示例1 命名空间 Inori Test 主测试类 示例2 命名空间 Inori Test SubTest SubTest 类扩展了 问题 有没有办法快速提升命名空间的级别 以便 SubTest 可以扩展 MainTest 就像是 MainT

随机推荐

  • HTML 5 音频标记多个文件

    我正在尝试在一个 HTML 5 音频标签中放置两个文件 并依次播放 到目前为止我的代码是
  • 获取设备的方向?

    我有一个相机预览活动 它被迫保持在横向模式 有没有办法可以告诉我手机当前的方向 而不是屏幕方向 基本上我想知道用户是否以纵向模式或横向模式握住手机 以便我可以正确旋转输出捕获的位图 现在它总是以横向模式输出 Thanks if getRes
  • 异常字符串插值不替换变量

    我们正在使用 Scala Play 我试图确保所有 SQL 查询都使用 Anorm 的字符串插值 它适用于某些查询 但许多查询实际上并未在执行查询之前替换变量 import anorm SQL import anorm SqlStringI
  • 获取maven插件在自己的Mojo中的目录路径

    我正在创建一个自定义 Maven 插件 在其中一篇 Mojos 中 我正在读一本Xpp3Dom使用以下代码段从 XML 文件中获取对象 File pluginsFile new File absolute path to file plug
  • Django:如何计算浏览的人数

    我正在 Django 中制作一个简单的 BBS 应用程序 我希望每当有人看到帖子时 该帖子的浏览量 post view no 就会增加 目前我面临两个困难 我需要限制 post view no 的增加 以便一个用户只能增加一次 无论用户刷新
  • 使用 Rails 动态构建 RESTful 路由

    我正在尝试编写一个辅助方法 该方法接受复数资源的名称并返回相应的链接 该方法的本质是 def get link resource link to resource capitalize resource path end 显然resourc
  • Django CMS 多级下拉菜单

    我对 Django CMS 有点陌生 我尽力避免询问 但这让我发疯 我制作了一个带有主题和类别模型的 Wiki 应用程序 我将它连接到我的 CMS 上的一个站点并将其添加到我的菜单中 现在我希望能够在我的菜单上显示所有顶级类别 其子类别和主
  • 类型错误:Object(...) 不是 Vue 中的函数

    我是 Vue 新手 正在尝试处理表单 我正在制作一个网络应用程序来管理会议 为此我有一个多步骤表单来处理访客和主持人数据 当我单击提交按钮时 出现以下错误 TypeError Object is not a function 我在 stac
  • Nginx:从不同的根目录和位置提供 JPG 图像

    我有 3 个不同的存储区域 头像 文章 趋势 用于存储我的图像 我想将 URL trends 123 jpg 链接 到趋势文件夹 avatars 23 jpg 链接 到头像等 配置一 server listen 8089 server na
  • 使用偏移时导航栏项目可点击区域被剪切

    在 SwiftUI 中 考虑这个导航栏 这是尾随的方式 navigationBarItems宣布 HStack spacing 0 Button action self addListModal true label NavBarImage
  • Python - 对包含字符串和数字的列表中的数字值进行排序

    我创建了一个列表 其中包含 python 中分数文件的所有信息 分数 txt 文件 Dan Danson 9 6 1 John Johnson 5 7 10 Mike Mikeson 10 7 6 我这样做是为了将 txt 文件中的信息获取
  • ruby splat 运算符在多重赋值期间到底如何获取数组的第一个和其余部分?

    在 ruby 中 可以将多重赋值与 splat 运算符结合起来 以模拟函数式语言中的first 和rest 或head 和tail first rest 1 2 3 4 first output 1 rest output 2 3 4 sp
  • 有人使用 ASP .NET 会员资格吗?

    想知道是否有人使用 ASP NET 会员资格 如果你这样做 请告诉我你的想法 如果您不使用它 您打算在未来的项目中使用它吗 如果没有 为什么 RWendi 是的 已经用过很多次了 它会为你节省很多工作 客户经常会要求更改用户名和管理密码重置
  • 如何使用适用于 C 和 C++ 的 GSOAP 访问 Amazon AWS S3?

    我到处搜索这个 但找不到一个合适的代码 我怎样才能访问亚马逊 AWS S3 http aws amazon com s3 服务使用GSOAP http gsoap2 sourceforge net 下面的代码来自OP 最初 该帖子包含问题和
  • VS 2012 扩展中的标准控件

    我目前正在更改公司内部的 VS 扩展以支持 Visual Studio 2012 我正在努力解决的是如何使 UI 动态适应活动的 VS 主题 我找到了几个颜色 画笔的资源键 Microsoft VisualStudio Shell 11 0
  • Google Freebase API 如何获取图像的 URL?

    所以 我试图弄清楚如何获取 Freebase 数据库中图像的 URL 我想要一张旧金山的照片 这就是我获取旧金山主题的方式 https www googleapis com freebase v1sandbox topic 2Fen 2Fs
  • 编译具有多个参数的案例类会导致 java.lang.StackOverflowError

    我有以下带有大量参数 150 的案例类 在使用 sbt 版本 0 14 编译期间导致 java lang StackOverflowError 异常 类定义 case class TestClass Param1 String Param2
  • 通过 url 将整数传递给 php $_GET

    所以我正在做一些 CTF 挑战之一是关于 php 类型杂耍 代码看起来像这样 if GET var1 hash md4 GET var1 print flag 所以我 80 确定我需要传入一个整数 这样它就会是真的 但我能操作的只是 url
  • jQuery Uncaught TypeError 与 Theme Punch Revolution Slider

    我遇到了一个无法追踪的问题 我正在使用革命滑块 http themes themepunch com theme revolution jq我不断收到 jQuery 错误 Uncaught TypeError Cannot read pro
  • WordPress REST API - 允许任何人发帖

    我正在 WordPress 上构建一个应用程序 它需要一个简单的前端表单 任何人都可以提交需要保存在数据库中的信息 我正在尝试通过 REST API 来处理这个问题 由于应用程序的性质 提交此信息时不能进行任何页面重定向 我可以毫无问题地设