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

Ninja forms - how to show submitted data to the user on thank you page?

我有一个 Wordpress 网站,我正在使用 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

将表单的重定向 url 设置为 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();
            }
        }
    }
}