¿Cómo mostrar las categorías de mi Tipo de Entrada Personalizada?
Tengo un tipo de entrada personalizada. Lo que me gustaría hacer es mostrar las categorías del proyecto justo encima de los proyectos para que los visitantes puedan filtrarlos según corresponda.
En mi functions.php
tengo:
<?php
require_once('portfolio-type.php');
add_filter('excerpt_length', 'my_excerpt_length');
function my_excerpt_length($length) {
return 25;
}
add_filter('excerpt_more', 'new_excerpt_more');
function new_excerpt_more($text){
// Retorna un espacio en blanco
return ' ';
}
function portfolio_thumbnail_url($pid){
$image_id = get_post_thumbnail_id($pid);
$image_url = wp_get_attachment_image_src($image_id,'screen-shot');
return $image_url[0];
}
?>
En portfolio-type.php
:
<?php
if ( function_exists( 'add_theme_support' ) ) {
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 270, 170, true ); // Miniaturas normales de entradas
add_image_size( 'screen-shot', 720, 540 ); // Tamaño completo de pantalla
}
add_action('init', 'portfolio_register');
function portfolio_register() {
$args = array(
'label' => __('Portfolio'),
'singular_label' => __('Proyecto'),
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => true,
'supports' => array('title', 'editor', 'thumbnail')
);
register_post_type( 'portfolio' , $args );
}
register_taxonomy("project-type", array("portfolio"), array("hierarchical" => true, "label" => "Tipos de Proyecto", "singular_label" => "Tipo de Proyecto", "rewrite" => true));
?>
Y finalmente en mi index.php tengo:
<!-- Inicio Proyectos -->
<div id="posts" class="row isotope">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php
$title= str_ireplace('"', '', trim(get_the_title()));
$desc= str_ireplace('"', '', trim(get_the_content()));
?>
<div class="item post item span4 isotope-item">
<a class="project-wrp fancybox" title="<?=$title?>" rel="lightbox[work]" href="<?php print portfolio_thumbnail_url($post->ID) ?>"><div class="profile-photo"><div class="profile-icon">f</div><?php the_post_thumbnail(array('230','170'),array('alt' => '')); ?> </div>
<div class="project-name"><?php echo $title; ?></div>
<div class="project-client"><?php echo $desc; ?></div>
</a>
</div>
<?php endwhile; endif; ?>
</div>

Elimina tu código de portfolio-type.php que registra el tipo de entrada y la taxonomía (desde la línea 9 en adelante).
Utiliza el siguiente código (en portfolio-type.php) para registrar el tipo de entrada "portfolio"
function portfolio_register() {
$labels = array(
'name' => _x('Portafolio', 'nombre general del tipo de entrada'),
'singular_name' => _x('Elemento de Portafolio', 'nombre singular del tipo de entrada'),
'add_new' => _x('Añadir Nuevo', 'elemento de portafolio'),
'add_new_item' => __('Añadir Nuevo Elemento de Portafolio'),
'edit_item' => __('Editar Elemento de Portafolio'),
'new_item' => __('Nuevo Elemento de Portafolio'),
'view_item' => __('Ver Elemento de Portafolio'),
'search_items' => __('Buscar Elementos de Portafolio'),
'not_found' => __('No se encontró nada'),
'not_found_in_trash' => __('No se encontró nada en la Papelera'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => 8,
'supports' => array('title','editor','thumbnail')
);
register_post_type( 'portfolio' , $args );
}
add_action('init', 'portfolio_register');
Utiliza el siguiente código (en portfolio-type.php) para registrar una taxonomía "portfolio_categories" para el tipo de entrada "portfolio", hazla jerárquica (como categorías)
function create_portfolio_taxonomies() {
$labels = array(
'name' => _x( 'Categorías', 'nombre general de la taxonomía' ),
'singular_name' => _x( 'Categoría', 'nombre singular de la taxonomía' ),
'search_items' => __( 'Buscar Categorías' ),
'all_items' => __( 'Todas las Categorías' ),
'parent_item' => __( 'Categoría Padre' ),
'parent_item_colon' => __( 'Categoría Padre:' ),
'edit_item' => __( 'Editar Categoría' ),
'update_item' => __( 'Actualizar Categoría' ),
'add_new_item' => __( 'Añadir Nueva Categoría' ),
'new_item_name' => __( 'Nombre de Nueva Categoría' ),
'menu_name' => __( 'Categorías' ),
);
$args = array(
'hierarchical' => true, // Cambia esto a 'false' para taxonomía no jerárquica (como etiquetas)
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'categorias' ),
);
register_taxonomy( 'portfolio_categories', array( 'portfolio' ), $args );
}
add_action( 'init', 'create_portfolio_taxonomies', 0 );
Luego usa el siguiente código para recuperar los términos de la taxonomía en los archivos de plantilla (como index.php)
<?php
$taxonomy = 'portfolio_categories';
$terms = get_terms($taxonomy); // Obtiene todos los términos de una taxonomía
if ( $terms && !is_wp_error( $terms ) ) :
?>
<ul>
<?php foreach ( $terms as $term ) { ?>
<li><a href="<?php echo get_term_link($term->slug, $taxonomy); ?>"><?php echo $term->name; ?></a></li>
<?php } ?>
</ul>
<?php endif;?>
?>
Déjame saber si necesitas alguna aclaración.

Reemplacé el código en mi portfolio-type.php con el código que proporcionaste y logré que las categorías aparecieran, pero por alguna razón no están filtrando los proyectos.

Los primeros dos fragmentos de código que proporcioné eran para la funcionalidad del back-end. El tercer fragmento que te di permite recuperar los nombres de las categorías.
Déjame revisar tu sitio web nuevamente para ver qué te falta ahora.

¿Sería posible que publiques el código php (para toda la sección del portafolio) que tienes ahora?

He subido el código aquí.

Esta podría ser una mejor forma de cargar las categorías después de configurar la taxonomía personalizada `function displayCategories($post_type_name) { $customPostTaxonomies = get_object_taxonomies($post_type_name);
if(count($customPostTaxonomies) > 0) { foreach($customPostTaxonomies as $tax) { $args = array( 'orderby' => 'name', 'show_count' => 1, 'pad_counts' => 0, 'hierarchical' => 1, 'taxonomy' => $tax, 'title_li' => '' ); wp_list_categories( $args ); } } }`
