Tutoriales de WordPress de Confianza, cuando más los necesitas.
Guía para Principiantes de WordPress
Copa WPB
25 Millones+
Sitios web que usan nuestros plugins
16+
Años de experiencia en WordPress
3000+
Tutoriales de WordPress de expertos

Cómo mostrar una publicación de WordPress solo si tiene un campo personalizado específico

¿Sabes cuándo necesitas mostrar una publicación de WordPress solo si tiene un campo personalizado específico? Nos ha pasado.

Cuando empezamos con WordPress, ver cualquier fragmento de código nos intimidaba, especialmente cuando lo único que queríamos era mostrar publicaciones con información específica.

Pero aquí están las buenas noticias: después de ayudar a miles de principiantes de WordPress, hemos descubierto que incluso algo que suena técnico, como el filtrado por campos personalizados, no tiene por qué dar miedo.

De hecho, te guiaremos a través de un método de código sencillo para hacerlo.

Esta solución funciona perfectamente tanto si publicas entradas de blog regulares como tipos de publicaciones personalizadas basadas en criterios específicos.

Cómo mostrar una publicación de WordPress solo si tiene un campo personalizado específico

💡 Resumen: Puedes mostrar solo las publicaciones de WordPress que tienen un campo personalizado específico utilizando una WP_Query personalizada en los archivos de tu tema (como index.php) para filtrar esas publicaciones.

📌 Nota rápida: Este tutorial es para mostrar publicaciones de WordPress si tienen un valor introducido en un campo personalizado específico. Si deseas mostrar campos personalizados en el frontend de una publicación de WordPress, puedes leer nuestra guía sobre cómo mostrar campos personalizados en temas de WordPress.

¿Por qué mostrar publicaciones de WordPress con un campo personalizado específico?

Cuando creas una entrada en tu sitio web de WordPress, puedes usar campos personalizados para agregar metadatos adicionales a la entrada.

Los metadatos son información adicional que puedes agregar a una entrada. Por ejemplo, si estuvieras escribiendo una reseña de un libro, podrías agregar campos personalizados para 'Nombre del autor' o 'Calificación con estrellas'.

Los campos personalizados son un concepto avanzado de WordPress, y hay muchas maneras de agregarlos en WordPress. Encontrarás muchos consejos útiles sobre cómo usar y mostrar campos personalizados en nuestra entrada, Campos personalizados de WordPress 101: Consejos, trucos y hacks.

Puedes agregar metadatos a una publicación usando campos personalizados

Uno de nuestros usuarios nos preguntó cómo mostrar entradas de WordPress solo si estaba presente un campo personalizado específico. Esto puede ser útil si buscas crear una página personalizada que liste todas las entradas que contienen un campo y/o valor personalizado específico.

Después de responder con la solución, pensamos que sería mejor compartirla con todos para que la comunidad más grande de WordPress.org también se beneficie de ella.

Edición de los archivos de tu tema de WordPress: Qué tener en cuenta

Antes de comenzar, hay algunas cosas importantes que debes tener en cuenta al trabajar con archivos de temas.

Si agregas código directamente a los archivos de tu tema, tus cambios se perderán la próxima vez que actualices tu tema.

Es por eso que recomendamos usar un plugin como WPCode para agregar código PHP personalizado de forma segura sin editar tu tema. Si prefieres editar los archivos del tema, asegúrate de estar usando un tema hijo para que tus cambios se conserven.

Para poder seguir este tutorial correctamente, aquí hay algunas cosas que debes tener en cuenta:

  1. Este tutorial implica agregar código a tu sitio de WordPress, por lo que no es el más adecuado para principiantes. Si eres nuevo en esto, necesitarás leer nuestra guía sobre cómo copiar y pegar código en WordPress.
  2. Recomendamos hacer una copia de seguridad de tu sitio web y/o usar un entorno de staging para que tu sitio en vivo no se vea afectado cuando ocurra un error. Esto se debe a que agregarás código a los archivos de tu tema, lo cual puede ser arriesgado.
  3. Recomendamos entender cómo funciona la jerarquía de plantillas de WordPress para que sepas dónde agregar el código más tarde.
  4. También necesitarás familiarizarte con el funcionamiento de los bucles de WordPress porque llamaremos a estos parámetros en una consulta de WordPress.

📍Nota importante: Este tutorial solo funciona con temas de WordPress clásicos. Los temas de bloque utilizan el Editor de Sitio y un enfoque diferente para mostrar contenido, por lo que este método de edición de archivos de plantilla no se aplicará.

Dicho esto, veamos cómo mostrar una publicación de WordPress solo si tiene un campo personalizado específico.

Paso 1: Instalar un plugin de fragmentos de código

Algunos tutoriales te dirán que abras el archivo index.php de tu tema y reescribas completamente el bucle de WordPress usando algo llamado WP_Query. No recomendamos hacer esto.

Modificar los archivos de plantilla principales puede romper el diseño de tu sitio, causar consultas de base de datos duplicadas que ralentizan tu sitio y romper por completo tu paginación (los botones "Página siguiente").

En cambio, la forma más segura y eficiente de hacerlo es usando el hook de acción pre_get_posts. Esto le dice a WordPress que filtre las publicaciones *antes* de que cargue el archivo de plantilla de la página.

Para agregar este código personalizado, recomendamos usar un plugin como WPCode. Te permite agregar código PHP de forma segura sin tocar directamente los archivos de tu tema, lo que significa que tu sitio no se romperá si cometes un error y tus cambios no se perderán cuando tu tema se actualice.

Paso 2: Agregar el código de consulta personalizado

Una vez que hayas instalado y activado WPCode, navega a Fragmentos de código » Agregar fragmento en tu panel de WordPress y selecciona 'Agregar tu código personalizado (Nuevo fragmento)'.

Añadir fragmento personalizado en WPCode

Asegúrate de que el "Tipo de código" esté configurado como Fragmento de PHP.

Luego, pega el siguiente código:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field' );

function wpb_filter_posts_by_custom_field( $query ) {

    // Only modify the main query on the front-end homepage
    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        // Tell WordPress to only get posts with the custom field key 'color'
        $query->set( 'meta_key', 'color' );

    }
}

Primero, el código verifica que solo esté alterando la consulta principal en el front-end de tu sitio web (específicamente la página de inicio del blog), dejando tu panel de administración de WordPress completamente intacto.

Luego, usa $query->set para indicarle a WordPress que solo recupere las publicaciones que tienen el campo personalizado 'color' adjunto.

Debido a que este código modifica la consulta antes de que se cargue la página, la paginación predeterminada de tu tema funcionará perfectamente sin código adicional. Simplemente activa el interruptor de WPCode a 'Activo' y haz clic en el botón 'Guardar fragmento' para publicarlo.

Paso 3: Filtrar por valor meta específico (Opcional)

¿Qué pasa si quieres encontrar publicaciones donde el campo personalizado 'color' tenga un valor específico, como 'blue'? Para hacer eso, solo necesitas agregar una regla meta_value a tu código.

Tu fragmento actualizado se verá así:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field_value' );

function wpb_filter_posts_by_custom_field_value( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );

    }
}

Paso 4: Filtrar por comparación meta (Opcional)

Puedes llevar tu filtrado aún más lejos con el parámetro meta_compare. Esto te permite encontrar publicaciones que no coinciden con un valor.

Por ejemplo, para mostrar todas las publicaciones donde el color no es 'blue', tu consulta se vería así:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_meta_compare' );

function wpb_filter_posts_by_meta_compare( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );
        $query->set( 'meta_compare', '!=' );

    }
}

El != le dice a WordPress que encuentre todas las publicaciones donde el campo 'color' existe pero no es igual a 'blue'.

Hay muchos otros operadores de comparación que puedes usar, los cuales puedes encontrar en la documentación oficial para desarrolladores de WordPress.

Paso 5: Filtrar publicaciones por campos personalizados múltiples (meta_query)

Para escenarios más complejos donde necesites filtrar publicaciones basándote en múltiples campos personalizados o combinar condiciones (como Y/O), usarás el array meta_query.

Esto te permite definir un array de condiciones, cada una apuntando a un campo o valor personalizado diferente.

Por ejemplo, para mostrar publicaciones con el color 'blue' y el tamaño 'large', tu código se vería así:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_multiple_fields' );

function wpb_filter_posts_by_multiple_fields( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $meta_query = array(
            'relation' => 'AND', // or 'OR'
            array(
                'key'     => 'color',
                'value'   => 'blue',
                'compare' => '=',
            ),
            array(
                'key'     => 'size',
                'value'   => 'large',
                'compare' => '=',
            ),
        );

        $query->set( 'meta_query', $meta_query );

    }
}

Esta consulta recuperará las publicaciones que tengan tanto el campo personalizado 'color' establecido en 'blue' COMO el campo personalizado 'size' establecido en 'large'.

Puedes ajustar el parámetro 'relation' a 'OR' para encontrar publicaciones que coincidan con al menos una de las condiciones.

Ejemplo del mundo real: Mostrar solo reseñas de 5 estrellas

Digamos que tienes un sitio de reseñas de libros de WordPress y usas un campo personalizado llamado star_rating para almacenar las puntuaciones de las reseñas.

Puedes mostrar fácilmente solo las publicaciones que tengan una calificación de 5 estrellas en la página de inicio de tu blog usando esta consulta:

<?php
add_action( 'pre_get_posts', 'wpb_show_only_five_star_reviews' );

function wpb_show_only_five_star_reviews( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'star_rating' );
        $query->set( 'meta_value', '5' );

    }
}

Esto es extremadamente útil si quieres asegurarte de que tu feed principal solo muestre tu contenido mejor calificado.

Preguntas Frecuentes Sobre Mostrar una Publicación Si Tiene un Campo Personalizado Específico

Aquí hay algunas preguntas que nuestros lectores hacen frecuentemente sobre cómo mostrar una publicación si solo tiene un campo personalizado específico:

Preguntas Frecuentes Sobre Mostrar una Publicación Si Tiene un Campo Personalizado Específico

Aquí hay algunas preguntas que nuestros lectores hacen frecuentemente sobre cómo mostrar una publicación si solo tiene un campo personalizado específico:

¿Hay alguna forma de hacer esto sin editar los archivos del tema?

¡Sí! De hecho, el método pre_get_posts que describimos en este tutorial está diseñado específicamente para que no tengas que editar los archivos de tu tema. Al usar un plugin de fragmentos como WPCode, puedes aplicar este filtro de forma segura a tu sitio sin tocar una sola línea del código principal de tu tema.

¿Puedo filtrar publicaciones por múltiples campos personalizados?

Puedes hacerlo. El hook pre_get_posts acepta argumentos complejos. Usarías un array 'meta_query', que te permite construir una lista de condiciones para que coincidan múltiples campos personalizados a la vez.

¿Este método funciona con temas de bloques?

Si bien el hook pre_get_posts puede interactuar técnicamente con temas de bloques, el bloque Query Loop nativo de WordPress no tiene una interfaz incorporada para filtrar campos personalizados de fábrica. Si estás utilizando un tema de bloques de Edición Completa del Sitio, el enfoque más fácil es usar un plugin que agregue filtrado de campos personalizados al bloque Query Loop, en lugar de escribir PHP personalizado.

¿Cuál es la diferencia entre 'meta_key' y 'meta_value'?

Piensa en 'meta_key' como el nombre de la etiqueta, como 'Color' o 'Estado'. El 'meta_value' son los datos reales ingresados en ese campo, como 'Azul' o 'Publicado'.

Usar la clave encuentra cualquier publicación con ese campo personalizado adjunto, mientras que usar el valor lo filtra para encontrar solo publicaciones con esa información específica.

Aprende más formas de personalizar tu sitio de WordPress

Aquí hay más formas en que puedes personalizar tus páginas de WordPress:

Esperamos que este tutorial te haya ayudado a aprender cómo mostrar una entrada de WordPress solo si tiene un campo personalizado específico. También puedes consultar nuestra guía completa sobre cómo editar un sitio web de WordPress y nuestras selecciones expertas de los mejores plugins de Figma para WordPress.

Si te gustó este artículo, suscríbete a nuestro Canal de YouTube para ver tutoriales en video de WordPress. También puedes encontrarnos en Twitter y Facebook.

Divulgación: Nuestro contenido es compatible con el lector. Esto significa que si haces clic en algunos de nuestros enlaces, podemos ganar una comisión. Consulta cómo se financia WPBeginner, por qué es importante y cómo puedes apoyarnos. Aquí está nuestro proceso editorial.

El Kit de herramientas definitivo para WordPress

Obtén acceso GRATUITO a nuestro kit de herramientas: ¡una colección de productos y recursos relacionados con WordPress que todo profesional debería tener!

Interacciones del lector

11 ComentariosDeja una respuesta

  1. Tengo una pregunta, señor, si quiero mostrar una sola publicación y campos personalizados, ¿qué debo hacer?.
    No quiero mostrar la publicación con campos personalizados específicos. Quiero mostrar todos los campos personalizados de la publicación.

  2. Hola, gracias por el útil tutorial. Tengo una pregunta, en un sitio web de WordPress establecí un valor meta llamado "meta_country" y luego establecí cada publicación con el país del artículo, como "us", "uk", "fr"... Ahora estoy intentando agregar en algún lugar de la página principal del blog un enlace que muestre una lista de todas las publicaciones con un país específico y una etiqueta específica. Por ejemplo, todas las publicaciones de "UK" etiquetadas como "APPLE".
    No entiendo cómo hacer eso, ¿alguien podría ayudarme?

  3. No pude generar ningún resultado a menos que incluyera el parámetro “post_type” en la consulta.

    es decir, $the_query = new WP_Query(‘post_type=page&meta_key=color’);

Deja una respuesta

Gracias por elegir dejar un comentario. Ten en cuenta que todos los comentarios se moderan de acuerdo con nuestra política de comentarios, y tu dirección de correo electrónico NO se publicará. Por favor, NO uses palabras clave en el campo del nombre. Tengamos una conversación personal y significativa.