Cómo mostrar una lista de categorías
Estoy tratando de configurar una lista de categorías con enlaces clickables a cada categoría. He consultado:
y no estoy muy seguro de dónde colocar el código o cómo acceder a él en la página.
Entiendo el PHP lo suficientemente bien - es bastante sencillo, solo soy relativamente nuevo en WP y necesito ayuda para implementarlo.

Te mostraré cómo mostrar una lista de categorías en WordPress y también marcar la categoría activa, mira el código a continuación:
<?php // Obtener el objeto de consulta actual $term = get_queried_object(); $term_id = ( isset( $term->term_id ) ) ? (int) $term->term_id : 0; $categories = get_categories( array( 'taxonomy' => 'category', // Taxonomía para recuperar términos. Queremos 'category'. Nota que este parámetro por defecto es 'category', así que puedes omitirlo 'orderby' => 'name', 'parent' => 0, 'hide_empty' => 0, // cambiar a 1 para ocultar categorías que no tengan ni un solo post ) ); ?> <ul> <?php foreach ( $categories as $category ) { $cat_ID = (int) $category->term_id; $category_name = $category->name; // Cuando se visualiza una categoría particular, darle una clase [active] $cat_class = ( $cat_ID == $term_id ) ? 'active' : 'not-active'; // No me gusta mostrar la categoría [uncategorized] if ( strtolower( $category_name ) != 'uncategorized' ) { printf( '%3$s', esc_attr( $cat_class ), esc_url( get_category_link( $category->term_id ) ), esc_html( $category->name ) ); } } ?> </ul>
Notas sobre el código anterior:
get_queried_object() recupera el objeto actualmente consultado. Por ejemplo:
- si estás en un post individual, devolverá el objeto del post
- si estás en una página, devolverá el objeto de la página
- si estás en una página de archivo, devolverá el objeto del tipo de post
- si estás en un archivo de categoría, devolverá el objeto de la categoría
- si estás en un archivo de autor, devolverá el objeto del autor
- etc.
Pero hay algunas implicaciones al usar get_queried_object()
, no deberías esperar que devuelva un objeto de tipo de post incluso cuando is_post_type_archive() sea verdadero. Revisa esto para más información.
También, nota que get_queried_object()
es un envoltorio para $wp_query->get_queried_object()
, así que devuelve un tipo de dato de objeto WP.
get_categories()
get_categories() recupera una lista de objetos de categoría. Actualmente acepta solo un parámetro - $args
. El parámetro $args especifica una lista de argumentos que deben usarse para recuperar categorías. Ver get_terms() para opciones adicionales.
Sin embargo, para obtener la categoría para posts particulares aquí hay una función simple que escribí: Cómo obtener una lista de categorías para un post

Según el hilo de WPSE enlazado, y la respuesta aceptada, el código es (copiado y pegado):
$categories = get_categories('child_of=31');
foreach ($categories as $category) {
// Muestra la información de la subcategoría usando valores de $category como $category->cat_name
echo '<h2>'.$category->name.'</h2>';
echo '<ul>';
foreach (get_posts('cat='.$category->term_id) as $post) {
setup_postdata( $post );
echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>';
}
echo '</ul>';
}
Para nosotros (los desarrolladores de WordPress) el Codex es clave para la mayoría de los conceptos básicos. Así que, según el WordPress Codex:
get_categories()
realiza una consulta para todas las categorías de un sitio y devuelve un array.- De manera similar,
get_posts()
realiza una consulta para todas las entradas de un sitio y devuelve un array.
Y ambos son atajos de WP_Query()
. Puedes obtener todos sus parámetros posibles en las páginas del Codex. Como eres un entusiasta de PHP, ya sabes cómo funciona el código: $categories
toma todas las categorías y para cada categoría get_posts()
toma sus entradas.
Así que es muy similar a una consulta mySQL y un bucle foreach en PHP puro. Puedes colocar este código en cualquiera de las páginas de plantilla del tema activo de tu sitio WP. La Jerarquía de Plantillas puede darte una visión detallada.
Según el título de tu pregunta:
Cómo mostrar una lista de categorías
La respuesta puede ser:
$categories = get_categories();
echo '<ul>';
foreach ($categories as $category) {
echo '<li>'. $category->cat_name .'</li>';
}
echo '</ul>';
No estoy muy seguro de dónde colocar el código o cómo acceder a él en la página.
Ya lo he dicho, intenta colocar el código en index.php
, front-page.php
, ... en cualquier lugar. El concepto clave es: es solo una Consulta SQL y un útil bucle foreach
de PHP.

Este método te permite excluir cualquier categoría simplemente añadiendo el ID de la categoría al código.
Aquí hay una mejor manera de añadir una lista de categorías condicionalmente desde el archivo de funciones de tu tema hijo en cualquier ubicación de hook específica de WordPress o del tema:
add_filter( 'the_content', 'wpsites_list_cats' );
function wpsites_list_cats($content) {
if( is_singular('post') && is_main_query() ) {
$args = array(
'orderby' => 'name',
'exclude' => '',
'include' => '',
'parent' => 0
);
$categories = get_categories( $args );
echo'<nav id="primary-navigation" class="primary-navigation" role="navigation">';
foreach ( $categories as $category ) {
echo '<li><a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a></li>';
}
echo'</nav>';
return $content;
}
}
Este es el resultado
Y este es el resultado si deseas utilizar los estilos existentes de los menús de navegación de Twenty Fourteen que incluye el código anterior.
El código también te permite incluir categorías específicas o excluir cualquiera usando los IDs de categoría.
También podrías crear un área de widgets personalizada y usar el widget de categorías nativo de WordPress.
Simplemente cambia el hook the_content para modificar la ubicación de la lista de categorías.
Modificado de esta fuente

O utiliza el plugin List Categories con su propio shortcode configurable, que actúa como un atajo a la wp_list_categories( array|string $args = '' )
función.
Puedes configurar sus argumentos como también está documentado allí.
