¿Cómo mostrar las categorías de mi Tipo de Entrada Personalizada?

1 ago 2013, 10:40:31
Vistas: 171K
Votos: 9

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">&#0102;</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>
0
Todas las respuestas a la pregunta 3
7
19

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.

1 ago 2013 11:11:14
Comentarios

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.

Laniakea Laniakea
1 ago 2013 11:47:55

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.

Rahul Verma Rahul Verma
1 ago 2013 13:30:05

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

Rahul Verma Rahul Verma
1 ago 2013 13:33:12

He subido el código aquí.

Laniakea Laniakea
1 ago 2013 13:55:43

Voy a crear un nuevo hilo sobre el filtrado de categorías.

Laniakea Laniakea
5 ago 2013 10:14:04

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 ); } } }`

Eyo Okon Eyo Eyo Okon Eyo
29 sept 2016 01:26:31

Debería ser $args = array( 'hide_empty' => false, ); $terms = get_terms($taxonomy, $args) para ver la lista incluso cuando las categorías no tienen posts.

X9DESIGN X9DESIGN
6 feb 2018 10:22:45
Mostrar los 2 comentarios restantes
0

Para la lista de categorías de este post del portafolio utiliza:

<?php echo get_the_term_list(get_the_ID(), 'portfolio_category', '', ', ', ''); ?>
15 ene 2017 10:15:41
0

Este código funciona.

$term_args = array(
        'post_type'              => 'portfolio',
         'taxonomy'               => 'project-type',
        'hide_empty'             => true,
        'fields'                 => 'all'
      );
    $term_query = new WP_Term_Query( $term_args );
9 feb 2021 14:39:02