is_category(), is_single() y has_terms()… entre otros condicionales de WordPress

WordPress nos ofrece muchos condicionales para poder utilizar en nuestros plugins, themes o plantillas, pero no todos son muy intuitivos….


por

Los condicionales de WordPress son muy prácticos para utilizarlos en nuestro código, temas o plugins para restringir la funcionalidad, modificar diseño o personalizar cualquier cosa en función de ciertas condiciones.

Disponemos de condicionales para saber en que página o tipo de página estamos (is_front_page(), is_home(), is_admin(), is_singular(), etc…), si estamos en una página o post en concreto (is_page(), is_single(), is_author()…) y muchos otros que igual ni conocemos ni llegaremos a utilizar.

Sin embargo, hay que reconocer que la nomenclatura y uso de estos condicionales puede no llegar a ser muy intuitivo a veces y nos podemos volver locos por una función que no nos da el resultado esperado por utilizar is_category() en lugar de in_category() o de is_archive() o is_product() o is_post() en lugar de is_single().

No vamos a revisar aquí todos los condicionales, por que son muchos, y los tenéis todos en el codex: https://codex.wordpress.org/Conditional_Tags , pero sí algunos que al menos yo utilizo bastante que en no pocas ocasiones me lleva a confusión:

is_single() / is_singular() / is_page()

El primer trio de condicionales va dedicado a las páginas o posts individuales, es decir, cuando estamos viendo una entrada en detalle o una página en concreto y no un listado de archive, posts de una categoría o autor, etc…

  • is_singular() nos devuelve verdadero si estamos en una página, post o custom post type y le podemos pasar el parámetro para saber si estamos en un tipo de post en concreto (is_singular(‘post’);)
is_singular();
is_singular( 'book' );
is_singular( array( 'newspaper', 'book' ) );
  • is_single(): nos devuelve verdadero si estamos en el post, custom post type o adjunto, pero falso si estamos en una página. Le podemos pasar ID título o slug de una o varias entradas.
is_single(  );
is_single( ’17’ );
is_single( ’new-book’ );
is_single( array( 17, ‘new-book’, ‘New Book’ ) )
  • is_page(): comprueba si la url en la que estamos es de tipo página, y también podemos pasarle uno o varios ID, slug o título de página
is_page(  );
is_page( ’17’ );
is_page( ’new-book’ );
is_page( array( 17, ‘new-book’, ‘New Book’ ) )

NOTA: Ojo, aunque no tiene mucha lógica, is_post() no existe…

is_category(), in_category(), is_tax(), has_tag(), has_term()

Casi nada… para no tener las ideas claras, ¿verdad?

  • is_category(): nos dice si la página que estamos es el archive o listado de la categoría indicada. ( Sería como is_archive() pero especificando que sea una categoría).
    Como en los casos anteriores, podemos pasarle ID, slug o título, sólo uno o en array.
  • in_category(): Nos indica si el post actual pertenece a una o varias categorías en concerto.
  • is_tag(): sería el correspondiente a is_category() pero para etiquetas en lugar de categorías, nos dice si estamos en la página del listado de etiqueta y podemos pasarle una o varias en concreto.
  • has_tag(): fuera de toda obviedad, se corresponde con in_category(), es decir, nos dice si la entrada actual tiene marcada la etiqueta o etiquetas que le pasemos.

Y seguimos con las taxonomías…

  • is_tax(): se correspondería con is_category o is_tag pero para cualquier taxonomía, nativa o personalizada.
  • has_term( ‘verde’, ‘color’ ): este condicional sería un generíco para has_tag o in_category pero para cualquier tipo de taxonomía, y le tenemos que indicar que tipo es.
    El primer parámetro es el valor (o valores, puede ser un array) y el segundo el nombre de la taxonomía.

Y por si ya lo teníamos todo claro…

  • term_exists(‘verde’,’color’): comprueba si existe ese término para esa taxonomía, es decir, no tiene nada que ver con el post actual, sino si en nuestra web existe un valor ‘verde’ para la taxonomía ‘color’;
  • taxonomy_exists(): comprueba si existe una taxonomía en concreto (si la hemos registrado en nuestro sitio con register_taxonomy()

No se si esta recopilación te habrá ayudado o confundido todavía más… si estás empezando con WordPress no te agobies, yo llevo años y sigo confundiendo algunos condicionales..

(De hecho este resumen lo he preparado para tenerlo a mano y poder consultar cada vez que tengo una duda)