¿Tienes una tabla de base de datos que te gustaría mostrar en tu sitio WordPress?, en este artículo aprenderás como mostrar esos datos en una página de forma sencilla a través de código.
Resultado Final
Al final obtendremos algo similar a lo que se muestra en la siguiente imagen.

Generalidades
WordPress puede acceder a cualquier tabla de su base de datos de manera simple, incluso las que no forman parte del propio WordPress o plugins.
En este ejemplo asumimos que tenemos una tabla con el nombre data_fruit esta tabla contiene los siguientes campos: fruit_id, name, variety
Para mostrar los datos usaremos una página llamada Frutas y tiene el slug frutas
Código para mostrar datos de una tabla de la base de datos
El siguiente código muestra los datos de una tabla en una página de WordPress.
En el código anterior:
- Usamos el hook the_content que hace referencia a la función dcms_list_data
- Dentro de esta función hacemos una comprobación con la función is_page() ya que sólo nos interesa mostrar los datos en esa página
- Usamos la variable global $wpdb, a través de este objeto obtenemos métodos para recuperar los datos
- Formamos el resultado de los datos en la variable $result
- Construimos la tabla en la variable $template
- Al final reemplazamos la plantilla con los datos obtenidos y concatenamos con el resto del contenido
Conclusión
Tal como has visto, puedes obtener datos desde una tabla externa a WordPress y mostrarla como parte del contenido de una página de manera simple y sin usar plugins.
Hola buenas tardes,
Tienes alguno que haga lo que esta en el video,pero que a la vez permita hacer update al contenido.
Gracias,
Hola, la actualización de contenido es un poco más compleja, evaluaré hacer un artículo de esto, puedes igualmente usar algún plugin como: https://www.joomunited.com/wordpress-products/wp-table-manager
¿y el código en la página?
¿[dcms_list_data]?
¿Es correcto si añado un archivo nuevo en wp-content/plugins/functions.php? (empieza por )
Hola, el código no crea un shortcode, usa un Hook para colocar los datos al final del contenido de la página.
El archivo functions.php es un archivo de tu theme, no existe un archivo functions.php en esa localización que mencionas y así lo crees no tendrá efecto.
Fantástico, ya funciona. Enhora buena.
Ahora va algo más difícil:
httpClient permite ejecutar la consulta automáticamente desde fuera de la web.
Los header (textos de la barra superior) sirven de filtro (localhost/fruit/?ID=1). Solo mostraría una fila del informe.
En este caso entiendo que toda la linea tiene un valor. ¿Se pueden usar headers de alguna forma?
Sé que me estoy pasando contigo. Tu respuesta ha sido definitiva antes.
Hola, en el código se forma la cabecera o header de la tabla a través de la variable de $template, podrías modificar ese código de acuerdo a tus necesidades.
Súper.. Por favor necesito codigo de una lista desplegable de paises y que cuando seleccione el pais muestre cuatro imagenes cada una con su respectiva descripcion…Agradezco su ayuda
Hola, no me queda claro lo de mostrar cuatro imágenes, sin embargo la primera parte de tu consulta se refiere a filtros, evaluaré hacer un artículo de filtros próximamente. Saludos.
Hola, he visto tu video tutorial, y con ayuda de el, lo que intento es mostrar en una pagina, los pedidos de woocommerce…
Esta es mi consulta:
$items = $wpdb->get_results( “SELECT order_item_name, order_item_type, order_id FROM {$wpdb->prefix}woocommerce_order_items”, ARRAY_A );
Cuando hago var_dump me funciona pero cuando ocupo el foreach para recorrerlo y mostrarlo, no me muestra nada…
Nose si para mostrar datos de la base de tablas que no es personalizada tiene alguna otra forma…. pero no me funciona ;<
Hola
Estas recuperando la información como array asociativo, posiblemente estes tratando de recuperarlo como modelo de objeto. Prueba quitando ARRAY_A , o en su defecto usa la sintaxis de array para recuperar los datos.
Saludos.
Hola John,
Gracias por compartir tu conocimiento.
Copié tu código e hice los ajustes, pero solo veo los títulos de la tabla.
Mi sitio y base de datos están alojados en GoDaddy.
Debo hacer algo más para dirigir el query a la BD?
Hola, no, con el código debería ser suficiente, revisa si el nombre de la tabla de la BD es correcta y si tienes datos.
Hola, soy nuevo con WordPress y estoy haciendo un sitio donde en una de las secciones pretendo poner un formulario para recoger datos específicos sobre un tema particular y los guardo en la base de datos, el problema es mostrarlos cómo podría mostrar esos datos y que sólo aparezcan a la persona que los introdujo, es decir que respondan a un sistema de membresía?
Hola, en este caso tendrías que adicionar a los datos el ID del usuario que lo registró y de esa al consultar podrías agregar un filtro por ID de usuario.
Hola Jhon, pero como seria eso ? osea en la where de la query pongo el Label que filtra ???
Una consulta me sale perfecto el ejemplo. Quisiera agregar un filtro por algun campo en espefico? en la página que debo usar para que tome el filtro.
Hola, algo práctico que podrías evaluar es usar un filtro por jquery, ya que los datos estan cargados simplemente sería un filtro en base a esos datos mostrados, revisa: https://www.w3schools.com/jquery/jquery_filters.asp
Hola muy bueno tu video muchas gracias por compartir tu conocimiento y experiencia, no se si se puede con este ejemplo pero como le hago para que en lugar de que me aparezca la info de la base de datos en automatico como le hago para me aparezca, ya sea manzana, platano etc… realizando una busqueda o consuta …
Hola, evaluaré hacer un artículo para esto ya que implica código adicional. De manera general si quieres realizar la búsqueda en los registros ya cargados lo más práctico sería filtrarlos con javascript, si son muchos registros con paginación sería una nueva consulta a la BD.
Hola Jhon ¿llegaste hacer el artículo nuevo para consultar los datos desde un buscador? Con un buscador sería genial.
Hola, lo tengo pendiente, permanece atento que seguro pronto reviso eso. Saludos.
Hola, he realizado un artículo que agrega un buscador a la tabla personalizada. https://decodecms.com/busqueda-en-tabla-personalizada-en-wordpress/
Hola! muy bueno el video. Quería consultarte cómo tendría que hacer si quiero tomar información desde otra base de datos, es decir, que convivan la DB de wordpress y otra de donde levantar una lista de productos.
Muchas gracias de antemano!
Hola, si tienes acceso a la BD tienes que realizar una conexión a la BD que te interesa por PHP directamente desde WordPress, sin embargo lo usual es que te conectes por una API, esto te facilitaría las cosas y tendrías una mejor administración.
hola,como obtengo le valor del campo de busqueda en mi plantilla y la envio a la consulta mysql gracias
Hola, supongo que te refieres a la búsqueda de WordPress, verás que se crea un parámetro como parte de la url con la variable “s” cada vez que realizas una búsqueda.
Hola, muy bueno todo. una pregunta… en la variable Template esta recogido q coga el tema actual, o el css para la tabla. pero he tratado de cambiar el tamaño de la tabla pero no me deja, o sea no se efectua. Me puedes decir como cambiar el tamaño ? a la hora de mostrar a tabla. gracias
Hola, lo que comentas sería por CSS, es posible que tu theme este aplicando estilos por defecto, podrías inspeccionar los estilos con el inspector de código, revisa: https://decodecms.com/usar-el-inspector-de-codigo-para-modificar-un-theme-wordpress/
hola, como puedo crear un buscador por palabras o colocar filtro a esa tabla? gracias
Hola, podrías hacerlo por javascript si es que cargas todos los datos y no son muchos, de otra forma sería hacer paginación y hacer búsquedas con consultas SQL, espero hacer algo similar pronto en otro artículo.
Hola, recientemente he realizado un buscador para la tabla personalizada, se puede ver en: https://decodecms.com/busqueda-en-tabla-personalizada-en-wordpress/
Hola Jhon, nuevamente agradeciendo todo lo que nos compartes. Quisiera hacerte una consulta.
Estoy recibiendo datos de una encuesta realizada con Ninja Forms y requiero utilizar ciertos datos para crear un tipo expediente médico que se muestre en una de las páginas de WP.
Afortunadamente Ninja Forms almacena directamente las respuestas en la base de datos de WP pero las he encontrado en nf_sub que es un post_type. Entonces no sé si se pudiera aplicar esto de la tabla para elegir esos datos.
También es necesario que los datos mostrados en la tabla o expediente médico vayan acorde al usuario loggeado. ¿Me podrías guiar un poco sobre cómo lograr algo así?
Muchísimas gracias.
Hola, podrías consultar a la tabla wp_post y filtrar por el campo post_type, la otra opción es usar las funciones de WordPress que te filtran por post type, revisa la clase WP Query. Sin embargo si tienes un dato de usuario como parte de los datos que te guarda el formulario mejor hacer la consulta directamente con SQL
Gracias Jhon, lo pongo a prueba.
Muy buen video, bien explicado. Una consulta como puedo hacer si quiero mostrar el listado de una tabla que pertenece a otra base de datos en el mismo hosting?
Hola, tendrías que hacer otra conexión de BD, espero hacer un video pronto sobre esto.
Hola! no se si podrías ayudarme con lo siguiente:
Tengo una tabla dinámica en WordPress, donde por medio de un formulario en donde mis usuarios ingresan sus datos se va llenando. Ya logre mostrarla en una pagina pero lo que necesito ahora es agregar un motor de búsqueda donde me arroje la información de la tabla, ya he instalado plugins y no funcionan.
Inclusive ya tengo una consulta de la BD en donde esta la tabla y se actualiza pero no se en que parte del archivo funciones.php podría agregarla
Alguna opción o sugerencia
Hola, en este caso tendrías que hacer algo similar a este código: https://decodecms.com/formulario-de-contacto-sin-plugins-en-wordpress/ , pero con la funcionalidad de búsqueda.
Evaluaré hacer pronto un artículo complementado la consulta de listado de datos, permanece atenta.
Hola Ana, recientemente publiqué un artículo que agrega la búsqueda para una tabla personalizada, revisa: https://decodecms.com/busqueda-en-tabla-personalizada-en-wordpress/
Hola Jhon, tengo un csv con campos numéricos, cada campo corresponde a un día del año, necesito mostrar en mi pagina solo el campo correspondiente al día actual. Podrías ayudarme??
Si tienes un CSV el proceso entonces es diferente, ya que en este artículo estoy leyendo directamente desde una tabla de la BD, salvo pases primero tu CSV a una tabla, de ser así tendrías más flexibilidad para programarlo.
Jhon, muchas gracias por tu tiempo y dedicación. Tienes algun post para crear tablas desde un access?
Hola, no, no tengo esto, lo ideal sería que lo exportes a SQL y luego lo importes en la BD de WordPress.
Hola Jhon, ante todo gracias por tus aportaciones.
En caso de que la tabla sea muy extensa ¿Cómo se haría para paginar los resultados y elegir el número de registros por página?
Gracias
Hola, el código debería seguir la misma lógica que una paginación en PHP: https://code.tutsplus.com/es/tutorials/how-to-paginate-data-with-php–net-2928 , espero adaptarlo en un futuro artículo.
Hola he realizado recientemente un artículo con esta funcionalidad: https://decodecms.com/mostrar-tabla-personalizada-con-busqueda-y-paginacion-en-wordpress/
Muchas gracias
Hola Jhon, gracias por este excelente post, una consulta el codigo que tu compartes aqui, si lo quisiera hacer con un plugin de Snippets, el codigo seria el mismo o tendria que hacer alguna modificacion, te lo comento porque cuando este codigo lo pruebo en functions.php de mi tema hijo trabaja bien pero cuando lo quiero aplicar con el plugin no me devuelve nada. Gracias por tu respuesta.
Hola, si que debería funcionar ya que son sólo uso de Hooks. Igual si es mucho código te recomiendo mejor tenerlo en el functions.php de un tema hijo.
Buenas Jhon,
Muy interesante tu artículo. ¿Cómo podríamos paginar los datos de la tabla?
Hola, evaluaré hacer un artículo sobre esto ya que hay que agregar código adicional.
como puedo hacer eso con wpd0_usermeta extraer los datos mostrarlos
Columna Tipo Comentario
umeta_id bigint(20) unsigned Incremento automático
user_id bigint(20) unsigned [0]
meta_key varchar(255) NULL
meta_value longtext NULL
Índices
PRIMARY umeta_id
INDEX user_id
INDEX meta_key(191)
Hola, con una consulta SQL. Saludos.
Hola Jhon:
Te agradezco inmensamente por este artículo que vale millones para quienes debemos meterle código a WordPress para llevarlo más allá de lo que haga cualquier plugin prediseñado.
En mi caso, te quería mencionar que este código lo he aplicado a un proceso de importación de productos en el marco de una migración de plataforma, con el plugin WP All Import. En esta importación, donde debo cargar los productos, la misma tabla de productos trae los códigos que hacen relación a unos post-types creados anteriormente, y funciona fantástico.
Muchas gracias por tu buena onda, ya que he visto como respondes a cada consulta, siendo realmente merito de destacar.
Un abrazo
Hola Jorge. Que bueno que te sirvió. Saludos 🙂
COMO PUEDO HACER QUE SOLO MUESTRE EL BUSCADOR Y NO TODA LA TABLA?
Hola, puedes revisar el siguiente artículo que tiene buscador y más flexibilidad para mostrar datos, evidentemente tendrás que hacer una modificación para que no recupere datos al inicio: https://decodecms.com/mostrar-tabla-personalizada-con-busqueda-y-paginacion-en-wordpress/
Hola Jhon, saludos…
Tu ejemplo funciona perfecto… Me pregunta es, como estoy usando elementor, uso márgenes de elementor y sus funciones de maquetación, al usar tu tutorial la tabla de la base de datos esta fuera de las reglas de elementor, mi pregunta es, tendría que transformalos en un shortcode y colocaarle las clases de elementor para que se me adapte a mi pantalla y a la forma de maquetación que usa elementor para mostrar esa tabla?
Hola, si, efectivamente, podrías crear un shortcode tomando como base el código de este artículo. Revisa: https://decodecms.com/que-son-los-shortcodes-en-wordpress-y-como-usarlos/
Hola Jhon ¿Como estas?
El código del tutorial funciona perfectamente; sin embargo, al implementarlo para otra pagina con una tabla de datos de usuarios, la pagina de frutas y la de usuarios presentan conflicto. Estoy utilizando el archivo functions.php del tema y allí pongo un hook con una función para cada pagina algo así:
Sabes como implementarlo para dos paginas diferentes?
Hola, tal como lo tienes debería funcionarte, qué error exacto te aparece, igual es un error de sintaxis. Saludos.
Hola Jhon, muchas gracias por el excelente tutorial.
Quisiera poder mostrar la tabla resultante en una página que he creado en el ambiente de Administración (he agregado una opción al menú y su página implementado como plugin). El problema es que no sé cuál sería el “slug” de esta página para poder identificarla, al seleccionarla su URL se ve así:
…….wp-admin/admin.php?page=adv-datos
Probé con adv-datos pero entiendo ese es el ID y no encuentro como saber el slug de esta página o cómo referenciarla para que se muestre en ella la tabla.
Desde ya muchas gracias!
Hola, si estas trabajando en el backend tienes que tener un archivo de “vista”, por ejemplo puedes crear una carpeta views y allí poner el archivo llamado por ejemplo main-screen.php, luego puedes llamarlo al mostrar el submenú (dentro de la función callback) con:
Ya no necesitas el hook “the_content” de este artículo, puedes imprimir directamente código PHP con HTML en este archivo main-screen.php.
Hola Jhon,
Toda la razón, hice lo indicado y me ha funcionado correctamente!
Me confundí al pensar que tenía que utilizar el hook “the_content”, y no escribir el código en el archivo asociado a mi página.
Muchísimas gracias por tus conocimientos y ayuda!!
Saludos.
John, que tal saludos,
Excelente, contenido.
tengo esta duda como hacer para pasar el valor de un campo de la base de datos a la url, por ejemplo el id de usuario y validarlo que sea el que inicio sesion usando wordpress y que se acceda una vez validado.
ejemplo
https://tusitio.com/?ref_id=1
o si tienes un post donde leerlo.
saludos
Hola, si quieres validar que en la url viene un ID de usuario válido tienes que comprobarlo a través de código, puedes revisar: https://wordpress.stackexchange.com/questions/165691/how-to-check-if-a-user-exists-by-a-given-id , recuerda que para obtener el ID de la url puedes usar $_GET
Excelente tutorial ! Genio Total ! Como puedo implementar un checkbox en una columna de una tabla, para selecionar los datos a mostrar de la tabla? en vez del placeholder poner un checkbox?
Hola, si sólo quieres mostrar algunos datos de la tabla tienes que filtrarlos por alguna columna, tienes ya que tener definido en los datos qué elementos mostrar y luego tendrías que agregar un “where” a la consulta SQL. Revisa este artículo de referencia en donde se usa una consulta SQL con condiciones: https://decodecms.com/mostrar-tabla-personalizada-con-busqueda-y-paginacion-en-wordpress/
Hola muchas gracias por el aporte.
¿Tendras algun ejemplo para incluir, elminar, actualizar registros ?
Hola Orlando, tengo pendiente realizar esa funcionalidad, espero tenerla en futuros artículos.
Hola Excelente tu aporte, dios te bendiga!
Tengo una tabla que la lleno fuera de wordpress, contiene una imagen, y una descripcion, eso es lo que quiero mostrar, en una pagina de WP.
Mi pregunta es como hago para la mostrar la informacion que salga bien presentable, la imagen y la descripcion, como una lista de productos.
Estoy trabajando con elementor, que deberia hacer.
Agradezco tu respuesta!
Saludos
Hola, si ya tienes mostrándose la información sólo sería darle estilos CSS para que se vea bien, Elementor es un constructor, no tiene que ver con mostrar la información de una tabla personalizada, salvo tenga algún bloque para eso. Saludos.
hola, como hago para que no salga en la parte final de la pagina?
Hola si quieres que salga al inicio cambia el orden del concatenado en el return
La otra opción es hacer un shortcode.