April 16, 2019

Mostrar categoría principal según Yoast

En WordPress los posts nativos permiten una categorización de los artículos del blog escritos mediante el uso de 2 taxonomías que vienen por defecto, una del tipo jerárquico llamada «Categorías» y otra no, llamada «Etiquetas».

Por otra parte podemos crear nuevos tipos de contenidos, llamados «contenidos personalizados» o «custom post types» CPT los cuales pueden tener también sus propias categorías llamadas «taxonomías» personalizadas, sean estas o no jerárquicas.

Dicho esto, sean los posts nativos del blog de WordPress o sea tu propio contenido personalizado como productos, portfolio, libros,… etc para cada contenido escrito podemos tener seleccionadas una o varias categorías, y a la hora de mostrar los contenidos en la web hacer llamada a todas ellas.

Seleccionar una o varias categorás de modo nativo en WordPress
Seleccionar una o varias categorás de modo nativo en WordPress

Normalmente sólo se selecciona un término para categorizar un contenido, pero en ocasiones interesa marcar más de un término tal y como nos permite WordPress, aunque en este caso no hay modo de definir cual es el más importante.


¿ Cómo destacar un sólo término de una taxonomía (categoría) de un contenido?

Lo habitual en las webs a la hora de mostrar la categorización de los contenidos es mostrar todos ellos, tanto haya un sólo término seleccionado o varios.

Si se quiere mostrar sólo uno, en la plantilla oportuna del theme simplemente se decide mostrar normalmente el primer elemento, olvidándonos del resto… ya que NO hay modo nativo de seleccionar desde el báckend el término principal o más importante a tener en cuenta sobre el resto.

La solución radica en usar algún plugin, siendo el más popular que permite seleccionar una categoría principal el conocido Yoast SEO.

Seleccionar categoría principal con Yoast pero sin el editor de bloques activo
Seleccionar categoría principal con Yoast pero sin el editor de bloques activo

¿ Cómo mostrar sólo la categoria principal de un contenido?

Si bien plugins como Yoast SEO nos permiten por cuestiones de SEO seleccionar una categoría principal, sea esta la nativa de los posts del blog o cualquier otra taxonomía personalizada, esto NO hace que nuestro theme ya se encargue de mostrarla en la web; salvo que así ya esté preparado nuestro tema en integración con el plugin.

Para poder mostrar en la web el término principal que hemos seleccionado para un contenido, tenemos que usar una función que saque de la base de datos cual es el término principal a mostrar. Para ello puedes hacer uso del siguiente código:

/**
 * Get primary category name of post
 */
function suma_get_primary_category_name_by_custom_tax( $post_id, $custom_tax ){

	$categories = get_the_terms( $post_id, $custom_tax );

	if ( ! $categories ){
		return false;
	}

	/**
	 * If plugin Yoast SEO is running get main term
	 */
	if ( class_exists( 'WPSEO_Primary_Term' ) ){

		$wpseo_primary_term = new WPSEO_Primary_Term( $custom_tax, $post_id );
		$term = get_term( $wpseo_primary_term->get_primary_term() );

		if ( ! is_wp_error( $term ) && isset( $term ) ) {
			return $term->name;
		}
	}

    /**
	 * Return the first one if Yoast is not running
	 */
	return $categories[0]->name;

}
  • Definimos una función que usaremos para determinar el término principal de un tipo de contenido, para lo cual enviaremos el id del contenido y el nombre de la taxonomía ( categoría ) de la que queremos sacar el término más importante seleccionado en el backend.
  • Lo primero que realiza la función es sacar todos los términos de la taxonomía en cuestión para el contenido solicitado, y en caso de que no tenga términos devuelve falso.
  • Si detecta que Yoast está activo, entonces hace uso de una clase del mismo para determinar qué término es el principal, y en caso de no haber error en la búsqueda del mismo, devolver el nombre.
  • En caso de que no tengamos Yoast instalado, y lleguemos a la última parte de esta función personalizada, devuelve el primer término como posible dato a falta de saber cual es el principal.

¿ Y si usas Yoast SEO pero quieres quitar la posibilidad de seleccionar el término principal?

Como siempre en WordPress y sus plugins podemos personalizar el comportamiento por defecto. En concreto puedes quitar esta funcionalidad de seleccionar un término como principal de un modo sencillo con el siguiente código:

add_filter( 'wpseo_primary_term_taxonomies', '__return_empty_array' );

Con este código no saldrá la opción de seleccionar un término de taxonomía como principal.

Si te ha gustado... ¡Compártelo!