Come creare Collezioni di Contenuti su WordPress

Contenuto1 CMB2 e Moduli2 Configurazione di CMB23 Visualizzazione del contenuto Su WordPress potrebbe esservi necessario creare delle collezioni di contenuti, che potrebbero essere raccolte di articoli o pagine, per esempio. […]

Avatar di gbfactory
gbfactory 16 Luglio 2020

Su WordPress potrebbe esservi necessario creare delle collezioni di contenuti, che potrebbero essere raccolte di articoli o pagine, per esempio.

Ho scoperto questo metodo mentre cercavo una soluzione per realizzare la sezione guide di questo sito. Inizialmente avevo provato a gestire tutto con le tassonomie (categorie) di un Custom Post Type, ma il risultato finale era difficile da gestire e confusionario.

Il metodo scoperto dopo alcune ricerche, consiste nel collegare uno o più articoli ad un altro articolo. Ma su WordPress non esiste una funzione simile, quindi bisogna ricorrere ad alcuni plugin.

CMB2 e Moduli

CMB2 (Custom Meta Boxes 2) è un plugin gratuito e open source che consente di aggiungere custom fields o meta boxes gestibili da comode interfacce utente. Se conoscete già Advanced Custom Fields, è simile, solo che completamente gratuito e più modulare.

Una volta installato CMB2, non vedrete nessun cambiamento, dato che il plugin è solamente un toolkit per sviluppatori e necessita di altri plugin (moduli) per fare cose. Il modulo di cui abbiamo bisogno si chiama CMB2 Attached Posts Field, che come suggerisce il nome, ha il compito di collegare un post ad un altro post.

Finita la configurazione che vedremo come fare in questo articolo, avrete questa interfaccia con due colonne:

Basta spostare un elemento dalla colonna di sinistra a quella di destra per collegarlo a quel post. Ora possiamo collegare qualsiasi tipo di post come articoli o pagine ad un altro articolo.

Configurazione di CMB2

Prima di poter ottenere quell'interfaccia che abbiamo appena visto, non ci basterà installare i due plugin, ma sarà necessario anche un po' di codice per dire a CMB2 che meta box creare e dove mostrarle.

In questo sito, le Guide sono un tipo di post personalizzato a cui vengono collegati gli altri articoli. Creare un tipo di post è veramente molto semplice:

register_post_type( 'guide',
  array(
    'labels'        => array(
      'name'          => __( 'Guide' ),
      'singular_name' => __( 'Guida' ),
      'add_new'       => __( 'Aggiungi Guida' ),
      'add_new_item'  => __( 'Aggiungi nuova Guida' ),
      'edit_item'     => __( 'Modifica Guida' )
    ),
    'public'      => true,
    'has_archive' => true,
    'supports'    => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    'rewrite'     => array( 'slug' => 'guide' )
  )
);

Ora dobbiamo creare una nuova meta box ed applicarla solo al tipo di post personalizzato che desideriamo in modo da non vederla ovunque:

$cmb = new_cmb2_box( array(
  'id'            => 'cmb2_attached_posts_field',
  'title'         => __( 'Attached Posts', 'cmb2' ),
  'object_types'  => array( 'guide', ), // Post type
  'context'       => 'normal',
  'priority'      => 'high',
  'show_names'    => true, // Show field names on the left
) );

$cmb->add_field( array(
  'name'       => __( 'Attached Posts', 'cmb2' ),
  'id'         => 'attached_cmb2_attached_posts',
  'type'       => 'custom_attached_posts',
  'column'  => true, // Output in the admin post-listing as a custom column. https://github.com/CMB2/CMB2/wiki/Field-Parameters#column
  'options' => array(
    'show_thumbnails' => true, // Show thumbnails on the left
    'filter_boxes'    => true, // Show a text box for filtering the results
      'query_args'      => array(
        'posts_per_page' => 10,
        'post_type' => array('post', 'page')
      ), // override the get_posts args
  ),
) );

Il codice qui sopra è una semplice rielaborazione del codice di esempio che CMB2 mette a disposizione.

Consiglio di mettere questo codice all'interno di un plugin piuttosto che nel file functions.php, così il cambio del tema non ha effetti sul contenuto del sito.

Visualizzazione del contenuto

Dato che abbiamo registrato un tipo di post personalizzato per le guide, ora possiamo creare un file chiamato single-guide.php nella directory del nostro tema che verrà utilizzato per la visualizzazione di un articolo del tipo guide, sovrascrivendo il single.php.

All'interno di quel file, con del codice, ci sarà possibile mostrare tutti i post collegati a quell'articolo.

$attached = get_post_meta(get_the_ID(), 'attached_cmb2_attached_posts', true);

foreach ($attached as $attachedPost) {
  $post = get_post($attachedPost);

  echo '<a href="' . the_permalink() . '">' . the_title() . '</a>';

}

A questo punto possiamo creare un articolo della tipologia Guide e collegare ad esso altro contenuto, che verrà visualizzato.