Come visualizzare le categorie del mio Custom Post Type?
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">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>

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.

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.

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.

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

Ho commitato il codice qui.

Inizierò una nuova discussione riguardante il filtraggio delle categorie.

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