Creare uno shortcode per elencare i messaggi con più parametri

Su molti dei siti client che costruisco, trovo che ci sono momenti in cui ho bisogno di includere un elenco di post in una pagina. Non sto parlando di pagine di archivio qui, ma aggiungendo un elenco personalizzato a una pagina statica esistente.

Ad esempio, potrei voler elencare alcuni post sulla pagina "Informazioni", oppure il sito potrebbe richiedere una pagina approfondita per un argomento, con un elenco di post e tipi di post personalizzati relativi a quell'argomento.

Un modo per farlo è creare un modello di pagina personalizzato per includere il contenuto corrente della pagina più i risultati di una seconda query personalizzata, ma se vuoi maggiore flessibilità su come elencherai i post, o semplicemente vuoi farlo alcune volte, un shortcode sarà una soluzione più semplice.

In questo tutorial, ti mostrerò come creare un semplice shortcode per elencare tutti i post di un tipo di post personalizzato, quindi mi espanderò su questo per creare uno shortcode con vari parametri che gli utenti possono specificare per elencare i post come vogliono.


Cosa è necessario per completare questo tutorial

Avrai bisogno delle seguenti risorse:

  • Un'installazione di sviluppo di WordPress
  • Accedi alla tua cartella plugin in modo da poter creare e caricare il plugin shortcode

Troverai tutto il codice per creare questo plugin nel download del codice.


Introduzione: creazione del contenuto

Prima di impostare lo shortcode, devi registrare un tipo di post personalizzato e due tassonomie personalizzate, che utilizzeremo per testare lo shortcode.

Il codice per farlo è contenuto nel plugin che ho scritto per lo shortcode, anche se su un progetto live, ti consiglio di separarlo dallo stesso plugin shortcode.

Crea un nuovo file nella cartella dei plugin e chiamalo post-listing-shortcode.php.

Aggiungi il codice qui sotto al file.

Nota: La creazione di tipi di post personalizzati e tassonomie non è fondamentale per l'apprendimento da questo tutorial. Se lo desideri, puoi copiare questo codice dal file di download e saltare questa fase.

  "Vestiti", "singular_name" => "Articolo di abbigliamento", "add_new" => "Aggiungi nuovo", "add_new_item" => "Aggiungi nuovo elemento di abbigliamento", "edit_item" => "Modifica articolo di abbigliamento", "nuovo_item" => 'New Clothing Item', 'all_items' => 'All Clothes', 'view_item' => 'View Clothing Item', 'search_items' => 'Search Clothes', 'not_found' => 'No Clothes Found', 'not_found_in_trash' => 'Nessun oggetto trovato nel cestino', 'parent_item_colon' => ", 'menu_name' => 'Vestiti',); register_post_type ('clothes', array ('labels' => $ labels, 'has_archive' => true, 'public' => true, 'hierarchical' => true, 'supports' => array ('title', 'editor', 'excerpt', 'campi personalizzati', 'thumbnail', 'page- attributes '),' taxonomies '=> array (' post_tag ',' category '),' exclude_from_search '=> true,' capability_type '=>' post ',)) // registra due tassonomie per andare con il post digita add_action ('init', 'rmcc_create_taxonomies', 0); function rmcc_create_taxonomies () // taxonomy di colore $ labels = array ('name' => _x ('Colori', 'nome generale della tassonomia'), 'si ngular_name '=> _x (' Color ',' taxonomy singular name '),' search_items '=> __ (' Cerca colori '),' all_items '=> __ (' Tutti i colori '),' parent_item '=> __ ( 'Colore padre'), 'parent_item_colon' => __ ('Colore padre:'), 'edit_item' => __ ('Modifica colore'), 'update_item' => __ ('Aggiorna colore'), 'add_new_item' = > __ ('Aggiungi nuovo colore'), 'new_item_name' => __ ('Nuovo colore'), 'menu_name' => __ ('Colori'),); register_taxonomy ('color', 'clothes', array ('hierarchical' => true, 'labels' => $ labels, 'query_var' => true, 'rewrite' => true, 'show_admin_column' => true)); // fabric tassonomy $ labels = array ('name' => _x ('Fabrics', 'nome generale della tassonomia'), 'singular_name' => _x ('Fabric', 'taxonomy singular name'), 'search_items' => __ ('Search Fabrics'), 'all_items' => __ ('All Fabric'), 'parent_item' => __ ('Parent Fabric'), 'parent_item_colon' => __ ('Parent Fabric:'), 'edit_item '=> __ (' Modifica tessuto '),' update_item '=> __ (' Aggiorna tessuto '),' add_new_item '=> __ (' Aggiungi nuovo tessuto '),' new_item_name '=> __ (' Nuovo tessuto ') , 'menu_name' => __ ('Tessuti'),); register_taxonomy ('fabric', 'clothes', array ('hierarchical' => true, 'labels' => $ labels, 'query_var' => true, 'rewrite' => true, 'show_admin_column' => true)); ?>

Questo dice a WordPress del plugin e registra il tipo di post personalizzato "vestiti" e le due tassonomie, "colore" e "tessuto".

Salva questo plugin e attivalo tramite la pagina Plugin in WordPress.

Ora hai il tuo tipo di post personalizzato e le tassonomie in atto, crea alcuni post che li utilizzano. Nello screenshot qui sotto puoi vedere il contenuto che ho creato:


Creazione di uno Shortcode semplice dell'elenco

Se vuoi solo elencare il contenuto in un modo usando il tuo shortcode, puoi creare uno shortcode molto semplice che non usa parametri.

Apri di nuovo il file del plugin e aggiungi quanto segue:

 // crea uno shortcode per elencare tutti i vestiti che vengono in blu add_shortcode ('list-posts-basic', 'rmcc_post_listing_shortcode1'); function rmcc_post_listing_shortcode1 ($ atts) ob_start (); $ query = new WP_Query (array ('post_type' => 'clothes', 'color' => 'blue', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'title ',)); if ($ query-> have_posts ()) ?> 
    have_posts ()): $ query-> the_post (); ?>
  • > ">

Questo crea un semplice shortcode, usando WP_Query per eseguire una query personalizzata sul contenuto e generare i risultati in un elenco. Quando scrivo [list-messaggi-base] in una pagina i risultati sono come mostrato in questo screenshot:


Aggiunta di alcuni parametri per modificare la query

Lo shortcode sarà molto più utile se gli utenti possono aggiungere i propri parametri, scegliendo ad esempio:

  • Quanti post elencare
  • Quale tipo di post interrogare
  • Categorie da includere
  • Tessuti e colori da includere
  • Parametri di ordinazione

Per aggiungere questo allo shortcode, fai uso di shortcode_atts () funzione, che consente di specificare alcuni attributi predefiniti che gli utenti possono ignorare.

Ancora una volta nel file del plugin e sotto il codice per il primo shortcode, aggiungere quanto segue:

 // crea uno shortcode con parametri in modo che l'utente possa definire cosa viene interrogato - l'impostazione predefinita è elencare tutti i post del blog add_shortcode ('list-posts', 'rmcc_post_listing_parameters_shortcode'); function rmcc_post_listing_parameters_shortcode ($ atts) ob_start (); // define attributes e loro default (shortcode_atts (array ('type' => 'post', 'order' => 'date', 'orderby' => 'title', 'posts' => -1, 'color '=> ",' fabric '=>",' category '=> ",), $ atts)); // definisce i parametri di una query in base agli attributi $ options = array (' post_type '=> $ type,' order ' => $ order, 'orderby' => $ orderby, 'posts_per_page' => $ posts, 'color' => $ color, 'fabric' => $ fabric, 'category_name' => $ category,); $ query = nuovo WP_Query ($ opzioni); // esegue il ciclo in base alla query if ($ query-> have_posts ()) ?> 
    • >

Nota: utilizzando ob_start () e ob_get_clean () assicura che il loop venga emesso nella posizione nella tua pagina o che tu abbia aggiunto lo shortcode. Se non li aggiungi, l'elenco verrà visualizzato nella parte superiore del contenuto.

Per impostazione predefinita questo elenca tutti i messaggi in ordine decrescente di data, quindi se si digita [list-post] in una pagina o in un post, il risultato è come in questo screenshot:

Tuttavia, se aggiungi alcuni parametri le cose diventano più interessanti. Ad esempio, per elencare tutti i vestiti che vengono nel colore nero, digito [list-posts type = "clothes" color = "black" orderby = "nome" order = "ASC"]:

O per elencare tutti i vestiti nella categoria "intelligente" che digito [list-posts type = "clothes" category = "smart" orderby = "nome" order = "ASC"]:

Se è necessario, è possibile specificare più attributi con cui gli utenti possono lavorare, ma è necessario includere tutti quelli disponibili nel proprio plugin, nel extract (shortcode_atts)) funzione.

Non è necessario specificare un valore predefinito per tutti, ad esempio, ho lasciato i parametri di categoria e tassonomia vuoti nell'esempio. I parametri che puoi definire sono quelli per cui è possibile specificare WP_Query - per un elenco completo, vedere la relativa pagina del codice.


Sommario

Essere in grado di inserire un post in una pagina o in un post può essere molto utile. Ti risparmia di dover modificare i tuoi file modello o scrivere un modello di pagina personalizzato.

Lo shortcode che hai imparato a creare in questo plug-in potrebbe essere utilizzato in molti modi e, naturalmente, potresti facilmente modificare ciò che viene generato dallo shortcode: il mio esempio genera un elenco puntato con i titoli dei post inclusi in un link alla loro pagina, ma è possibile sostituire il codice all'interno del ciclo con i tag del modello per visualizzare il contenuto, le immagini presentate o qualsiasi altra cosa.


risorse

Alcune risorse utili sugli argomenti trattati sopra:

  • L'API Shortcode
  • Attributi shortcode
  • Parametri WP_Query