Escribe y presiona 'Enter'

Añadir categorías y etiquetas a páginas en WordPress

Descubre cómo puedes asignar etiquetas y categorías a páginas en WordPress. A pelo. Sin plugins. Fácil. Copia/pega.

¡Hola revoltosx del Gro.wW!

En este artículo te muestro el fragmento de código que necesitas para poder añadir categorías a páginas en WP sin plugins (sí, y también etiquetas).

Cómo agregar y/o asignar categorías a páginas

Si estás familiarizado con WordPress, es probable que en alguna ocasión te haya llamado la atención una diferencia básica en la administración de tus contenidos:

WordPress no te permite clasificar las páginas mediante categorías o etiquetas. Quiero decir, no de forma predeterminada claro.

Puedes (y debes) organizar tus artículos mediante estos dos tipos de taxonomías básicas. Pero, por defecto, la organización de las páginas tendrás que hacerla mediante niveles jerárquicos (páginas de nivel superior).

No obstante, hay situaciones en las que puede ser muy útil poder añadir una categoría o etiqueta a una página. Por ejemplo:

  • Mostrar páginas en módulos dinámicos de tu theme, como por ejemplo un slider o presentación de contenidos.
  • Exprimir la funcionalidad de Plugins y Widgets que solo trabajan con las taxonomías de las entradas.
  • Organizar mejor tus páginas a nivel administrativo.

¿Estás en alguna de estas situaciones?

Pues, ya sea por necesidad o por mera curiosidad, hoy vas a aprender a habilitar el uso de las taxonomías de las entradas (Post Types) en tus páginas. Es decir, aprenderás a añadir categorías y etiquetas a tus páginas.

¿Qué archivo hay que editar?

Antes de lanzarte de copiar y pegar el código en el archivo necesario, insisto en la importancia de trabajar siempre sobre los archivos de un tema hijo (child theme).

Dicho esto:

El fragmento de código, o snippet, que voy a enseñarte debes incluirlo en el archivo functions.php de tu tema (hijo).

Ya sabes que editar este archivo no tiene la menor complicación. Pero lo ideal es que te descargues una copia antes de hacer nada. Hazme caso, esto es vital cuando quieres rectificar y no sabes volver atrás (nunca se sabe).

¿Qué hace exactamente el código?

El tiempo es oro, así que quiero dejar claro que mediante este código no vas a crear Custom Post Types. Por lo que tampoco se crean taxonomías nuevas y exclusivas para las páginas.

El siguiente Snippet permite asignar o añadir las categorías y etiquetas de las entradas a las páginas. Es decir, compartir las mismas taxonomías.

Cabe destacar que, al añadir una categoría del blog a una página, esta aparecerá en las paginas de archivos (category.php y tag.php). Pero no en la portada del blog.

Código (snippet) para añadir categorías a páginas

¿Preparadx para poder añadir categorías y etiquetas a tus páginas? este es el fragmento de código (snippet) que tienes que incluir en tu archivo functions.php:

/**
 * AÑADIR CATEGORÍAS Y ETIQUETAS A PÁGINAS
 */

// Habilitar cajas de categorías y etiquetas en el editor de páginas
function add_taxonomies_to_pages() {
	register_taxonomy_for_object_type( 'post_tag', 'page' );
	register_taxonomy_for_object_type( 'category', 'page' );
}
add_action( 'init', 'add_taxonomies_to_pages' );
// Permitir listar páginas categorizadas y/o etiquetadas y mostrarlas en las plantillas archive.php y tag.php
function category_and_tag_archives( $wp_query ) {
	$my_post_array = array('post','page');
		if ( $wp_query->get( 'category_name' ) || $wp_query->get( 'cat' ) )
		 	$wp_query->set( 'post_type', $my_post_array );
	
	 	if ( $wp_query->get( 'tag' ) )
	 		$wp_query->set( 'post_type', $my_post_array );
}
add_action( 'pre_get_posts', 'category_and_tag_archives', 10, 1 );

Sin entrar en detalles, el código anterior lo que hace es:

  • Habilitar la caja de taxnomías en el editor de página, y permitir su uso gracias a la función register_taxonomy_for_object_type( ‘taxonomía’, ‘post-type’ ).
  • Permitir que la consulta de las plantillas archive.php y tag.php pueda filtrar también los contenidos tipo «page» (las páginas) en base a su taxonomía, modificando la clase clase WP_Query.
  • Añadir el tipo de contenido «page» a la misma variable del tipo «post» para listar ambos contenidos categorizados gracias al hook pre_get_post.
  • Configurar la prioridad de ejecución en 10 ($priority). Este es el valor por defecto, e indica el orden de ejecución con respecto a otras funciones que se enganchan (hook) al mismo filtro.
  • Determinar el número de argumentos que acepta la función en 1 ($accepted_args).

Observaciones del snippet

Como ves, este snippet para agregar categorías a páginas es muy simple. Implementarlo solo te llevará un par de minutos.

Pero cabe destacar que, como cualquier otro snippet genérico, puede generar resultados inesperados en función de:

  • El tema que utilizas en tu instalación y sus características.
  • La configuración de las plantillas de archivos como: archive.php, tag.php, page.php y relacionadas.
  • La incompatibilidad con otros snippets de tu archivo functions.php o plugins instalados.

Así que puede que sea probable que necesites personalizarlo, o al menos adaptar los archivos de tu tema.

Conflictos en el orden de ejecución

Vigila el resto de funciones que se añaden a pre_get_post en tu functions.php. Es posible que entren en conflicto si no les das el orden de ejecución correcto.

Es importante que revises tu functions.php, y tengas en cuenta el orden de ejecución de otros snippets que modifiquen la WP_Query añadiéndose a pre_get_post.

  • Si utilizas este Snippet para excluir categorías del blog, y colocas este otro fragmento de código después (o no le asignas una prioridad mayor) se van a generar conflictos a la hora de mostrar los contenidos en tu web.

¿Es tu caso?, entonces tienes que asignar un numero de ejecución más bajo (mayor prioridad) a este snippet. O al menos incluirlo antes en tu functions.php para que se ejecute primero.

Comportamiento con Widgets

Ten en cuenta que al trabajar con taxonomías de contenidos tipo Post type, los widgets y plugins que utilizas para tu blog van a interactuar con tus páginas y sus categorías. Por ejemplo:

Este snippet habilita el uso compartido de las taxonomías. Aunque crees una categoría para usarla solo con páginas, ésta aparecerá en el listado o desplegable del Widget «Categorías».

Si no quieres que esto suceda te recomiendo que revises este artículo en el que te enseño a ocultar categorías del Widget «Categorías» en WordPress.

Verificación de funcionamiento

Para verificar el funcionamiento correcto del código (tanto a nivel administrativo como a nivel usuario), antes de asignar categorías y etiquetas a tus páginas vigila el comportamiento del snippet con tu instalación de WordPress.

Cuando incluyas el código para habilitar las taxonomías del post type a las páginas, deberías notar los siguientes cambios:

  • En el editor de páginas se habilitan las cajas de categorías y etiquetas, igual que en el editor de entradas (panel de ajustes a la derecha).
  • En el menú del escritorio, debajo de “Todas las páginas” y “Añadir nueva”, debe aparecer el acceso a las secciones de las taxonomías configuradas.
  • La sección de “Todas las páginas” muestra dos nuevas columnas, «Categorías» y «Etiquetas», que muestran la categorización de cada página igual que sucede en “Todas las entradas”.
  • Si pruebas a asignar una nueva categoría o etiqueta a una página, al guardar esta se tiene que registrar en la sección correspondiente, y actualizar el número de la columna “Cantidad”.
  • En las páginas de archivos de tu web se visualizan las páginas como si fueran un post clasificado con esa categoría o etiqueta.

¿Se cumple todo esto? entonces… ¡Hurra!, ahora solo queda empezar a categorizar tus páginas.

Personalizar snippet para añadir categorías a páginas

Por último, antes de finalizar este artículo, me gustaría plantearte un par de modificaciones o variaciones del código anterior.

Y es que, en la mayoría de los casos en los que se desea asignar categorías a páginas, se busca solo eso, añadir categorías y nada más.

Por lo que es posible que tú prefieras:

  • Excluir el uso de etiquetas.
  • Deshabilitar las plantillas de archivos.

Es decir, que por una parte no quieras tener la opción de asignar etiquetas a tus páginas (para qué). Y, por otra, que tampoco te interese mostrar las páginas categorizadas en las páginas de sus respectivas categorías.

Además, de este modo, también podrás eliminar líneas de código innecesarias (esencial para que tus archivos estén optimizados y sean más livianos).

Código (snippet) modificado

El siguiente código te permite añadir solo categorías a tus páginas sin tener en cuenta ni las etiquetas, ni tampoco las plantillas de taxonomías archive.php y tag.php.

/**
 * AÑADIR SOLO CATEGORÍAS A PÁGINAS
 */

// Habilitar solo la caja de categorías en el editor de páginas
function add_category_posts_to_pages() {
	register_taxonomy_for_object_type( 'category', 'page' );
}
add_action( 'init', 'add_category_posts_to_pages' );
// Permitir listar las páginas categorizadas en módulos y plugins, sin mostrarlas en la plantilla archive.php
function list_category_archives( $wp_query ) {
	$my_post_array = array('post','page');
		if ( $wp_query->get( 'cat' ) )
		 	$wp_query->set( 'post_type', $my_post_array );	 	
}
add_action( 'pre_get_posts', 'list_category_archives', 10, 1 );

Los cambios con respecto al código completo son:

  • No se habilita la caja que permite seleccionar o añadir nuevas etiquetas.
  • No se configura el uso de las plantillas archive.php y tag.php para que al visitar la página de una categoría solo aparezcan entradas.
Y tú, ¿sabes para qué más puede ser útil añadir categorías a páginas?, ¿conoces otras formas de conseguirlo?, ¿este tutorial te ha dado alguna idea para tu proyecto? deja un comentario y, ¡compartamos experiencias!

Sin comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *