操作‘init’函数不返回变量

时间:2015-10-28 作者:Galivan

我有一个函数可以检查是否设置了$\\u POST(提交到同一页的表单)。我需要在加载页面之前对其进行初始化,因为函数将执行标题redirect 如果验证过程没有错误。

因此,函数注册如下:

add_action(\'init\', \'signup_validate_insert\');
函数本身是这样开始的:

function signup_validate_insert(){
    $errors = false;
        if (!empty($_POST[\'submit_msg\'])) {
         //validation and stuff
        }
如果有错误,则返回错误数组:

return $errors;
当按下submit按钮时,函数将按其应该的方式进行注册,并进行验证。我已经检查了函数中是否填充了错误数组。但是变量没有返回!(尽管我设置了“return$errors”)

变量应该返回到模板,如果$errors不为空,则可以在模板中显示错误。

我试过切换到add_filter 相反,结果是一样的。

所以问题是如何才能返回这个变量-希望你能帮助!

3 个回复
SO网友:Mark Kaplun

操作不会“返回”值。如果您需要进行一些繁重的计算,以避免在以后的阶段重做,那么应该将值存储在全局变量中(纯全局、静态或对象中的字段,具体取决于您最喜欢的编码样式)。

SO网友:Balas

查看我的更新答案,现在我根据您的情况进行了尝试,我的url与现在类似

    http://www.example.com/?query=yes

add_action(\'init\', \'my_cookie\');

add_action(\'init\', \'signup_validate_insert\');

function signup_validate_insert() {
    if(isset($_REQUEST[\'query\'])) {     
        $errors = \'my_error\';
        setcookie("my_cookie", $errors, time()+3600);       
        wp_redirect(home_url(\'shortcode-9/\'));
        die();
    }
}

function my_cookie() {
    if(isset($_COOKIE[\'my_cookie\'])) {

        echo $_COOKIE[\'my_cookie\'];
    }
}

    it is for me working nice. am i right? Reply your thoughts.

SO网友:Steven

如果我没记错的话,除非您指定一个POST提交,否则它将使用GET作为默认值
So使用$_POST 将返回空。如果您使用$_GET 它会起作用的。我经常使用$_REQUEST 以避免此问题。

作为Pat的评论,add_action 始终返回true。因此,如果需要返回erros以在表单中显示,那么应该考虑通过ajax发送表单。

function signup_validate_insert()
{
    $errors = false;
    if (!empty($_POST[\'submit_msg\'])) {
      // Do your validation
    } else {
      $errors = true;
    }

    //If no errors are found, procede with form submition.
    if(!$errors){
      wp_redirect( $location, $status );
      exit;
    } else {          
      /*
        If errors are found you have 3 options:
        1. Store the errors in a db table and retrieve the errors in the page template  
        2. Store the errors in a cookie
        3. Redirect page to form and put the erros in the URL

      */
    }
}
但是,我强烈建议您通过jQuery提交for并返回错误(如果有)。如果没有,请将数据重定向到页面以处理表单提交。

var formData = $(\'form\').serialize()

$.ajax({
  type: "POST",
  url: url,
  data: formData ,
  success: success,
  dataType: dataType
});

相关推荐

TINI_MCE_BEFORE_INIT不是触发器

我正试图清理WordPress中粘贴的文本,因此我决定按照this tutorial.添加一个过滤器似乎很简单before_wp_tiny_mce 并添加一个设置来清理文本。我的问题是tiny_mce_before_init 从未触发。我可以看到这些挂钩触发:before_wp_tiny_mce, wp_tiny_mce_init, after_wp_tiny_mce 但从来没有tiny_mce_before_init.我到处都找遍了,没有任何东西拆下过滤器,也没有任何扩展来更换tinymce。如果有人有