如何从 wordpress rest 访问表单对象 api

How to access form object from wordpress rest api

我正在使用这个 ajax 调用参数来传递数据:

var formData = new FormData();

formData.append('file', selectedFile);
formData.append('subject', 'test subject');
formData.append('message', 'test message');

url: 'my/endpoint',
type: 'POST',
data: formData,
cache: false,
contentType: false,
enctype: 'multipart/form-data',
processData: false

这是我的终点:

function test_endpoint(WP_REST_Request $request){
   return $request->get_body();
   //return wp_mail( $to, $subject, $body, $headers, $attachments );
}

我可以看到数据:

基本上我是在尝试访问表单参数,以便将它们放入电子邮件中。我不知道如何访问文件、主题和消息?

您不能或至少不应在使用 Wordpress 时直接调用 ajax。 有一个内置机制来处理 ajax 调用。

大致你需要做的是:

编写触发 ajax 调用时将在服务器上执行的函数,然后将其绑定到 ajax 回调操作。

add_action( 'wp_ajax_nopriv_myaction', 'my_ajax_processing_func' );  
add_action( 'wp_ajax_myaction', 'my_ajax_processing_func' );

function my_ajax_processing_func() {
    <Your processing here>
}

注意 add_action() 中的“myaction”部分。在从客户端发送的表单数据中,必须有一个 action 参数设置为此标识符 (myaction) 才能进行绑定。

同样在表格中 url 必须设置为 admin_url( 'admin-ajax.php' )。这个url的获取方式是使用wp_localized_script().

下载到js脚本中

您可以在这里找到完整的解释: Using AJAX With PHP on Your WordPress Site Without a Plugin

出于安全原因,另请查看这篇文章以将随机数添加到表单中。 How to Add a WordPress AJAX Nonce

我发现那是我的ajax。所以我直接切换到 XHR,它成功了:

 var xhr = new XMLHttpRequest();
 xhr.open('POST', 'my/endpoint', true);
 xhr.onload = function () {
    console.log('response',JSON.parse(this.responseText));
 };
xhr.send(formData);