0

我在 iframe 中嵌入了 Angular 应用程序到 Wordpress 站点。

Angular 应用程序试图触发在子主题的 function.php 文件中注册的 Wordpress 操作,代码如下:

angular_app.js

this.http.post('/wp-admin/admin-ajax.php', {action: 'my_sendmail', data: 'whatever'}).subscribe((response) => {
  console.log(response);
});

函数.php

add_action( 'wp_ajax_my_sendmail', 'my_sendmail_function' );
add_action( 'wp_ajax_nopriv_my_sendmail', 'my_sendmail_function' );

function my_sendmail_function() {
    wp_send_json(array('resp' => 'Hello World!'));
    wp_die();
}

以上不起作用。有趣的是,当我将 JS 代码更改为:

this.http.get('/wp-admin/admin-ajax.php?action=my_sendmail').subscribe((response) => {
  console.log(response);
});

它可以工作,但是我确实需要将其设为 POST,因为我需要在请求中发布大量数据。有人知道这里发生了什么吗?

4

1 回答 1

0

最后,我试图让这个工作。我使用不同的可用机制解决了它。在 function.php 我创建了新的休息端点:

add_action( 'rest_api_init', function() {
    register_rest_route("as/api", "sendmail", array(
        'methods' => 'POST',
        'callback' => 'my_sendmail_function'
    ));
});

function my_sendmail_function() {
    ...email setup;
    wp_main($to, $subject, $body, $headers);
}

在 FE 上,在我的 Angular 应用程序中:

this.http.post(location.origin + '/wp-json/as/api/sendmail', data).subscribe((response) => {
  console.log(response);
});

效果很好。

于 2021-02-28T16:57:25.590 回答