WordPress: creare una nuova tassonomia per i custom post type

WordPress: creare una nuova tassonomia per i custom post type

Gran parte dei problemi che affrontiamo quando decidiamo di creare dei custom post type in WordPress è dovuto al fatto che il nuovo tipo di post creato non appartiene a nessuna tassonomia. Una tassonomia, come ad esempio slideshow, ci permette di creare delle categorie e di raggruppare i nostri custom post type sotto tali categorie. In questo articolo vedremo come creare una tassonomia per i nostri custom post type.

Immaginiamo di avere un custom post type chiamato slides. Ciascuna slide verrebbe automaticamente inserita senza nessuna categoria di riferimento. Qualora volessimo avere diversi tipi di slide (ad esempio delle slide appartenenti ad un certo tipo di prodotti), saremmo per forza di cose costretti a creare una nuova tassonomia.

Possiamo definire una tassonomia nel modo seguente:


<?php
class Slideshow {

	public function __construct() {
		add_action( 'init', array($this, 'slidesInit') );
		add_action( 'init', array($this, 'slidesTaxonomy') );
		add_filter( 'post_updated_messages', array($this, 'slidesUpdateMessages') );
	}

	public function slidesInit() {
		$labels = array(
			'name' => _x('Slide', 'post type general name'),
			'singular_name' => _x('Slide', 'post type singular name'),
			'add_new' => _x('Aggiungi nuova', 'Slide'),
			'add_new_item' => __('Aggiungi nuova slide'),
			'edit_item' => __('Modifica slide'),
			'new_item' => __('Nuova slide'),
			'all_items' => __('Tutte le slide'),
			'view_item' => __('Visualizza slide'),
			'search_items' => __('Cerca slide'),
			'not_found' =>  __('Nessuna slide trovata'),
			'not_found_in_trash' => __('Nessuna slide nel cestino'),
			'parent_item_colon' => '',
			'menu_name' => __('Slideshow')

		);
		$args = array(
			'labels' => $labels,
			'public' => true,
			'publicly_queryable' => true,
			'show_ui' => true,
			'show_in_menu' => true,
			'query_var' => true,
			'rewrite' => array('slug'=>'slides'),
			'capability_type' => 'post',
			'has_archive' => true,
			'hierarchical' => false,
			'menu_position' => 100,
			'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields')
		);
		register_post_type('slides',$args);
	}
	
	public function slidesTaxonomy() {
	register_taxonomy(
		'slideshow',
		'slides',
		array(
			'hierarchical' => true,
			'label' => 'Slideshow',
			'query_var' => true,
			'rewrite' => array('slug' => 'slideshow')
		)
	);
}


	public function slidesUpdateMessages( $messages ) {
		global $post, $post_ID;

		$messages['slides'] = array(
			0 => '', 
			1 => sprintf( __('Slide aggiornata. <a href="%s">Vedi slide</a>'), esc_url( get_permalink($post_ID) ) ),
			2 => __('Campo personalizzato aggiornato.'),
			3 => __('Campo personalizzato cancellato.'),
			4 => __('Slide aggiornata.'),
			5 => isset($_GET['revision']) ? sprintf( __('Versione ripristinata da %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
			6 => sprintf( __('Slide pubblicata. <a href="%s">Vedi slide</a>'), esc_url( get_permalink($post_ID) ) ),
			7 => __('Slide salvata.'),
			8 => sprintf( __('Slide inviata. <a target="_blank" href="%s">Anteprima slide</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
			9 => sprintf( __('Slide programmata per il: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Anteprima slide</a>'),
				// translators: Publish box date format, see http://php.net/date
				date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
			10 => sprintf( __('Bozza aggiornata. <a target="_blank" href="%s">Anteprima slide</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
		);

		return $messages;
	}
}
$slideshow = new Slideshow();
?>

Abbiamo prima definito un custom post type chiamato slides. Quindi abbiamo creato una nuova tassonomia tramite la funzione register_taxonomy() e gli abbiamo assegnato come post il nuovo custom post type. La nuova tassonomia ha come nome slideshow.

A questo punto WordPress ci permetterà di creare nuove categorie sotto questa tassonomia e di assegnare i nostri custom post type alle categorie create.

Torna su