Plantilla de taxonomía para tipos de contenido personalizado
He creado un tipo de contenido personalizado portfolio
y una taxonomy
por supuesto.
function taxonomies_portfolio() {
$labels = array(
'name' => _x( 'Categorías de portfolio', 'nombre general de taxonomía' ),
'singular_name' => _x( 'Categorías de portfolio', 'nombre singular de taxonomía' ),
'search_items' => __( 'Buscar categorías de portfolio' ),
'all_items' => __( 'Todas las categorías de portfolio' ),
'parent_item' => __( 'Categoría padre' ),
'parent_item_colon' => __( 'Categoría padre:' ),
'edit_item' => __( 'Editar categoría de portfolio' ),
'update_item' => __( 'Actualizar categoría de portfolio' ),
'add_new_item' => __( 'Añadir categoría de portfolio' ),
'new_item_name' => __( 'Nueva categoría de portfolio' ),
'menu_name' => __( 'Categorías' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'rewrite' => true
);
register_taxonomy( 'portfolio_category', 'portfolio', $args );
}
add_action( 'init', 'taxonomies_portfolio', 0 );
¿Es posible crear 1 archivo de plantilla para mostrar todos los elementos de una sola categoría? He intentado crear un taxonomy.php
pero sin éxito. ¿Cuál es el nombre correcto de la plantilla para que funcione?
Según la página del Codex de WordPress sobre la Jerarquía de Plantillas, se crea un archivo de plantilla con el nombre taxonomy-portfolio_category.php
. WordPress usará ese archivo para mostrar el archivo de esa taxonomía. También se puede usar taxonomy-portfolio_category-{term_name}.php
para crear plantillas específicas para términos concretos dentro de la taxonomía.

Gracias Manny, pero ¿es posible usar 1 plantilla para todas las categorías en lugar de crear 3 plantillas para 3 categorías?

Sí, la primera parte de mi respuesta: taxonomy-portfolio_category.php

Ok, gracias Manny - pero desafortunadamente no funcionó, ¿hay algo más que deba considerar?

He probado "taxonomy-portfolio_category.php", pero muestra archive.php en su lugar.

No tienes que usar las plantillas estándar de WordPress para gestionar las plantillas de varias taxonomías para el mismo tipo de publicación personalizado.
Supongamos que tienes: 1) tu CPT portfolio
con 1) la taxonomía pcat
y 3) los términos 'sites', 'apps' y 'design' creados en esta taxonomía (aquí se muestran los slugs).
Caso 1: Puedes querer mostrar la misma plantilla para cualquiera de estas taxonomías pcat
. Simplemente usa la misma plantilla única portfolio-single.php
con el código que muestra cualquier registro único de portfolio
de manera uniforme.
Caso 2: Ahora digamos que quieres mostrar una plantilla diferente para cada registro del CPT portfolio
dependiendo del término de la taxonomía pcat
('sites', 'apps', 'design', 'cualquiera') asignado a ese registro.
Puedes hacer esto aún usando el mismo portfolio-single.php
con una plantilla parcial adicional para cada término de pcat
.
Tu portfolio-single.php
debe contener este código:
<?php
get_header();
// Aquí obtienes el registro particular del CPT `portfolio`.
global $post;
// Obtén el array de términos de la taxonomía 'pcat' adjuntos al registro
// y toma el slug del primer término solamente (solo por brevedad)
$txslug = get_the_terms($post, 'pcat')[0]->slug;
// Prepara dinámicamente el nombre del archivo
$filename = get_template_directory() . '/partials/_portfolio-single-'.$txslug.'.php';
// Verifica si el archivo existe y es legible
if (is_readable($filename)) {
// El caso cuando has creado la plantilla parcial para el término particular de `pcat`.
include get_template_directory() . '/partials/_portfolio-single-'.$txslug.'.php';
} else {
// El caso para todos los demás términos de la taxonomía `pcat`.
include get_template_directory() . '/partials/_portfolio-single-other.php';
}
get_footer();
Como ves en el código anterior, tendrás que crear las respectivas plantillas parciales para cada término de la taxonomía pcat
que asignes a tus publicaciones, que realmente manejarán la apariencia del término de taxonomía.
O/y crear el /partials/portfolio-single-other.php
para manejar todos los términos que quieras que se vean de manera uniforme.
Esto mantendrá los archivos de tu tema bien organizados y sin costo de código adicional te permitirá gestionar flexiblemente la apariencia de los diferentes términos de taxonomía.
NB: No olvides volver a declarar global $post;
al principio de tus plantillas '/partials/_portfolio-single-'.$txslug.'.php'
. Obtendrás acceso al objeto CPT que quieres mostrar sin costos adicionales.
