Bridge by Qode – Tuning #3 – Usare i Custom Post Type n.1

Premessa: questo non è un post di affiliazione

 

Il miglior modo per sfruttare le potenzialità del cms WordPress è usare i CPT, cioè i Custom Post Type.

Non mi dilungo su cosa sono e cosa permettono di fare. È sufficiente scrivere che – a mio avviso – rappresentano la più lungimirante feature introdotta fin dalla versione 2.9 del Dicembre 2009.

Bridge utilizza diversi CPT di default:

  • portfolio, per cui è possibile personalizzare lo slug tramite le opzioni del template;
  • testimonials;
  • slider e carousel;
  • masonry gallery;
  • altri.


Però… a mio avviso sempre resta un problema che affligge quasi ogni installazione di WordPress: la struttura dei link è un po’ deficitaria.

Un esempio: cosa si deve fare per avere un link con slug /blog solo per gli articoli, e con altri slug per altri cpt?

Qui arrivano i grattacapi, risolvibili tramite un po’ di customizzazione. Usando plugin oppure un po’ di php.

Partiamo da questo assunto: installato wordpress, fatto un primo setup del server e dei moduli, impostiamo i contenuti.Da un lato i post del blog, dall’altro i post del tipo portfolio.

Per i primi l’url dovrà avere una forma di questo tipo:

https://miosito.it/blog/mese/giorno/titolo-articolo-1

Per i secondi:https://miosito.it/portfolio/titolo-progetto-1

Come fare?
Per queste impostazioni, la mia soluzione è la seguente.

Step 1: modificare i Permalinks

Impostazioni > Permalinks: aggiungere /blog/ e altri slug a vostro piacimento.

Step 2: installare Custom Post Type Permalinks

Questo modulo permette di razionalizzare un po’ la struttura dei permalink fornita da WordPress. Quindi, su Impostazioni > Permalink è possibile visualizzare le opzioni che tale modulo aggiunge alle impostazioni di default.

Il plugin riconosce il tipo di CPT attivi nel template o inseriti “a mano” tramite functions.php e ne mostra le caratteristiche, per esempio:
has_archive: true / with_front: false indica che il tipo di CPT attivo gestisce un archivio dei post e non integra lo slug di default, nella fattispecie /blog/.

In questo caso, lo slug/portfolio/, oltre a doverlo specificare nelle impostazioni del template, viene mantenuto grazie al plugin, quindi la struttura del link risulterà più seo friendly possibile.

Step 3: specificare lo slug nelle opzioni del template

Questo è ciò che dovrà essere impostato qui: Qode Options > Portfolio > Portfolio Single Slug > “portfolio”

Step 4: modifica al functions.php

A questo punto, manca un ultimo passaggio.

Come specificato in questo thread, c’è da far eseguire al nostro cms una istruzione aggiuntiva.

portfolio-page è un CPT registrato che, però, difetta di una caratteristica.

Come spiegato nella guida per sviluppatori, la funzione register_post_type accetta due argomenti, il primo è il nome del CPT, l’altro è un array di valori.

Tra questi, il valore with_front permette di specificare se differenziare o meno il permalink rispetto alla struttura originale. Nel nostro esempio sopra, la struttura di link è stata modificata per avere questa struttura di base:

https://miosito.it/blog/il-resto-del-link.

Il CPT portfolio-page è stato registrato senza alcun valore di with_front, per cui è da modificare come segue, aggiungendo i seguenti snippet nel file functions.php del tema attivo.

Il primo snippet in sostanza dice a wordpress di togliere /blog/ dagli url relativi ai post di tipo portfolio.

add_filter('register_post_type_args', function($args, $post_type)
{if('portfolio_page' === $post_type && is_array( $args ) )
$args['rewrite']['with_front'] = false;
return $args;}, 99, 2 );

Il secondo snippet di codice dice a wordpress di fare lo stesso con gli url delle categorie dei post di tipo portfolio.

add_filter('register_taxonomy_args', function( $args, $taxonomy)
{if('portfolio_category' === $taxonomy && is_array( $args ))
$args['rewrite']['with_front'] = false;
return $args;}, 99, 2 );


Con questa piccola modifica è possibile ottenere una struttura di link più ordinata e più congeniale per la lettura dei link da parte dei bot. Semplice, no? 😉