php AJAX 中运行wordpress函数- update_post_ meta()

8aqjt8rx  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(111)

我有 AJAX 脚本发送表单,我想另外运行update_post_ meta()函数,如果成功。我假设我可以在ajax_response. php文件中这样做,但这不是wordpress文件,所以wordpress函数在那里不工作。在这个ajax脚本中,哪种方式更好地运行这个脚本(下面),或以某种方式在ajax_response.php(但如何初始化wordpress在这个文件中?)脚本下面是wordpress页面内.

$('#postForm').submit(function(e) {
           e.preventDefault();
           grecaptcha.ready(function () {
               grecaptcha.execute('6Lcg9l8jAAAAAAp4KIczCJ8N_xkOezJt7LngYVgu', { action: 'submit' }).then(function (token) {

            $("#googleResponse").val(token);
        
           $.ajax({
                   url: '/wp-content/themes/zaproszenie/ajax_response.php',
                   type: 'post',
                   data: $('#postForm').serialize(),
                   dataType: 'json',
                   success: function(data){
                       if(data.response == 'success')
                       {
                            $("#response").css('border','1px solid green');
                            $("#response").css('background','#ffffff');
                            $("#response").text(data.msg);
                       }
                       else
                       {
                           $("#response").css('border','1px solid red');
                           $("#response").css('background','#ffffff');
                           $("#response").text(data.msg);
                       }
                   }
            });
        });
    });
});
but5z9lq

but5z9lq1#

在主题或插件中包含非WordPress的php程序是很困难的,也是不安全的。一些安全系统会阻止访问此类程序。
在2022年,您最好的选择是使用WordPress's REST API来实现这一点。
您可以这样做:
在客户端Javascript中,使用url: /wp-json/zaproszenie/v1/captcha发布表单。在本例中,zaproszenie/v1称为 namespacecaptcha称为 base route
在你的主题中,你用这样一个类来实现它。你将把这个类放在一个名为class-zaproszenie-controller.php的文件中。

class Zaproszenie_Controller extends WP_REST_Controller {
  private int $version;
  private string $base;
  public function init() {
    $this->version   = '1';
    $this->namespace = 'zaproszenie';
    $this->base      = 'captcha';
    $this->add_hooks();
  }

  private function add_hooks() {
    add_action( 'rest_api_init', function () {
      register_rest_route( "$this->namespace/v$this->version", "/$this->base",
      [ [ 'callback'            => [ $this, 'post' ],
          'methods'             => 'POST',
          'permission_callback' => '__return_true',
        ], ] ); 
    } );
  }

  /** The POST handler for /wp-json/zaproszenie/v1/captcha
   * @param WP_REST_Request $req
   * @return string
   */
  function post( WP_REST_Request $req ): string {
    require_once ABSPATH . 'wp-admin/includes/admin.php';
    $upload = $req->get_json_params();
    /* here $upload contains the data POSTed from Javascript */

    return json_encode( 'success' );
  }
}

然后,在主题初始化代码的某个地方,执行以下操作:

require_once 'class-zaprozenie-controller.php';
$rest = new Zaproszenie_Controller ();
$rest->init();

而你

相关问题