首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忍者表单服务器端验证不起作用

忍者表单服务器端验证不起作用
EN

Stack Overflow用户
提问于 2020-04-26 20:20:16
回答 2查看 1.2K关注 0票数 1

我花了两天的时间试图弄清楚这一点。我有一个四字段忍者表单的wordpress页面。其中一个字段是电子邮件。我创建了一个应用程序接口(在我们的.NET核心项目中),如果数据库中已经存在具有该电子邮件地址的,则会检查并抛出400错误。我正在使用忍者表单Webhook功能将表单提交到我的API。我只想向用户显示我的400错误消息。

我正在使用来自忍者表单的以下文档,但它不起作用:

https://developer.ninjaforms.com/codex/custom-server-side-validation/

更具体地说,我在控制台中得到了一个500,其中包含以下错误:

代码语言:javascript
复制
Uncaught Error: Call to undefined function my_nf_validation() in \/home\/site\/wwwroot\/wp-content\/themes\/hello-elementor\/functions.php:245\nStack trace:\n#0 \/home\/site\/wwwroot\/wp-includes\/class-wp-hook.php(287): {closure}(Array)\n#1 \/home\/site\/wwwroot\/wp-includes\/plugin.php(206): WP_Hook->apply_filters(Array, Array)\n#2 \/home\/site\/wwwroot\/wp-content\/plugins\/ninja-forms\/includes\/AJAX\/Controllers\/Submission.php(132): apply_filters('ninja_forms_sub...', Array)\n#3 \/home\/site\/wwwroot\/wp-includes\/class-wp-hook.php(287): NF_AJAX_Controllers_Submission->submit('')\n#4 \/home\/site\/wwwroot\/wp-includes\/class-wp-hook.php(311): WP_Hook->apply_filters('', Array)\n#5 \/home\/site\/wwwroot\/wp-includes\/plugin.php(478): WP_Hook->do_action(Array)\n#6 \/home\/site\/wwwroot\/wp-admin\/admin-ajax.php(175): do_action('wp_ajax_nf_ajax...')\n#7 {main}\n  thrown<\/pre>"},"last":{"type":1,"message":"Uncaught Error: Call to undefined function my_nf_validation() in \/home\/site\/wwwroot\/wp-content\/themes\/hello-elementor\/functions.php:245\nStack trace:\n#0 \/home\/site\/wwwroot\/wp-includes\/class-wp-hook.php(287): {closure}(Array)\n#1 \/home\/site\/wwwroot\/wp-includes\/plugin.php(206): WP_Hook->apply_filters(Array, Array)\n#2 \/home\/site\/wwwroot\/wp-content\/plugins\/ninja-forms\/includes\/AJAX\/Controllers\/Submission.php(132): apply_filters('ninja_forms_sub...', Array)\n#3 \/home\/site\/wwwroot\/wp-includes\/class-wp-hook.php(287): NF_AJAX_Controllers_Submission->submit('')\n#4 \/home\/site\/wwwroot\/wp-includes\/class-wp-hook.php(311): WP_Hook->apply_filters('', Array)\n#5 \/home\/site\/wwwroot\/wp-includes\/plugin.php(478): WP_Hook->do_action(Array)\n#6 \/home\/site\/wwwroot\/wp-admin\/admin-ajax.php(175): do_action('wp_ajax_nf_ajax...')\n#7 {main}\n  thrown","file":"\/home\/site\/wwwroot\/wp-content\/themes\/hello-elementor\/functions.php","line":245}},"debug":[]}

我将代码放在主题编辑器的function.php文件中。这是我第一次使用wordpress,所以我希望我这样做是对的。这是我的代码,直接取自上面的文档:

代码语言:javascript
复制
add_filter( 'ninja_forms_submit_data', function( $form_data ){

  if( ! my_nf_validation( $form_data ) ) { // Add check here.

    $errors = [
      __( 'An unexpected error occurred.', 'my-plugin' )
    ];

    $response = [
        'errors' => $errors,
    ];

    echo wp_json_encode( $response );
    wp_die(); // this is required to terminate immediately and return a proper response
  }

  // If no errors, be sure to return the $form_data.
  return $form_data;
});

我真的很感谢任何人在这方面的帮助。

EN

回答 2

Stack Overflow用户

发布于 2020-10-14 10:12:01

尝试下面的代码,它将会工作。

代码语言:javascript
复制
function validateCode($field){

if( checkCondition ){
    // let it go
    return true;
}
else{
    return false;
}
}
add_filter( 'ninja_forms_submit_data', 'my_ninja_forms_submit_data' );
function my_ninja_forms_submit_data( $form_data ) {
$form_settings = $form_data[ 'settings' ]; // Form settings.
if($form_data['id'] == '2'){
    foreach( $form_data[ 'fields' ] as $field ) { // Field settigns, including the field key and value.
        if( 'unique_code' == $field[ 'key' ] ){

            if(!validateCode($field)){
                $form_data['errors']['fields'][$field['id']] = "INVALID CODE";
            }
        }
    }
}
return $form_data;
}
票数 1
EN

Stack Overflow用户

发布于 2020-04-28 04:41:19

文档引用了一个自定义的WordPress过滤器,如忍者表单插件所定义。过滤器是WordPress钩子的一个特性,它允许一个主题或插件修改另一个主题或插件的功能。请参阅https://developer.wordpress.org/plugins/hooks/filters/

对于您的问题,Webhooks附加插件(忍者表单的官方扩展)不需要使用文档中引用的过滤器。

相反,您需要将"my_nf_validation()“替换为您自己定义的函数,如文档所示。

您的函数需要处理API请求和响应处理。在文档示例中,自定义函数返回一个布尔值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61440656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档