Ninja 表单 - 如何在感谢页面上向用户显示提交的数据?

问题描述

我有一个 wordpress 网站,我正在使用 Ninja Forms 插件来创建一个简单的表单。

我正在寻找一种方法来制作一个“谢谢”页面,该页面显示用户提交的摘要

到目前为止,我所管理的是在“谢谢”页面(Ninja Forms 重定向操作)url 中使用提交表单的键(例如 https://mywebsite.com/thank-you/?key=24)的查询字符串。

我知道如何显示整个表单中的数据(使用表单 ID),但我不知道如何使用此键仅显示来自特定提交的数据。

解决方法

您可以编写代码来检索提交的数据。

Ninja_Forms()->form()->get_sub( $key );
// Get all values for a Submission
$field_values = $sub->get_field_values();

看看 Ninja Forms Submissions

我还写过关于 retrieving all submission data 的文章。

,

将表单的重定向网址设置为 http://example.com/thank-you-page/?key={form:id}:{submission:sequence}

代码提取表单id和提交顺序。然后它获取该表单的字段,然后循环遍历该表单的提交,查找传递的提交序列并显示它。

这是非常不安全的代码,因为它允许任何人查看提交的内容。

add_filter( 'the_content','dcwd_display_ninja_forms_submission',11 );
function dcwd_display_ninja_forms_submission( $content ) {
    if ( !is_page('thank-you-page') ) { return $content; }

    if ( array_key_exists( 'key',$_GET ) && preg_match( '/^(\d+):(\d+)/',$_GET['key'],$matches ) ) {
        ob_start();

        $form_id = $matches[1];
        $sub_id = $matches[2];

        $form_fields = Ninja_Forms()->form( $form_id )->get_fields();
        $key_to_fieldname = array();
        foreach ( $form_fields as $form_field ) {
            $key_to_fieldname[ $form_field->get_setting( 'key' ) ] = $form_field->get_setting( 'label' );
        }
        unset( $key_to_fieldname[ 'submit' ] );  // Do not need 'Submit' info as there won't be any data in it.
        //echo '<h2>Form Fields</h2><pre>',var_export( $key_to_fieldname,true ),'</pre>';

        $subs = Ninja_Forms()->form( $form_id )->get_subs();
        foreach ( $subs as $sub ) {
            if ( $sub_id == $sub->get_seq_num() ) {
                echo '<style>table,th,td { border: 1px solid #ccc; border-collapse: collapse; } th,td { padding: 1em; } th { font-weight: bold; }</style>';
                echo '<table><tr><th>',implode( '</th><th>',array_values( $key_to_fieldname ) ),'</th></tr>';
                $values = $sub->get_field_values();
                echo '<tr>';
                foreach ( $key_to_fieldname as $key => $name ) {
                    if ( array_key_exists( $key,$values ) ) {
                        echo '<td>',$values[ $key ],'</td>';
                    }
                }
                echo '</tr></table>';
                
                return $content . ob_get_clean();
            }
        }
    }
}