Nella costruzione del mio tema personalizzato, di cui ti consiglio di leggere la prima lezione “Creare un tema WordPress personalizzato con _s e Bootstrap“, una delle esigenze che avevo era aggiungere le pagine Portfolio.

La cosa in WordPress ĆØ abbastanza semplice senza naturalmente aggiungere nessun plugin.

Si tratta di creare un “custom post type“, ed ho trovato un sacco di risorse online che mi sono state di aiuto. Ho trovato persino un sito che, inserendo i parametri desiderati, genera direttamente il codice da inserire per creare questo tipo di post in piĆ¹ : WordPress Custom Post Type generator, consigliato da Html.it in questo articolo.

Su consiglio di Piero Bellomo (che ĆØ diventato ormai il mio GURU per questo progetto), mille volte piĆ¹ veloce ĆØ anche GenerateWP, ne parla lui stesso qui.

Io mi sono spulciata un po di siti, anche per capire dove andasse inserita questa funzione, ho cosƬ appreso che le funzioni per il corretto funzionamento del tema vanno inserite in (come dice il nome) “functions.php“, che naturalmente ĆØ presente nel nostro tema _strap.

Non sono programmatore per cui ho cercato di capire a cosa serviva il codice che andavo ad inserire, cioĆØ questo:

add_action( 'init', 'create_my_post_types' );

function portfolio_custom_post() { 
    // creazione (registrazione) del custom post type
    register_post_type( 'portfolio_page', /* nome del custom post type */
        // aggiungiamo ora tutte le impostazioni necessarie, in primis definiamo le varie etichette mostrate nei menĆ¹
        array('labels' => array(
            'name' => 'Portfolio', /* Nome, al plurale, dell'etichetta del post type. */
            'singular_name' => 'Pagina portfolio', /* Nome, al singolare, dell'etichetta del post type. */
            'all_items' => 'Tutte le pagine portfolio', /* Testo mostrato nei menu che indica tutti i contenuti del post type */
            'add_new' => 'Aggiungi nuovo', /* Il testo per il pulsante Aggiungi. */
            'add_new_item' => 'Aggiungi nuovo Portfolio', /* Testo per il pulsante Aggiungi nuovo post type */
            'edit_item' => 'Modifica Portfolio', /*  Testo per modifica */
            'new_item' => 'Nuova pagina Portfolio', /* Testo per nuovo oggetto */
            'view_item' => 'Visualizza Portfolio', /* Testo per visualizzare */
            'search_items' => 'Cerca Portfolio', /* Testo per la ricerca*/
            'not_found' =>  'Nessun Portfolio trovato', /* Testo per risultato non trovato */
            'not_found_in_trash' => 'Nessun portfolio trovato nel cestino', /* Testo per risultato non trovato nel cestino */
            'parent_item_colon' => ''
            ), /* Fine dell'array delle etichette */   
            'description' => 'Le pagine portfolio', /* Una breve descrizione del post type */
            'public' => true, /* Definisce se il post type sia visibile sia da front-end che da back-end */
            'publicly_queryable' => true, /* Definisce se possono essere fatte query da front-end */
            'exclude_from_search' => false, /* Definisce se questo post type ĆØ escluso dai risultati di ricerca */
            'show_ui' => true, /* Definisce se deve essere visualizzata l'interfaccia di default nel pannello di amministrazione */
            'query_var' => true,
            'menu_position' => 8, /* Definisce l'ordine in cui comparire nel menĆ¹ di amministrazione a sinistra */
            'menu_icon' => get_stylesheet_directory_uri() . '/inc/images/portfolio-32x32.png', /* Scegli l'icona da usare nel menĆ¹ per il posty type */
            'rewrite'   => array( 'slug' => 'portfolio/%portfolio_category%', 'with_front' => false ), /* Puoi specificare uno slug per gli URL */
            'has_archive' => 'true', /* Definisci se abilitare la generazione di un archivio (equivalente di archive-libri.php) */
            'capability_type' => 'post', /* Definisci se si comporterĆ  come un post o come una pagina */
            'hierarchical' => false, /* Definisci se potranno essere definiti elementi padri di altri */
            /* la riga successiva definisce quali elementi verranno visualizzati nella schermata di creazione del post */
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'sticky')
        ) /* fine delle opzioni */
    ); /* fine della registrazione */

} 

// Inizializzazione della funzione
add_action( 'init', 'portfolio_custom_post');

Come vedi, viene utilizzata la funzione “portfolio_custom_post()” per creare un nuovo formato di post, con le varie opzioni che vedi nel codice commentate.

Magicamente appare nell’admin una nuova voce “Portfolio” nel menu e potremo iniziare ad inserire articoli nel formato “portfolio”.

Come vedi nella label “rewrite”, lo slug ĆØ impostato cosƬ: “

portfolio/%portfolio_category%

Io infatti volevo che gli URL del mio portfolio fossero: /portfolio/categoriaPortfolio/paginaPortfolio. 

Per prima cosa avevo quindi bisogno di crearmi le categorie dedicate al portfolio,  per cui mi ĆØ servita un’altra funzione:

/* Create Portfolio Categories */

add_action( 'after_setup_theme', 'create_portfolio_taxonomies', 0 );
if (!function_exists('create_portfolio_taxonomies')) {
function create_portfolio_taxonomies() 
{
   $labels = array(
    'name' => __( 'Categorie Portfolio', 'taxonomy general name' ),
    'singular_name' => __( 'Categoria portfolio', 'taxonomy singular name' ),
    'search_items' =>  'Cerca categorie portfolio',
    'all_items' => 'Tutte le categorie portfolio',
    'parent_item' => 'Categoria portfolio genitore',
    'parent_item_colon' => 'Categoria portfolio genitore:',
    'edit_item' => 'Modifica categoria portfolio', 
    'update_item' => 'Aggiorna categoria portfolio',
    'add_new_item' => 'Aggiungi nuova categoria portfolio',
    'new_item_name' => 'Nome nuova categoria portfolio',
    'menu_name' =>  'Categorie portfolio',
  );     

  register_taxonomy('portfolio_category',array('portfolio_page'), array(
    'hierarchical' => true,
    'labels' => $labels,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'portfolio' ),
  ));

}
}

Il principio ĆØ identico alla funzione precedente, creo un array che conterrĆ  le categorie portfolio con le loro caratteristiche. In questo caso viene creata una “tassonomia”, cosa che ti spiegherĆ² nella prossima puntata del tutorial.

Infine per creare il giusto URL per le pagine portfolio, ho trovato questa utile funzione, dopo essermi spaccata la testa per trovare istruzioni sul MOD_REWRITE e sulla funzione wp_rewrite di WordPress. Mi hanno anche detto che modificare gli URL ĆØ una delle cose piĆ¹ complicate da fare, cofermo la cosa.

Bisognerebbe conoscere bene coem si configura il file .htaccess e le regole del mod_rewrite, cosa che ho cercato di capire, impiegandoci due giorni šŸ˜€ Te l’ho detto, sono solo una semplice web designer!

Comunque alla fine la mia necessitĆ  era piĆ¹ semplice del previsto, e mi ĆØ bastato utilizzare questa funzione, per estrapolarmi la categoria giusta da mettere nell’url dell’articolo portfolio:

add_filter( 'post_type_link', 'portfolio_type_link', 1, 3 );
function portfolio_type_link( $post_link, $id = 0 ){

  $post = get_post( $id );
  $post_type = 'portfolio_page';
  $taxonomy = 'portfolio_category';

  if( !is_object( $post ) || $post->post_type != $post_type )
    return $post_link;

  $slug = 'default';  // Slug per i portfolio che non hanno nessuna categoria portfolio impostata

  if( $terms = wp_get_object_terms( $post->ID, $taxonomy ) )
    $slug = $terms[0]->slug;

  return str_replace( '%'. $taxonomy .'%', $slug, $post_link );

}

Semplice vero?

Devo dire che una volta messe le mani nella creazione di tassonomie e categorie di post, la cosa ĆØ estremamente semplice. Qui si tocca veramente con mano la magia e potenza di WordPress!

Non ti resta che proseguire con la prossima puntata: “Assegnare template personalizzati ad un tema WordPress“, oppure rileggere la lezione precedente “Imparare LESS ed applicarlo ad un tema WordPress“.

Leggi anche

5/5 - (3 {voti})
Se ti piacciono i miei contenuti
Iscriviti alla Newsletter per ricevere gli aggiornamenti

Ti trovi qui: