使用PHP编写WordPress AJAX表单以检查用户是否已注销并显示错误

时间:2020-08-30 作者:Aditya Agarwal

我有一个WordPress前端表单,它使用AJAX保存数据。表单是在后端处理的,显然是使用PHP post,我做了一个简单的解决方案,如果表单无法提交,就向用户通知表单提交错误。

但我的表单是针对已登录用户的,如果WordPress用户已注销,我希望我的表单显示错误消息。

<form action="https://milyin.com/my/" method="post" name="milyin-add-edit" id="Add-Edit" enctype="multipart/form-data">
        <input type="hidden" name="action" value="wpfrtp_save_post">
这是表单的开始,我相信表单HTML的其余部分确实与这个问题无关,所以我不会包括这些内容,如果仍然需要,请在注释中通知我,这也不会是问题。

下面是用于通过AJAX提交表单的JS,然后还用于显示一些错误。

jQuery(\'#Add-Edit\').on(\'submit\', function(e) {
        e.preventDefault();
        jQuery(\'.action-save\').prop(\'disabled\', true);
                jQuery.ajax({
                        url : jQuery(this).attr(\'action\') || window.location.pathname,
                        type: "POST",
                        data: jQuery(this).serialize(),
                        error: function(jqXHR)  {
                                jQuery(".action-save").html("Error");
                                jQuery(".action-save").css("background-color", "red");
                                jQuery("#user_post_publish").html("Error");
                                jQuery(" #user_post_publish").css("background-color", "red");

                                msg = \'\';
                                if (jqXHR.status === 0) {
                                            msg = \'No Internet Connection Available. Turns out your Internet has gone to a random hibernation\';
                                } else if (jqXHR.status == 404) {
                                            msg = \'Requested page not found. [404]\';
                                } else if (jqXHR.status == 500) {
                                            msg = \'Internal Server Error [500]. Hold Tight, Our        Server turned Evil, we will solve it soon. Please try again after some time.\';
                                } else if (exception === \'parsererror\') {
                                            msg = \'Requested JSON parse failed.\';
                                } else if (exception === \'timeout\') {
                                            msg = \'Time out error. It took too long to transfer the data, please save again.\';
                                } else if (exception === \'abort\') {
                                            msg = \'Ajax request aborted.\';
                                } else {
                                            msg = \'Uncaught Error.\\n\' + jqXHR.responseText;
                                }
                                jQuery(\'.Error\').html(msg);
                                jQuery(\'.Error\').show();
                        }
         });

});


正如您在我的代码中看到的,如果发生任何形式的表单提交错误,我们会将按钮变为红色,并将其文本更改为;“错误”;然后检查错误代码,并根据错误代码显示消息。

现在,如果用户注销并尝试提交表单,它将不会显示“一个”;“错误”;由于表单提交成功,AJAX寻求success 功能而不是error 作用

我想做的是:

因此,首先,我想确保如果用户注销,AJAX知道表单提交中有错误,并且success() 不应该运行,我没有包括success()代码,因为它很长而且似乎不相关。

其次,我想告诉error函数,错误是由于用户注销引起的,这样我就可以通过jQuery(\'.Error\').html(msg);

if(isset($_POST[\'action\'])&& $_POST[\'action\']=="wpfrtp_save_post"){
        if ( !wp_verify_nonce( $_POST[\'frontier_add_edit_post_\'.$_POST[\'postid\']], \'frontier_add_edit_post\'  ) ){
[...]
        global $current_user;
        if(!is_user_logged_in()){


//This is the problem region
// I don\'t understand What Should come here


        }
        

1 个回复
最合适的回答,由SO网友:Hector 整理而成

需要来自的响应php 发送AJAX调用后的一方。

// ... rest of the code

if ( is_user_logged_in() ) {
    wp_send_json_success();
} else {
    wp_send_json_error( null, 403 );
}

// ... rest of the code
然后在你的JS 代码为添加新检查jqXHR.status == 403 错误

文件:

wp_send_json_success

wp_send_json_error