Comprobar si un post tiene asignado un término de una taxonomía en WordPress

Puede ser que en un momento dado necesitemos saber si un post, del tipo que sea, tiene o no asignado un término de una taxonomía en concreto.

Antes de nada, vamos a sentar las bases para saber de lo que estamos hablando y lo que vamos a hacer, ok?

Os pongo el siguiente ejemplo:

Tenemos un Custom Post Type «Hook» que usamos, como ya habréis adivinado, para crear información de hooks de WooCommerce, cada hook en un post.

Este CPT «hook», tiene una taxonomía a la que llamaremos «tipo» en la que recogeremos el tipo de hook si es «Action» o es «Filter».

Ahora bien, en nuestro fichero de archivo de el cpt «hook», necesitamos saber si cada uno de los hooks (posts del cpt hook) es «action» o «filter » y para eso podemos usar la siguiente función:

has_term( string|int|array $term = '', string $taxonomy = '', int|WP_Post $post = null )

Podéis encontrar más información sobre esta función en: https://developer.wordpress.org/reference/functions/has_term/

Ahora bien, como en nuetro fichero de archivo de hook tenemos todo este tinglado montado en un loop que recorre todos los posts de tipo hook para ir pintándolos en el front, ahí es donde vamos a meter esta función para comprobar si el post es un action o es un filter.

Pero antes, tenemos que saber que el motivo por que el cual queremos saber si es un «action» o un «filter» es para añadirle una clase css en cada caso porque queremos pintar de manera diferente los actions y los filters.

Por consiguiente nuestro código quedaría algo así:

Recordemos que este código está dentro de un loop en el que vamos recorriendo todos los posts del cpt «hook».

Ahora, vemos un poco por encima la función que hemos usado y cómo la hemos usado.

has_term( 'action', 'hook-type' );

Como podemos ver, en nuestro caso hemos incluído como primer parámetro ‘action’ que es el slug del término de taxomía que queremos comprobar y como segundo parámetro hemos añadido el slug de la taxonomía ‘hook-type’.

De esta forma comprobamos si el post actual tiene asignado el término ‘action’ y si es así, establecemos un valor a la variable que vamos a usar para guardar el nombre de la clase css.

Espero que me haya explicado bien pero de todas formas, cualquier duda que tengáis sobre esto, me lo podéis comentar cuando queráis e intentaré ayudaros en todo lo que pueda.

Saludos a tod@s!

Añadir texto al título de los entradas en WordPress dependiendo de la categoría

Si queremos añadir texto al título de los las entradas de WordPress de una categoría específica, aquí te explico una manera de hacerlo.

Nos ponemos en situación

Para ponernos en situación pongamos que tenemos una página web de una inmobiliaria donde vamos poniendo anuncios de pisos en venta, en alquiler, vendido, alquilado, etc

De momento lo estamos gestionando con categorías que podrían ser las que he comentado:

  • En venta.
  • En alquiler.
  • Vendido.
  • Alquilado.

Cada vez que publicamos un piso en venta le ponemos un título en plan: Piso de 90 metros cuadrados en el centro. Por poner un ejemplo.

Después rellenamos todo el contenido que necesitemos y le asignamos por ejemplo la categoría «En venta«.

¿Qué queremos hacer?

Pues bien, lo que queremos es que a partir de ahora cuando una entrada tiene establecida la categoría «En venta» se modifique el título de la entrada para que los visitante vean el título siguiente: «EN VENTA: titulo….«.

Es sólo un ejemplo para que lo entendamos pero habría que hacer lo mismo con el resto de categorías para que cuando un piso «en venta» se venda y le asignemos la categoría «Vendido«, el título que se muestre sea: «VENDIDO: título…«.

Para que nos quede claro, no queremos que se modifique el título en si, ok? Porque cuando cambiemos de categoría sería más complejo ya que tendríamos que quitar el texto existente del comienzo y luego añadir el nuevo correspondiente a la categoría.

¿Cómo lo vamos a hacer?

Voy a intentar hacerlo lo mas sencillo posible para que lo entendamos bien.

En primer lugar damos por sentado que ya tenemos creadas las categorías que hemos comentado antes.

Ahora vamos a crear una función que insertaremos en el fichero functions.php de nuestro tema en la que comprobaremos con un «if» si el post tiene asignada una categoría de las que nos interesan y si es así que añada el texto que queremos al inicio del título y que devuelva esa cadena.

Para el ejemplo de la categoría «en venta» quedaría así:

if( in_category( 'en venta') ) {
   $title = 'EN VENTA: ' . $title;
}

Se entiende bien ¿verdad?

Ahora bien, tendríamos que hacer un «if» como el anterior para cada categoría. Por supuesto hay maneras mejores de hacerlo como por ejemplo con un Switch pero bueno, en este tutorial lo hacemos con varios «if» para que se entienda mejor.

Como digo, para el caso de la categoría «vendido«, el if quedaría así:

if( in_category( 'vendido') ) {
     $title = 'VENDIDO: ' . $title;
}

¿Lo tenemos claro? Pues sigamos…

La función

Ahora que ya hemos visto y entendido el funcionamiento básico, vamos a crear la función que contendrá los «if» y que devolverá el título modificado.

La función la vamos a llamar: «modificar_titulo_por_categoria» y quedaría así:

function modificar_titulo_por_categoria( $title, $id ) {
     if( in_category( 'en venta') ) {
          $title = 'EN VENTA: ' . $title;
     }
     
     if( in_category( 'vendido') ) {
          $title = 'VENDIDO: ' . $title;
     }
     return $title;
}

El código completo

Ya casi lo tenemos, lo único que nos falta es añadir un filter que ejecute la función que acabamos de crear.

Usaremos el filtro ‘the_title‘, como no.

Bien, pues para no demorarnos más, aquí tenéis el código completo con esas dos categorías de ejemplo que hemos comentado.

https://gist.github.com/OscarAbadFolgueira/a235b1bc6e48768b5e29fc8f2472c47f

Ya sabes, lo puedes copiar y pegar en el fichero functions.php de tu tema WordPress y modificarlo a tu gusto.

Y aquí podéis ver el resultado:

¿Quieres un plugin?

Para terminar te comento que si necesitas un plugin que haga algo similar a lo que hemos comentado en este artículo, no dudes en comentármelo a través del formulario de contacto. Explícame bien lo que necesitas para que yo lo tenga claro, ok?

Venga, pues sin más, nos vemos en el siguiente!!

Ir al contenido