Plantilla de taxonomía para tipos de contenido personalizado

16 feb 2015, 18:46:21
Vistas: 27.4K
Votos: 3

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?

6
Comentarios

Creé un CPT portfolio y sus categorías portfolio_categories, puedo ver todo el portfolio usando archive-portfolio.php. Y puedes ver los elementos de la categoría deseada usando archive-portfolio_category.php ya que tu taxonomía es portfolio_category.

Mayeenul Islam Mayeenul Islam
16 feb 2015 18:58:06

@MayeenulIslam Gracias por tu respuesta. He creado un "archive-portfolio_category.php" y un "taxonomy-portfolio_category.php" sin éxito. Mi plugin WhatTheFile sigue mostrando: archive.php

p2or p2or
16 feb 2015 19:06:02

La función de registro de taxonomía debería ser así: register_taxonomy( 'portfolio_category', array( 'portfolio' ), $args ); y el parámetro rewrite puede ser así: 'rewrite' => array( 'slug' => 'portfolio-categories' ),

Mayeenul Islam Mayeenul Islam
16 feb 2015 19:09:11

Lo siento, en tu caso el rewrite sería: 'rewrite' => array( 'slug' => 'portfolio-category' ),, no olvides probar también archive-portfolio-category.php (con guión). Porque no lo he probado yo mismo. :)

Mayeenul Islam Mayeenul Islam
16 feb 2015 19:16:01

@MayeenulIslam Gracias por tu esfuerzo - probé tu código, actualicé los Permalinks, pero sigue igual -> archive.php

p2or p2or
16 feb 2015 19:19:16
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 2
8

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.

16 feb 2015 18:52:38
Comentarios

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

p2or p2or
16 feb 2015 18:58:23

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

Manny Fleurmond Manny Fleurmond
16 feb 2015 19:08:21

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

p2or p2or
16 feb 2015 19:13:17

¿Qué no está funcionando? ¿Cómo lo estás probando?

Manny Fleurmond Manny Fleurmond
16 feb 2015 19:20:13

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

p2or p2or
16 feb 2015 19:21:23

¿Usando qué URL?

Manny Fleurmond Manny Fleurmond
16 feb 2015 19:22:08

Buena idea, estoy usando: url/category/libros/ ¿Está mal?

p2or p2or
16 feb 2015 19:23:55

Para tu taxonomía, debería ser portfolio_category/libros

Manny Fleurmond Manny Fleurmond
16 feb 2015 19:26:50
Mostrar los 3 comentarios restantes
0

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.

23 ene 2018 07:55:45