
Una taxonomía es simplemente una forma de clasificar contenido. WordPress trae dos: las categorías (con jerarquía) y las etiquetas (sin jerarquía). Pero puedes crear todas las que necesites: «Nivel», «Sistema operativo», «Tipo de licencia», «Ciudad»…
En la entrada anterior creamos el tipo de contenido Recursos. Hoy le agregamos una taxonomía Nivel con los valores Principiante, Intermedio y Avanzado, para que cada visitante encuentre lo que le sirve.
¿Por qué no usar categorías?
- Las categorías son de las entradas. Si las compartes con los recursos, el listado de «Guías & Trucos» mezclaría entradas y recursos.
- Una taxonomía propia tiene su propio menú, su caja en el editor y sus direcciones:
/nivel/principiante/. - Puedes combinar: un recurso puede ser «Avanzado» y además tener etiquetas.
Paso 1. Registra la taxonomía
En el plugin cwp-recursos.php de la entrada anterior, agrega:
add_action( 'init', 'cwp_recursos_taxonomia_nivel' );
function cwp_recursos_taxonomia_nivel() {
register_taxonomy(
'cwp_nivel',
array( 'cwp_recurso' ),
array(
'labels' => array(
'name' => 'Niveles',
'singular_name' => 'Nivel',
'search_items' => 'Buscar niveles',
'all_items' => 'Todos los niveles',
'edit_item' => 'Editar nivel',
'update_item' => 'Actualizar nivel',
'add_new_item' => 'Añadir nuevo nivel',
'new_item_name' => 'Nombre del nuevo nivel',
'menu_name' => 'Niveles',
),
'hierarchical' => true,
'public' => true,
'show_admin_column' => true,
'show_in_rest' => true,
'rewrite' => array( 'slug' => 'nivel', 'with_front' => false ),
)
);
}
Recarga el panel: dentro de Recursos aparece Niveles. Y en el editor de cada recurso, en el panel derecho, una caja para elegir el nivel.
Las opciones importantes
'cwp_nivel': nombre interno, con prefijo. Máximo 32 caracteres. Igual que con los CPT, no lo cambies después.array( 'cwp_recurso' ): a qué tipos de contenido se aplica. Puedes poner varios, por ejemploarray( 'cwp_recurso', 'post' ).hierarchical:true: se comporta como las categorías (casillas para marcar, puede tener niveles padre e hijo).false: se comporta como las etiquetas (campo para escribir, sin jerarquía).
show_admin_column: agrega una columna «Niveles» en el listado de recursos del panel. Muy cómodo.show_in_rest: necesario para que la caja aparezca en el editor de bloques.
Como cambian las direcciones del sitio, guarda una vez Ajustes → Enlaces permanentes (o desactiva y activa el plugin, si agregaste el flush_rewrite_rules de la entrada anterior).
Paso 2. Crea los términos iniciales automáticamente
Los valores de una taxonomía se llaman términos. Puedes crearlos a mano en Recursos → Niveles, o hacer que el plugin los cree al activarse. Modifica la función de activación así:
function cwp_recursos_activar() {
cwp_recursos_registrar();
cwp_recursos_taxonomia_nivel();
foreach ( array( 'Principiante', 'Intermedio', 'Avanzado' ) as $nivel ) {
if ( ! term_exists( $nivel, 'cwp_nivel' ) ) {
wp_insert_term( $nivel, 'cwp_nivel' );
}
}
flush_rewrite_rules();
}
Fíjate que hay que registrar la taxonomía dentro de la función de activación: al activar el plugin, el gancho init ya pasó, y sin registrarla, wp_insert_term() fallaría.
Paso 3. Filtra el listado del panel por nivel
Con muchos recursos, querrás ver solo los avanzados. Este código agrega un desplegable de filtro arriba del listado:
add_action( 'restrict_manage_posts', 'cwp_recursos_filtro_nivel' );
function cwp_recursos_filtro_nivel( $post_type ) {
if ( 'cwp_recurso' !== $post_type ) {
return;
}
wp_dropdown_categories(
array(
'taxonomy' => 'cwp_nivel',
'name' => 'cwp_nivel',
'value_field' => 'slug',
'show_option_all' => 'Todos los niveles',
'selected' => isset( $_GET['cwp_nivel'] ) ? sanitize_key( $_GET['cwp_nivel'] ) : '',
'hide_empty' => false,
)
);
}
No hace falta más código para que el filtro funcione: como el nombre del campo coincide con el de la taxonomía pública, WordPress entiende ?cwp_nivel=avanzado y filtra solo.
Paso 4. Muestra el nivel en el sitio
Para mostrar el nivel de un recurso con enlace a su listado, en la plantilla single-cwp_recurso.php de tu tema hijo o con un filtro:
add_filter( 'the_content', 'cwp_recursos_mostrar_nivel' );
function cwp_recursos_mostrar_nivel( $contenido ) {
if ( ! is_singular( 'cwp_recurso' ) || ! in_the_loop() || ! is_main_query() ) {
return $contenido;
}
$niveles = get_the_term_list( get_the_ID(), 'cwp_nivel', '<p class="cwp-nivel">Nivel: ', ', ', '</p>' );
if ( ! $niveles || is_wp_error( $niveles ) ) {
return $contenido;
}
return $niveles . $contenido;
}
get_the_term_list() devuelve los términos ya enlazados a sus páginas: /nivel/principiante/ mostrará todos los recursos para principiantes.
Paso 5. Consulta por taxonomía
Para listar, por ejemplo, solo los recursos para principiantes, usa tax_query en WP_Query:
$consulta = new WP_Query(
array(
'post_type' => 'cwp_recurso',
'posts_per_page' => 5,
'tax_query' => array(
array(
'taxonomy' => 'cwp_nivel',
'field' => 'slug',
'terms' => 'principiante',
),
),
)
);
Puedes adaptar el shortcode ultimos_recursos de la entrada anterior para que acepte un atributo nivel y use esta consulta. Buen ejercicio para practicar.
¿Dudas entre categoría, etiqueta o taxonomía propia? Plantea tu caso en el foro: es una de las decisiones de estructura más importantes de un sitio y vale la pena conversarla.





