¿Desea mostrar las entradas de un formulario en una página de su sitio para mostrar públicamente a los usuarios los formularios completados? Este tutorial le guiará a través de cómo crear e implementar esta funcionalidad en su sitio de WordPress.
Por defecto, sólo los usuarios pro pueden ver las entradas del formulario desde el admin de WordPress basado en los Controles de Acceso asignados a su usuario. Sin embargo, puedes crear fácilmente la funcionalidad para mostrar las entradas del formulario en el frontend de tu sitio.
Creación del código corto
En primer lugar, le proporcionaremos un fragmento de código que tendrá que añadir a su sitio para que pueda reutilizar fácilmente este mismo shortcode con la excepción de que sólo tendrá que actualizar el ID del formulario según lo necesite.
Sólo tiene que añadir el siguiente fragmento de código a su sitio. Si no está seguro de cómo hacerlo, consulte este tutorial.
/**
* Custom shortcode to display WPForms form entries in table view.
*
* 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 separated list of form field IDs.
* number Number of entries to show, defaults to 30.
*
* @link https://wpforms.com/developers/how-to-display-form-entries/
*
* Realtime counts could be delayed due to any caching setup on the site
*
* @param array $atts Shortcode attributes.
*
* @return string
*/
function wpf_entries_table( $atts ) {
// Pull ID shortcode attributes.
$atts = shortcode_atts(
[
'id' => '',
'user' => '',
'fields' => '',
'number' => '',
'type' => 'all', // all, unread, read, or starred.
'sort' => '',
'order' => 'asc',
],
$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 = isset( $atts[ 'fields' ] ) && $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' ] );
}
// Filter the type of entries all, unread, read, or starred
if ( $atts[ 'type' ] === 'unread' ) {
$entries_args[ 'viewed' ] = '0';
} elseif( $atts[ 'type' ] === 'read' ) {
$entries_args[ 'viewed' ] = '1';
} elseif ( $atts[ 'type' ] === 'starred' ) {
$entries_args[ 'starred' ] = '1';
}
// 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 = json_decode(json_encode(wpforms()->entry->get_entries( $entries_args )), true);
if ( empty( $entries ) ) {
return '<p>No entries found.</p>';
}
foreach($entries as $key => $entry) {
$entries[$key][ 'fields' ] = json_decode($entry[ 'fields' ], true);
$entries[$key][ 'meta' ] = json_decode($entry[ 'meta' ], true);
}
if ( !empty($atts[ 'sort' ]) && isset($entries[0][ 'fields' ][$atts[ 'sort' ]] ) ) {
if ( strtolower($atts[ 'order' ]) == 'asc' ) {
usort($entries, function ($entry1, $entry2) use ($atts) {
return strcmp($entry1[ 'fields' ][$atts[ 'sort' ]][ 'value' ], $entry2[ 'fields' ][$atts[ 'sort' ]][ 'value' ]);
});
} elseif ( strtolower($atts[ 'order' ]) == 'desc' ) {
usort($entries, function ($entry1, $entry2) use ($atts) {
return strcmp($entry2[ 'fields' ][$atts[ 'sort' ]][ 'value' ], $entry1[ 'fields' ][$atts[ 'sort' ]]['value']);
});
}
}
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_fields = $entry[ 'fields' ];
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' );
Lo que este fragmento de código va a hacer es permitirle utilizar este código corto en cualquier lugar de su sitio que acepte códigos cortos como páginas, entradas y áreas de widgets.
Con sólo utilizar este [wpforms_entries_table id="FORMID"]
sus visitantes verán las entradas enviadas para el formulario que especifique en id="FORMID".
El número de identificación de un formulario se puede encontrar yendo a WPForms " Todos los formularios y mirando el número en la columna Shortcode para cada formulario.

Visualización de entradas de formulario
Después de crear el shortcode, tendrás que añadirlo a una página o entrada de tu sitio para mostrar tus entradas.
En primer lugar, tendrá que determinar en qué ID de formulario desea mostrar estas entradas. En nuestro ejemplo, vamos a mostrar las entradas para el formulario ID 211 por lo que nuestro código corto se parece a esto.
[wpforms_entries_table id="211"]
El único atributo requerido para utilizar el shortcode es el id, sin definir esto en su shortcode, nada se mostrará por lo que el ID del formulario debe aparecer dentro del shortcode.
Sin embargo, puede filtrar aún más sus entradas definiendo algunos de los atributos del shortcode y vamos a revisar cada atributo disponible.
Definición del tipo Atributo
Puede utilizar el atributo type si desea mostrar sólo las entradas con estrella. He aquí un ejemplo.
[wpforms_entries_table id="211" type="starred"]
A continuación se indican otros parámetros de tipo disponibles que puede utilizar:
- all - utilizando este atributo se mostrarán todos los tipos de entrada.
- leer - este atributo sólo mostrará las entradas que hayan sido vistas por un administrador.
- no leído - usando este atributo, sólo verás las entradas que no han sido abiertas por un administrador en tu sitio.
- starred - este atributo sólo mostrará las entradas que hayan sido marcadas con una estrella por un administrador
Utilización del atributo user
Si un usuario ha iniciado sesión en tu sitio y sólo quieres que vea las entradas del formulario que ha enviado, utiliza este shortcode.
[wpforms_entries_table id="FORMID" user="current"]
Si el usuario no ha iniciado sesión, se mostrarán todas las entradas de este formulario.
Si el usuario está conectado pero no ha rellenado el formulario (mientras está conectado), aparecerá en la página No se han encontrado resultados.
Definición de los campos Atributo
Para mostrar sólo determinados campos, primero tendrá que averiguar los ID de los campos que desea mostrar. Para ello, consulte este tutorial.
Una vez que sepas cuales son los IDs de los campos, usarás esto como tu shortcode. En este ejemplo, sólo queremos el campo Nombre que es el campo ID 0 y el campo Comentarios que es el campo ID 2.
[wpforms_entries_table id="211" fields="0,2"]
Nota: Los ID de campo múltiples se separan mediante una coma en el shortcode.
Uso del atributo número
Por defecto, el shortcode sólo mostrará las 30 primeras entradas. Sin embargo, si desea mostrar una cantidad menor, tendrá que utilizar la opción number
parámetro. Por ejemplo, si desea mostrar las 20 primeras entradas, añada su shortcode de la siguiente manera.
[wpforms_entries_table id="211" number="20"]
La variable number="20″ pasada dentro del shortcode determinará cuántas entradas mostrará la tabla. Si desea mostrar todas las entradas, cambie el número a 9999.

Uso del atributo de ordenación
Cuando use su shortcode puede decirle al shortcode por qué campo quiere ordenar la tabla y luego definir si quiere que se ordene por asc (orden ascendente) o desc (orden descendente). Un ejemplo de ese shortcode se vería así.
[wpforms_entries_table id="211" sort="1" order="asc"]
En este ejemplo, vamos a mostrar una tabla de entradas para el formulario ID 211 y vamos a ordenar esta tabla en orden ascendente utilizando el campo ID 1, que es el ID del campo Nombre del formulario.
Estilizar la mesa (opcional)
El estilo de la tabla de entradas es completamente opcional, ya que la mayoría de los temas tienen incorporado el estilo de tabla por defecto, al igual que los navegadores. Sin embargo, queríamos que empezaras con un ejemplo, así que si quieres cambiar el estilo predeterminado de la tabla, tendrás que copiar y pegar este CSS en tu sitio.
Si necesita ayuda sobre cómo y dónde añadir CSS a su sitio, consulte este tutorial.
El estilo de su tabla de entrada variará dependiendo del estilo predeterminado que su tema pueda o no tener para las tablas.
table {
border-collapse: collapse;
}
thead tr {
height: 60px;
}
table, th, td {
border: 1px solid #000000;
}
td {
white-space: normal;
max-width: 33%;
width: 33%;
word-break: break-all;
height: 60px;
padding: 10px;
}
tr:nth-child(even) {
background: #ccc
}
tr:nth-child(odd) {
background: #fff
}

Añadir una vista que no sea una tabla
Si prefieres no utilizar una vista de tabla HTML para mostrar tus entradas, también tenemos una solución alternativa para ti. En lugar de crear tu shortcode con el fragmento de código anterior, utiliza este fragmento de código.
/**
* Custom shortcode to display WPForms form entries in non-table view.
*
* 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 separated list of form field IDs.
* number Number of entries to show, defaults to 30.
*
* @link https://wpforms.com/developers/how-to-display-form-entries/
*
* Realtime counts could be delayed due to any caching setup on the site
*
* @param array $atts Shortcode attributes.
*
* @return string
*/
function wpf_entries_table( $atts ) {
// Pull ID shortcode attributes.
$atts = shortcode_atts(
[
'id' => '',
'user' => '',
'fields' => '',
'number' => '',
'type' => 'all', // all, unread, read, or starred.
'sort' => '',
'order' => 'asc',
],
$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 exist, 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 = isset( $atts[ 'fields' ] ) && $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' ] );
}
// Filter the type of entries: all, unread, read, or starred
if ( $atts[ 'type' ] === 'unread' ) {
$entries_args[ 'viewed' ] = '0';
} elseif( $atts[ 'type' ] === 'read' ) {
$entries_args[ 'viewed' ] = '1';
} elseif ( $atts[ 'type' ] === 'starred' ) {
$entries_args[ 'starred' ] = '1';
}
// 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 = json_decode(json_encode(wpforms()->entry->get_entries( $entries_args )), true);
if ( empty( $entries ) ) {
return '<p>No entries found.</p>';
}
foreach($entries as $key => $entry) {
$entries[$key][ 'fields' ] = json_decode($entry[ 'fields' ], true);
$entries[$key][ 'meta' ] = json_decode($entry[ 'meta' ], true);
}
if ( !empty($atts[ 'sort' ]) && isset($entries[0][ 'fields' ][$atts[ 'sort' ]] ) ) {
if ( strtolower($atts[ 'order' ]) == 'asc' ) {
usort($entries, function ($entry1, $entry2) use ($atts) {
return strcmp($entry1[ 'fields' ][$atts[ 'sort' ]][ 'value' ], $entry2[ 'fields' ][$atts[ 'sort' ]][ 'value' ]);
});
} elseif ( strtolower($atts[ 'order' ]) == 'desc' ) {
usort($entries, function ($entry1, $entry2) use ($atts) {
return strcmp($entry2[ 'fields' ][$atts[ 'sort' ]][ 'value' ], $entry1[ 'fields' ][$atts[ 'sort' ]]['value']);
});
}
}
ob_start();
echo '<div class="wrapper">';
echo '<div class="header-row">';
// 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 '<span class="column-label">';
echo esc_html( sanitize_text_field( $form_field[ 'label' ] ) );
echo '</span>';
}
echo '</div>';
echo '<div class="entries">';
// Now, loop through all the form entries.
foreach ( $entries as $entry ) {
echo '<div class="entry-details">';
$entry_fields = $entry[ 'fields' ];
foreach ( $form_fields as $form_field ) {
echo '<span class="details">';
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 '</span>';
}
echo '</div>';
}
echo '</div>';
echo '</div>';
$output = ob_get_clean();
return $output;
}
add_shortcode( 'wpforms_entries_table', 'wpf_entries_table' );
Sin embargo, es importante tener en cuenta que, dado que no estamos utilizando una tabla estándar, no se aplicará ningún estilo por defecto al utilizar esta opción, por lo que el CSS en el siguiente paso es vital, pero vamos a enumerar las clases CSS utilizadas para que pueda aplicar su propio estilo a esta opción.
Estilizar la no-mesa
A continuación se muestra una lista detallada de las clases CSS utilizadas y cuál puede ser su propósito (si es necesario).
- .wrapper - esta es una envoltura general alrededor de todo el bloque de entradas y se puede utilizar si desea reducir el ancho del bloque para que no se extienda al 100% de su página.
- .header-row - esta es otra envoltura general alrededor de las etiquetas de cada columna (sólo las etiquetas) si desea cambiar el color de fondo de la sección label.>
- .column-label - esta envoltura envolverá cada título de etiqueta individual. Por ejemplo, Nombre, Dirección de correo electrónico y Sugerencia/Comentario tienen cada uno una de estas envolturas que los rodean y podrían utilizarse para orientar el tamaño de este texto.
- .entries - esta es una envoltura general alrededor de las propias entradas si desea cambiar el color de fondo de esta sección para que aparezca de manera diferente a las etiquetas.
- .entry-details - se trata de una envoltura general alrededor de cada entrada individual y podría ser útil si desea proporcionar un fondo de color diferente para cada fila de entrada.
- .details - cada columna de información se envuelve en esta clase para que pueda añadir cualquier estilo adicional que desee, como tamaño de fuente, color, etc.
Puede utilizar el CSS siguiente para añadir algunos estilos predeterminados para su vista sin tabla.
Si necesita ayuda sobre cómo y dónde añadir CSS a su sitio, consulte este tutorial.
.wrapper {
width: 100%;
clear: both;
display: block;
}
.header-row {
float: left;
width: 100%;
margin-bottom: 20px;
border-top: 1px solid #eee;
padding: 10px 0;
border-bottom: 1px solid #eee;
}
span.details, span.column-label {
display: inline-block;
float: left;
width: 33%;
margin-right: 2px;
text-align: center;
margin: 5px 0;
}
.entries {
display: block;
clear: both;
width: 100%;
}
.header-row span.column-label {
text-transform: uppercase;
letter-spacing: 2px;
}
.entry-details {
border-bottom: 1px solid #ccc;
width: 100%;
display: block;
float: left;
margin: 20px 0;
padding-bottom: 20px;
}
Nota: El CSS proporcionado arriba se basa en mostrar sólo 3 campos de su entrada, el campo Nombre, Email y Comentarios. Si desea mostrar más campos, no olvide actualizar su CSS en consecuencia.

Y eso es todo, ahora ha creado un shortcode que se puede añadir en varios lugares en su sitio para que pueda mostrar sus entradas del formulario a los usuarios no administradores. ¿Te gustaría también mostrar cuántas entradas quedan en tu formulario cuando usas el complemento Form Locker? Pruebe nuestro fragmento de código Cómo mostrar el número de entradas restantes.
Filtro de referencia
PREGUNTAS FRECUENTES
Estas son las respuestas a algunas de las preguntas más frecuentes que recibimos sobre cómo mostrar entradas de formularios en una página o entrada de WordPress.
P: ¿Cómo puedo mostrar sólo un recuento de entradas no leídas?
R: Añada este fragmento a su sitio web.
<?php
/**
* Custom shortcode to display WPForms form entries count for a form.
*
* Realtime counts could be delayed due to any caching setup on the site
*
* @link https://wpforms.com/developers/how-to-display-form-entries/
*
*/
function wpf_dev_entries_count( $atts ) {
// Pull ID shortcode attributes.
$atts = shortcode_atts(
[
'id' => '',
'type' => 'all', // all, unread, read, or starred.
],
$atts
);
if ( empty( $atts['id'] ) ) {
return;
}
$args = [
'form_id' => absint( $atts['id'] ),
];
if ( $atts['type'] === 'unread' ) {
$args['viewed'] = '0';
} elseif( $atts['type'] === 'read' ) {
$args['viewed'] = '1';
} elseif ( $atts['type'] === 'starred' ) {
$args['starred'] = '1';
}
return wpforms()->entry->get_entries( $args, true );
}
add_shortcode( 'wpf_entries_count', 'wpf_dev_entries_count' );
A continuación, usted es libre de utilizar este código corto en cualquier lugar en su sitio de WordPress donde se aceptan códigos cortos.
[wpf_entries_count id="13" type="unread"]
Sólo tienes que cambiar el tipo para que sea no leído, leído o con estrellas.
P: ¿Por qué no aparecen mis entradas más recientes?
R: Es probable que se deba al almacenamiento en caché del servidor, del sitio o del navegador. Comprueba que la caché está completamente vacía.
P: ¿Tengo que tener columnas?
R: No, en absoluto. Puede mostrar sus entradas colocando la etiqueta delante del valor del campo y teniendo cada campo en una línea separada usando este fragmento y CSS.
/**
* Custom shortcode to display WPForms form entries in non-table view.
*
* 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 separated list of form field IDs.
* number Number of entries to show, defaults to 30.
*
* @link https://wpforms.com/developers/how-to-display-form-entries/
*
* Realtime counts could be delayed due to any caching setup on the site
*
* @param array $atts Shortcode attributes.
*
* @return string
*/
function wpf_entries_table( $atts ) {
// Pull ID shortcode attributes.
$atts = shortcode_atts(
[
'id' => '',
'user' => '',
'fields' => '',
'number' => '',
'type' => 'all', // all, unread, read, or starred.
'sort' => '',
'order' => 'asc',
],
$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 exist, 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 = isset( $atts['fields'] ) && $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'] );
}
// Filter the type of entries: all, unread, read, or starred
if ( $atts['type'] === 'unread' ) {
$entries_args['viewed'] = '0';
} elseif( $atts['type'] === 'read' ) {
$entries_args['viewed'] = '1';
} elseif ( $atts['type'] === 'starred' ) {
$entries_args['starred'] = '1';
}
// 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 = json_decode(json_encode(wpforms()->entry->get_entries( $entries_args )), true);
if ( empty( $entries ) ) {
return '<p>No entries found.</p>';
}
foreach($entries as $key => $entry) {
$entries[$key]['fields'] = json_decode($entry['fields'], true);
$entries[$key]['meta'] = json_decode($entry['meta'], true);
}
if ( !empty($atts['sort']) && isset($entries[0]['fields'][$atts['sort']] ) ) {
if ( strtolower($atts['order']) == 'asc' ) {
usort($entries, function ($entry1, $entry2) use ($atts) {
return strcmp($entry1['fields'][$atts['sort']]['value'], $entry2['fields'][$atts['sort']]['value']);
});
} elseif ( strtolower($atts['order']) == 'desc' ) {
usort($entries, function ($entry1, $entry2) use ($atts) {
return strcmp($entry2['fields'][$atts['sort']]['value'], $entry1['fields'][$atts['sort']]['value']);
});
}
}
ob_start();
echo '<div class="wrapper">';
echo '<div class="entries">';
// Now, loop through all the form entries.
foreach ( $entries as $entry ) {
echo '<div class="entry-details">';
$entry_fields = $entry['fields'];
foreach ( $form_fields as $form_field ) {
echo '<span class="details">';
echo '<span class="label">' . esc_html( sanitize_text_field( $form_field['label'] ) ) . ':</span>';
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 '</span>';
}
echo '</div>';
}
echo '</div>';
echo '</div>';
$output = ob_get_clean();
return $output;
}
add_shortcode( 'wpforms_entries_table', 'wpf_entries_table' );
Utilice este CSS para estilizar la vista sin tabla.
Si necesita ayuda sobre cómo y dónde añadir CSS a su sitio, consulte este tutorial.
.wrapper {
width: 100%;
clear: both;
display: block;
}
span.details {
display: block;
margin-right: 2px;
margin: 5px 0;
}
.entries {
display: block;
clear: both;
width: 100%;
}
.entry-details {
border-bottom: 1px solid #ccc;
width: 100%;
display: block;
margin: 20px 0;
padding-bottom: 20px;
}
span.label {
font-weight: bold;
margin-right: 5px;
}
