Quizás alguna vez te hayas preguntado como obtener los tags de solo una(s) categoría(s) pero no hayas dando con el código necesario. Obtener solo los tags para X categoría dada, puede ser una buena idea si contamos con Blog bastante popular y necesitamos centrar la atención en puntos concretos, en este casos los tags.

wordpres tags por categorias Obtener los tags para una categoria en Wordpress

Tal ves te estés preguntando que diferencia puede haber en nombrar los tags de este forma y de la forma que comúnmente se utiliza. Bueno, supongamos que cuentas con Blog donde cuentas con estas categorías y tags relacionados:

  • A) Informática Tags> Mac Os, Windows, Linux
  • B) Música Tags> Rock, Pop, Clásica
  • C) Películas Tags> Retro, Drama, Acción

Si quisiera crear en mi barra lateral un pequeño rincón donde lo titulo el mes de la música, una buena idea seria mostrar las ultimas entradas y los últimos tags. Mis ultimas entradas se muestran con un query_post, pero si invoco a mis tags, estarían incluyendo; no solo a Rock, Pop y Clásica; sino también a todos los demás, como por ejemplo, Drama, Linux, etc.

Con esta pequeña receta podremos incluir los últimos 10 tags asignados dentro de una categoría o categorías, con unas simples lineas.

Abre tu archivo functions.php

 function get_category_tags($args) {
	global $wpdb;
	$tags = $wpdb->get_results
	("
		SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, null as tag_link
		FROM
			wp_posts as p1
			LEFT JOIN wp_term_relationships as r1 ON p1.ID = r1.object_ID
			LEFT JOIN wp_term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
			LEFT JOIN wp_terms as terms1 ON t1.term_id = terms1.term_id,
 
			wp_posts as p2
			LEFT JOIN wp_term_relationships as r2 ON p2.ID = r2.object_ID
			LEFT JOIN wp_term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
			LEFT JOIN wp_terms as terms2 ON t2.term_id = terms2.term_id
		WHERE
			t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id IN (".$args['categories'].") AND
			t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
			AND p1.ID = p2.ID
		ORDER by tag_name
		LIMIT 10 
	");
	$count = 0;
	foreach ($tags as $tag) {
		$tags[$count]->tag_link = get_tag_link($tag->tag_id);
		$count++;
	}
	return $tags;
}

Como podrás ver LIMIT 10 es lo que nos permite tomar control de la cantidad de tags a mostrar, para este ejemplo solo serán 10.

Integrando en tu plantilla

Donde necesites mostrar los tags, solo introduce este lineas, y lograras mostrar los últimos 10 tags en un lista desordenada.

<?php
$args = array('categories' => '3,40'); // id de la(s) categoria(s) que queremos hacer referencia
$tags = get_category_tags($args);
$content .= "<ul>";
foreach($tags as $tag)
{
  $content .= "<li><a href=\"$tag->tag_link\">$tag->tag_name</a></li>";
}
 
$content .= "</ul>";
echo $content;
 
?>
</php>

Como lo veraz el array es simple de adaptar a tus necesidades, por lo que podrás darle el formato que mas te convenga.