Cómo usar «conditional tags» en WordPress

Publicada en WordPress.

Mira nuestro vídeo

Existe una versión mejor de tu web

Comparte este artículo

Una de las cosas que más me gustan de WordPress es que incluye un montón de funciones que simplifican muchísimo el trabajo de un desarrollador. Por ejemplo, estoy pensando en funciones con nombres tan claros y explicativos como esc_attr para escapar un texto que tiene que aparecer dentro de un atributo en una etiqueta HTML o esc_html para escapar texto en una web. O funciones para sanear los datos que recibimos del usuario como sanitize_text_field, sanitize_textarea_field o sanitize_email. Son cosas tan básicas que uno se sorprende cuando tiene que desarrollar algo fuera de WordPress y descubre que ¡no están disponibles porque son específicas de esta plataforma!

La colección de funciones que tenemos a nuestra disposición cuando desarrollamos sobre este CMS es increíblemente grande. Y cuan más familiarizados estemos con ellas, más fácil es escribir código de calidad.

Hoy me gustaría hablaros de las conditional tags en WordPress: qué son, cómo usarlas, qué trampas encierran y por qué son tan útiles. Si eres un desarrollador de plugins o temas y aún no las conoces, no te pierdas esta fantástica introducción.

Qué son las conditional tags en WordPress

Las conditional tags son funciones definidas en WordPress cuyo resultado es un booleano (es decir, o bien true o bien false). Se trata de funciones que podemos usar tanto en nuestros plugins como en nuestro tema y que nos ayudan a tomar decisiones condicionales. Esto es, nos permiten decidir si hacemos o no una cierta cosa en función de si el resultado de la invocación es cierto o falso.

La gran ventaja de las conditional tags es que, en general, sus nombres son auto explicativos (en inglés, claro) y nos permiten entender rápidamente qué condición es la que están evaluando. Por ejemplo, si en tu plugin usas la conditional tag is_sticky, está claro que devolverá true si, cuando estamos dentro del loop de WordPress, la entrada del loop está «marcada como fija» (lo que en inglés se llama «sticky»).

Es muy importante tener en cuenta que las conditional tags únicamente están disponibles una vez que WordPress ha determinado cuál es el contenido que nos ha pedido el visitante. Si intentamos usarlas antes, su resultado será siempre false. En otras palabras, debemos esperar a que WordPress haya realizado la acción posts_selection.

Las conditional tags más habituales

La mayoría de conditional tags en WordPress empiezan por is_, ya que la respuesta a una pregunta del tipo «¿es …?» es «sí» o «no». Pero, por desgracia, no siempre se sigue este criterio (como veremos a continuación).

Existen muchísimas conditional tags dentro de WordPress con las que te irás familiarizando según las vayas necesitando, pero las más habituales que idealmente deberías conocer ya son las siguientes:

  • is_single. Indica si el contenido de la página actual es una única entrada o una instancia de algún tipo de contenido personalizado (como, por ejemplo, puede ser un «producto» dentro de WooCommerce).
  • is_page. Indica si estamos visualizando una página.
  • is_attachment. Indica si estamos visualizando un adjunto; esto es, un elemento que hayamos subido a la biblioteca de medios, como puede ser una imagen o un vídeo.
  • is_singular. Comprueba si el contenido actual es un adjunto, una página o cualquier otro tipo de contenido. Es una función equivalente a comprobar si alguna de las tres anteriores devuelve true.
  • comments_open. Devuelve cierto si el contenido actual admite comentarios. Este tenemos un primer ejemplo donde echamos de menos el patrón is_ (o are_ si es en plural, ¿no?)
  • is_category. Devuelve cierto si estamos viendo las entradas que hay dentro de una cierta categoría.
  • in_category. Devuelve cierto si la entrada actual está dentro de la categoría que hemos especificado. Otro ejemplo donde cambia un poco el patrón de la función, aunque sigue siendo bastante auto explicativo.
  • is_tag. Devuelve cierto si estamos viendo las entradas etiquetadas con una etiqueta concreta.
  • has_tag. Devuelve cierto si la entrada actual está etiquetada con la etiqueta especificada.
  • is_main_query. Devuelve cierto si estamos dentro del loop principal de WordPress.

¿Sabías que hay conditional tags que quieren engañarte?

Hay algunos casos en los que las conditional tags tienen nombres que pueden llevarnos a confusión ya que lo que parece que evalúan y lo que realmente evalúan son cosas diferentes:

  • is_admin. Aunque parezca que esté evaluando si el usuario actual es administrador, en realidad esta conditional tag comprueba si estamos en el front-end de la web o en el escritorio de WordPress. Una forma de recordarlo es que un usuario administrador no tiene por qué llamarse «admin»…
  • is_home. Lo más lógico es pensar que comprueba si estamos en la página principal de nuestra web, ¿no? Por ejemplo, https://neliosoftware.com. Pues no. Si tenemos en cuenta que WordPress nació como plataforma de blogs, esta conditional tag comprueba si estás en la página de «blog» de tu web. Así, si tienes la configuración por defecto de WordPress, is_home realmente sí coincide con https://tuweb.com. Pero si pusiste una página cualquiera como página principal en tu web y tienes el blog en https://tuweb.com/blog, entonces is_home es cierto cuando estás en https://tuweb.com/blog.
  • is_front_page. Esta es la conditional tag que precisamente te indica cuándo estás en la home de tu web, independientemente de que esta sea una página estática o el blog. Curioso, ¿verdad?
  • is_dynamic_sidebar. Comprueba si hay disponibles áreas en las que poner widgets y, de haberlas, si como mínimo una de ellas tiene algún widget. Si no hay o están todas vacías, devuelve false.

Parametrizando las conditional tags

Aunque la mayoría de conditional tags son funciones que pueden llamarse sin parámetros, muchas de ellas admiten parámetros que nos permiten restringir la condición que el elemento actual debe cumplir, y además de una forma bastante lógica.

Según la función concreta que estemos usando, podemos comprobar que el elemento actual tenga un cierto ID, un cierto slug, un cierto tipo de contenido o incluso un cierto título. Por ejemplo:

  • is_singular( 'product' ) comprueba que el elemento actual sea una instancia del tipo de contenido product.
  • is_page( 'Contacta con nosotros' ) comprueba que la página actual tenga por título el texto «Contacta con nosotros». De hecho, esta función permite pasar un número (y entonces comprueba que el ID de la página sea el ID especificado) o una cadena de texto (y entonces comprueba que ese texto sea su título o su slug). Nada mal, ¿eh? De hecho, ¡incluso acepta una lista de opciones como parámetro!
  • is_single( [ 5, 10, 11 ] ) comprueba que el elemento actual tenga el ID 5, 10 u 11. Parecido al is_page anterior, pero comprobando tipos de contenido diferentes a página (tal y como hemos visto antes).

Cómo usar las conditional tags a tu favor

Llegados a este punto, quizás te estés preguntado que cuál es la utilidad de conocer estas funciones y cuándo o para qué deberías usarlas. Y me parece una duda lícita, así que veamos un par de ejemplos donde son especialmente útiles.

Personalizando las plantillas

Allá donde las conditional tags son obviamente útiles es en la creación de temas. Si quieres que el tema muestre una información u otra según el tipo de contenido que se está visualizando en un momento dado (y esto es algo que querremos hacer a menudo), las conditional tags son tus aliadas:

<?php
// ...
if ( ! is_page() ) {
  echo '<span class="whatever">';
  echo $something_relevant;
  echo '</span>';
}
// ...

Esto te permite usar la misma plantilla para diferentes tipos de contenido y personalizarla a cada uno de ellos con las conditional tags. Fácil, sencillo y para todos los públicos.

Criterios para encolar estilos y scripts

Otro uso quizás no tan obvio pero muy interesante lo encontramos en el contexto de los desarrolladores de plugins, y es que las conditional tags nos permiten ser más selectivos a la hora de cargar condicionalmente partes de nuestro plugin según el contenido solicitado.

Por ejemplo, imagina que estamos desarrollando un plugin que añade algún tipo de funcionalidad a las entradas de nuestro blog. Supón que esta funcionalidad requiere que encolemos un script y una hoja de estilos en el front-end del tema. Para encolar scripts y estilos en WordPress tenemos un filtro llamado wp_enqueue_scripts, que podemos usar tal que así:

function nelio_plugin_fancy_feature() {
  wp_enqueue_script( 
    'nelio_plugin_feat', 
    nelio_plugin()->url . '/assets/dist/feat.js'
  );
  wp_enqueue_style( 
    'nelio_plugin_feat', 
    nelio_plugin()->url . '/assets/dist/feat.css'
  );
}
add_action( 'wp_enqueue_scripts', 'nelio_plugin_fancy_feature' );

El problema con el código anterior es que estamos encolando los dos ficheros en absolutamente todas las páginas de nuestra web, cuando hemos dicho que únicamente nos interesa hacerlo para las entradas de nuestro blog. Pues bien, una pequeña optimización en nuestro código consiste en añadir dicha restricción al encolado:

function nelio_plugin_fancy_feature() {
  if ( ! is_single( 'post' ) ) {
    return;
  }

  wp_enqueue_script( 
    'nelio_plugin_feat', 
    nelio_plugin()->url . '/assets/dist/feat.js'
  );
  wp_enqueue_style( 
    'nelio_plugin_feat', 
    nelio_plugin()->url . '/assets/dist/feat.css'
  );
}
add_action( 'wp_enqueue_scripts', 'nelio_plugin_fancy_feature' );

En resumen

Las conditional tags de WordPress nos permiten añadir funcionalidades a nuestra web que estén condicionadas al tipo de contenido que se está visualizando en un momento concreto. A pesar de su extremada sencillez, son funciones muy útiles que hacen que nuestro código sea más inteligible y eficiente.

Espero que hayas aprendido algo hoy y, ya sabes, si tienes cualquier duda o comentario, háznoslo saber con el formulario que tienes a continuación 😉

Imagen destacada de Justin Luebke en Unsplash.

Deja una respuesta

No publicaremos tu correo electrónico. Los campos obligatorios están marcados con: •

He leído y acepto la Política de privacidad de Nelio Software

Al marcar la casilla de aceptación estás dando tu legítimo consentimiento para que tu información personal se almacene en SiteGround y sea usada por Nelio Software con el propósito único de publicar aquí este comentario. Contáctanos para corregir, limitar, eliminar o acceder a tu información.