• Resolved vilanova

    (@vilanova)


    I’m trying to follow this guidance https://wpforms.com/developers/how-to-display-form-entries/ (putting the code in Code Snippets)
    but when I put it on the site:
    echo do_shortcode(‘[wpforms_entries_table id=”11″]’);

    I get the following error:
    There is a critical error on your site.

    and in my debug.log:
    thrown in /var/www/htdocs/wp-content/plugins/code-snippets/php/snippet-ops.php(446): eval () ‘d code on line 99
    I believe you want this line
    $ entries = wpforms () -> entry-> get_entries ($ entries_args);

    what could be happening?

    thanks!

Viewing 4 replies - 1 through 4 (of 4 total)
  • Hello @vilanova,

    I tried the custom code in the dev doc that you link and it worked without an issue.

    By the looks of it, the code might not have been copied correctly in your setup. Can you please make sure that you have all the codes in the dev doc copied correctly on your site?

    In case the issue persists, please post the code you have added here. And for formatting purposes, please wrap the code that you will post here inside the <pre></pre> tags.

    Thank you.

    Thread Starter vilanova

    (@vilanova)

    Hi!
    thanks for the reply. Of course, the code I entered in the Snippet (and a screenshot of it here: https://tinyurl.com/y4f83skq):

    /**
     * Custom shortcode to display WPForms form entries.
     *
     * Basic usage: [wpforms_entries_table id="FORMID"].
     * 
     * Possible shortcode attributes:
     * id (required)  Form ID of which to show entries.
     * user           User ID, or "current" to default to current logged in user.
     * fields         Comma seperated list of form field IDs.
     * number         Number of entries to show, defaults to 30.
     * 
     * @link https://wpforms.com/developers/how-to-display-form-entries/
     *
     * @param array $atts Shortcode attributes.
     * 
     * @return string
     */
    function wpf_entries_table( $atts ) {
     
        // Pull ID shortcode attributes.
        $atts = shortcode_atts(
            [
                'id'     => '',
                'user'   => '',
                'fields' => '',
                'number' => '',
            ],
            $atts
        );
     
        // Check for an ID attribute (required) and that WPForms is in fact
        // installed and activated.
        if ( empty( $atts['id'] ) || ! function_exists( 'wpforms' ) ) {
            return;
        }
     
        // Get the form, from the ID provided in the shortcode.
        $form = wpforms()->form->get( absint( $atts['id'] ) );
     
        // If the form doesn't exists, abort.
        if ( empty( $form ) ) {
            return;
        }
     
        // Pull and format the form data out of the form object.
        $form_data = ! empty( $form->post_content ) ? wpforms_decode( $form->post_content ) : '';
     
        // Check to see if we are showing all allowed fields, or only specific ones.
        $form_field_ids = ! empty( $atts['fields'] ) ? explode( ',', str_replace( ' ', '', $atts['fields'] ) ) : [];
     
        // Setup the form fields.
        if ( empty( $form_field_ids ) ) {
            $form_fields = $form_data['fields'];
        } else {
            $form_fields = [];
            foreach ( $form_field_ids as $field_id ) {
                if ( isset( $form_data['fields'][ $field_id ] ) ) {
                    $form_fields[ $field_id ] = $form_data['fields'][ $field_id ];
                }
            }
        }
     
        if ( empty( $form_fields ) ) {
            return;
        }
     
        // Here we define what the types of form fields we do NOT want to include,
        // instead they should be ignored entirely.
        $form_fields_disallow = apply_filters( 'wpforms_frontend_entries_table_disallow', [ 'divider', 'html', 'pagebreak', 'captcha' ] );
     
        // Loop through all form fields and remove any field types not allowed.
        foreach ( $form_fields as $field_id => $form_field ) {
            if ( in_array( $form_field['type'], $form_fields_disallow, true ) ) {
                unset( $form_fields[ $field_id ] );
            }
        }
     
        $entries_args = [
            'form_id' => absint( $atts['id'] ),
        ];
     
        // Narrow entries by user if user_id shortcode attribute was used.
        if ( ! empty( $atts['user'] ) ) {
            if ( $atts['user'] === 'current' && is_user_logged_in() ) {
                $entries_args['user_id'] = get_current_user_id();
            } else {
                $entries_args['user_id'] = absint( $atts['user'] );
            }
        }
     
        // Number of entries to show. If empty, defaults to 30.
        if ( ! empty( $atts['number'] ) ) {
            $entries_args['number'] = absint( $atts['number'] );
        }
     
        // Get all entries for the form, according to arguments defined.
        // There are many options available to query entries. To see more, check out
        // the get_entries() function inside class-entry.php (https://a.cl.ly/bLuGnkGx).
        $entries = wpforms()->entry->get_entries( $entries_args );
     
        if ( empty( $entries ) ) {
            return '<p>No entries found.</p>';
        }
     
        ob_start();
     
        echo '<table class="wpforms-frontend-entries">';
     
            echo '<thead><tr>';
     
                // Loop through the form data so we can output form field names in
                // the table header.
                foreach ( $form_fields as $form_field ) {
     
                    // Output the form field name/label.
                    echo '<th>';
                        echo esc_html( sanitize_text_field( $form_field['label'] ) );
                    echo '</th>';
                }
     
            echo '</tr></thead>';
     
            echo '<tbody>';
     
                // Now, loop through all the form entries.
                foreach ( $entries as $entry ) {
     
                    echo '<tr>';
     
                    // Entry field values are in JSON, so we need to decode.
                    $entry_fields = json_decode( $entry->fields, true );
     
                    foreach ( $form_fields as $form_field ) {
     
                        echo '<td>';
     
                            foreach ( $entry_fields as $entry_field ) {
                                if ( absint( $entry_field['id'] ) === absint( $form_field['id'] ) ) {
                                    echo apply_filters( 'wpforms_html_field_value', wp_strip_all_tags( $entry_field['value'] ), $entry_field, $form_data, 'entry-frontend-table' );
                                    break;
                                }
                            }
     
                        echo '</td>';
                    }
     
                    echo '</tr>';
                }
     
            echo '</tbody>';
     
        echo '</table>';
     
        $output = ob_get_clean();
     
        return $output;
    }
    add_shortcode( 'wpforms_entries_table', 'wpf_entries_table' );
    

    Hello @vilanova,

    My apologies for forgetting to mention that the code from the dev doc will only work for the Pro (paid) version of WPForms. That is because entries are not stored in the Lite version.

    I hope this clarifies it.

    Thank you.

    Hello @vilanova,

    We haven’t heard back from you in about a week, so I’m going to go ahead and close this thread for now. But if you’d like us to assist further, please feel welcome to continue the conversation (please just see my post above).

    Thanks!

Viewing 4 replies - 1 through 4 (of 4 total)
  • The topic ‘Display Form Entries shortcode error’ is closed to new replies.