Come visualizzare le categorie del mio Custom Post Type?

1 ago 2013, 10:40:31
Visualizzazioni: 171K
Voti: 9

Ho un custom post type. Quello che vorrei fare è visualizzare le categorie dei progetti proprio sopra i progetti in modo che i visitatori possano filtrarli di conseguenza.

Nel mio functions.php ho:

<?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){  

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];  
}
?>

In portfolio-type.php:

<?php

if ( function_exists( 'add_theme_support' ) ) { 
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 270, 170, true ); // Miniature normali dei post
add_image_size( 'screen-shot', 720, 540 ); // Dimensione schermo intero
}

add_action('init', 'portfolio_register');  

function portfolio_register() {  
$args = array(  
    'label' => __('Portfolio'),  
    'singular_label' => __('Progetto'),  
    '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" => "Tipi di Progetto", "singular_label" => "Tipo di Progetto", "rewrite" => true));
?>

E infine nel mio index.php ho:

<!-- Inizio Progetti -->

                    <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
Tutte le risposte alla domanda 3
7
19

Rimuovi il tuo codice da portfolio-type.php che registra il post type e la tassonomia (dalla riga 9 in poi).

Utilizza il seguente codice (in portfolio-type.php) per registrare il post type "portfolio"

function portfolio_register() {
    $labels = array(
        'name' => _x('Portfolio', 'nome generale del post type'),
        'singular_name' => _x('Elemento Portfolio', 'nome singolare del post type'),
        'add_new' => _x('Aggiungi Nuovo', 'elemento portfolio'),
        'add_new_item' => __('Aggiungi Nuovo Elemento Portfolio'),
        'edit_item' => __('Modifica Elemento Portfolio'),
        'new_item' => __('Nuovo Elemento Portfolio'),
        'view_item' => __('Visualizza Elemento Portfolio'),
        'search_items' => __('Cerca Elementi Portfolio'),
        'not_found' =>  __('Nessun elemento trovato'),
        'not_found_in_trash' => __('Nessun elemento trovato nel Cestino'),
        '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');

Utilizza il seguente codice (in portfolio-type.php) per registrare una tassonomia "portfolio_categories" per il post type "portfolio", rendendola gerarchica (come le categorie)

function create_portfolio_taxonomies() {
    $labels = array(
        'name'              => _x( 'Categorie', 'nome generale della tassonomia' ),
        'singular_name'     => _x( 'Categoria', 'nome singolare della tassonomia' ),
        'search_items'      => __( 'Cerca Categorie' ),
        'all_items'         => __( 'Tutte le Categorie' ),
        'parent_item'       => __( 'Categoria Genitore' ),
        'parent_item_colon' => __( 'Categoria Genitore:' ),
        'edit_item'         => __( 'Modifica Categoria' ),
        'update_item'       => __( 'Aggiorna Categoria' ),
        'add_new_item'      => __( 'Aggiungi Nuova Categoria' ),
        'new_item_name'     => __( 'Nome Nuova Categoria' ),
        'menu_name'         => __( 'Categorie' ),
    );

    $args = array(
        'hierarchical'      => true, // Imposta questo a 'false' per tassonomie non gerarchiche (come i tag)
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'categorie' ),
    );

    register_taxonomy( 'portfolio_categories', array( 'portfolio' ), $args );
}
add_action( 'init', 'create_portfolio_taxonomies', 0 );

Poi utilizza il seguente codice per recuperare i termini della tassonomia nei file template (come index.php)

<?php

$taxonomy = 'portfolio_categories';
$terms = get_terms($taxonomy); // Ottieni tutti i termini di una tassonomia

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;?>

?>

Fammi sapere se hai bisogno di chiarimenti.

1 ago 2013 11:11:14
Commenti

Ho sostituito il codice nel mio portfolio-type.php con il codice che mi hai fornito e sono riuscito a far apparire le categorie, ma per qualche motivo non filtrano i progetti.

Laniakea Laniakea
1 ago 2013 11:47:55

I primi due snippet di codice che ho fornito erano per la funzionalità back-end. Il terzo snippet ti permette di recuperare i nomi delle categorie.

Fammi ricontrollare il tuo sito per vedere cosa ti manca adesso.

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

Saresti in grado di postare il codice php (per l'intera sezione portfolio) che hai ora?

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

Ho commitato il codice qui.

Laniakea Laniakea
1 ago 2013 13:55:43

Inizierò una nuova discussione riguardante il filtraggio delle categorie.

Laniakea Laniakea
5 ago 2013 10:14:04

Questo potrebbe essere un modo migliore per caricare le categorie dopo aver configurato la tassonomia personalizzata `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 set 2016 01:26:31

Dovrebbe essere $args = array( 'hide_empty' => false, ); $terms = get_terms($taxonomy, $args) per vedere la lista anche quando le categorie non hanno post.

X9DESIGN X9DESIGN
6 feb 2018 10:22:45
Mostra i restanti 2 commenti
0

Per la lista delle categorie del portfolio in questo post utilizza:

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

Questo codice funziona.

$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