Fork Your Your WordPress Taxonomy nel modo giusto

I tipi di post personalizzati e le tassonomie personalizzate sono stati uno dei nuovi trucchi più interessanti per gli sviluppatori di WordPress dal suo rilascio in WordPress versione 2.9. Tuttavia, utilizzarli può diventare un mal di testa anche per gli sviluppatori di WordPress più esperti senza conoscere qualche trucco in più. In questo articolo userò Twenty Eleven come esempio per darti consigli e trucchi per creare la tua tassonomia nel modo giusto.

Ecco il profilo di ciò che stiamo andando a coprire oggi. Utilizzeremo uno scenario ipotetico per illustrare alcuni accorgimenti importanti; Potresti non avere la stessa identica situazione, ma la soluzione alternativa dovrebbe applicarsi a molti grattacapi specifici della tassonomia come 404, problemi di impaginazione e elenchi di tassonomie non ricercabili.

  • Passaggio 1: creazione del tipo di post personalizzato
  • Passaggio 2: creazione delle nostre tassonomie del prodotto
  • Step 3: Init (iate) The Post Type and Taxonomies
  • Passaggio 4: creazione del file di tassonomia
  • Passaggio 5: chiama la query utilizzando pre_get_posts ()

Passaggio 1 Creazione del tipo di messaggio personalizzato

Per il nostro esempio, creeremo un tipo di messaggio personalizzato per la nostra lista di prodotti ipotetici; Avvia il tuo editor e crea un nuovo file chiamato, post-type.php; Quindi salva il file in una nuova cartella chiamata "include"Ecco il codice che aggiungeremo a quel file:

 function product_listing () $ labels = array ('name' => __ ('Property Listings', 'nome del tipo generico'), 'singular_name' => __ ('Elenco delle proprietà', 'nome del tipo singolare'), 'add_new' => _x ('Aggiungi nuovo', 'Elenco'), 'add_new_item' => __ ('Aggiungi nuovo elenco'), 'edit_item' => __ ('Modifica elenco'), 'new_item' => __ ('Nuovo elenco'), 'all_items' => __ ('Tutti gli elenchi'), 'view_item' => __ ('Visualizza elenco'), 'search_items' => __ ('Cerca elenchi'), 'not_found' = > __ ('Nessun elenco trovato'), 'not_found_in_trash' => __ ('Nessun elenco trovato nel cestino'), 'parent_item_colon' => ", 'menu_name' => 'Listings'); $ args = array ('etichette '=> $ labels,' public '=> true,' public_queryable '=> true,' show_ui '=> true,' show_in_menu '=> true,' query_var '=> true,' menu_position '=> 4,' capability_type '=>' post ',' hierarchical '=> false,' has_archive '=> true,' rewrite '=> array (' slug '=>' elenco ',' with_front '=> false), // Importante!' supporta '=> array (' title ',' editor ',' thumbnail ',' author '),' taxonomies '=> array ( 'product_feature', 'product_category'),); register_post_type ('listing', $ args); 

Cosa abbiamo fatto lì: abbiamo creato una funzione per un prodotto che verrà aggiunto al dentro azione in WordPress più tardi. $ etichetteè un array che contiene tutte le informazioni di cui abbiamo bisogno per creare un tipo di messaggio. Di seguito l'etichetta è una matrice di argomenti ($ args). La cosa importante da ricordare è l 'riscrivere'parte in cui definiamo il nostro slug che verrà usato come un permalink, per questo esempio useremo'listato'. In fondo abbiamo argomenti di tassonomia che contengono i nostri caratteristiche del prodotto e categoria di prodotto.

Una tecnica comune utilizzata da molti sviluppatori di WordPress consiste nell'escludere il tipo di post personalizzato dai risultati di ricerca con l'argomento di 'exclude_from_search' => true. Non lo faremo qui perché avremo bisogno di un archivio per la tassonomia del tipo di post in modo che le persone possano cercare il nostro prodotto. Per me, la regola qui è non usare 'exclude_from_search' => true quando registri il tuo tipo di messaggio pubblico; Se è necessario visualizzarlo in una pagina di archivio, lo si desidera includere nelle ricerche. Se volessimo escluderlo da ricerca sul blog, quindi dobbiamo escluderlo con una funzione personalizzata che esamineremo in seguito.


Passaggio 2 Creazione delle nostre tassonomie del prodotto

Come puoi vedere dal codice nel passaggio 1, dovremo registrare due tassonomie personalizzate per la nostra lista di prodotti. La prima sarà la funzionalità del prodotto e la seconda sarà la categoria di prodotto. Quindi iniziamo.

Abbiamo bisogno di aggiungere una nuova funzione dopo la funzione product_listing. Chiameremo questa funzione product_taxonomies. Di seguito è riportato il codice completo delle tassonomie:

 / ** * Aggiungi tassonomie personalizzate per l'elenco di prodotti * / function product_taxonomies () $ labels = array ('name' => __ ('Caratteristiche prodotto', 'nome generale della tassonomia'), 'singular_name' => __ ('Prodotto Feature ',' taxonomy singular name '),' search_items '=> __ (' Cerca caratteristiche prodotto '),' all_items '=> __ (' Tutte le caratteristiche prodotto '),' parent_item '=> __ (' Parent Product Feature ') ), 'parent_item_colon' => __ ('Parent Product Feature:'), 'edit_item' => __ ('Modifica Product Feature'), 'update_item' => __ ('Aggiorna Product Feature'), 'add_new_item' => __ ('Aggiungi nuova funzionalità prodotto'), 'new_item_name' => __ ('Nuova caratteristica prodotto'), 'menu_name' => __ ('Caratteristiche prodotto')); register_taxonomy ('product_feature', array ('listing'), array ('labels' => $ labels, 'hierarchical' => true, 'show_ui' => true, 'rewrite' => array ('slug' => ' product_feature '),' query_var '=> true,' show_in_nav_menus '=> true,' public '=> true)); $ labels = array ('name' => __ ('Categorie prodotto', 'nome generale tassonomia'), 'singluar_name' => __ ('Categoria prodotto', 'nome tassonomio singolare'), 'search_items' => __ ( 'Cerca categoria prodotto'), 'all_items' => __ ('Tutte le categorie di prodotti'), 'parent_item' => __ ('Parent Product Category'), 'parent_item_colon' => __ ('Parent Product Category:'), 'edit_item' => __ ('Modifica categoria prodotto'), 'update_item' => __ ('Aggiorna categoria prodotto'), 'add_new_item' => __ ('Aggiungi nuova categoria prodotto'), 'new_item_name' => __ ( 'Nuova categoria prodotto'), 'menu_name' => __ ('Categorie prodotto')); register_taxonomy ('product_category', array ('listing'), array ('labels' => $ labels, 'hierarchical' => true, 'show_ui' => true, 'rewrite' => array ('slug' => ' product_category '),' query_var '=> true,' show_in_nav_menus '=> true,' public '=> true)); 

Il product_taxonomies la funzione, mostrata sopra, registra due tassonomie personalizzate per noi. La cosa importante da notare qui è che l'argomento 'riscrittura' è lo stesso della riscrittura del tipo di post che abbiamo creato uno slug personalizzato nel passaggio 1. Questo diventerà l'url dei nostri archivi di tassonomia. Successivamente, abbiamo anche creato un argomento pubblico in modo che le persone possano sfogliare le nostre tassonomie.


Passaggio 3 Dentro(iate) The Post Type And Taxonomies

Ora usiamo il filtro add_actions per consentire a WordPress di eseguire le nostre funzioni.

 add_action ('init', 'product_listing', 0); add_action ('init', 'product_taxonomies', 10);

Presta attenzione all'ultimo argomento che passiamo al add_action filtro. Registriamo il tipo di annuncio della scheda di prodotto con la priorità di 0 e le tassonomie personalizzate per il tipo di messaggio stesso come 10. Questa è una cosa cruciale da notare: non registrare una tassonomia personalizzata con una priorità inferiore alla priorità per la registrazione del tipo di post associato. Questo è il problema principale che potrebbe causare un mal di testa; se la priorità della tassonomia è inferiore alla priorità del tipo di post, le cose si interromperanno poiché verrà utilizzato il valore predefinito di "10" per il tipo di post personalizzato se non si specifica diversamente.

Ora includiamolo nelle funzioni di Twenty Eleven. Apri il functions.php e scorri fino all'ultima riga e aggiungi questo codice qui sotto dopo le ventiquattro classi del corpo funzioni in modo che il tema possa eseguire il nostro codice del tipo di post.

 function twentyeleven_body_classes ($ classes) if (! is_multi_author ()) $ classes [] = 'single-author';  if (is_singular () &&! is_home () &&! is_page_template ('showcase.php') &&! is_page_template ('sidebar-page.php')) $ classes [] = 'singolare'; restituire $ classi;  add_filter ('body_class', 'twentyeleven_body_classes'); // questo è il nostro file include require_once ('/ includes / post-types.php');

Ora apri il tuo wp-admin e attiva il tema Twenty Eleven, se non lo hai già fatto, e vedrai che il tuo tipo di post personalizzato e la tassonomia sono stati aggiunti sotto il menu dei post.


Passaggio 4 Creazione del file di tassonomia

Ecco il passo importante se vuoi fare la tua tassonomia sfogliare-able. Innanzitutto, copia il Twenty Eleven archive.php file e rinominarlo in taxonomy.php. Quello che vogliamo fare con le nostre "tassonomie" è molto simile a quello che WordPress fa con "archive.php" e "file category.php"; Ecco perché non è necessario eseguire una query personalizzata su una pagina di archivio tassonomia / categoria / post_tag.

Nota: Quello che vedo oggi la maggior parte degli sviluppatori di temi WordPress è questo; Aggiungono la loro query personalizzata direttamente al file di tassonomia, che spesso interrompe l'impaginazione. Come possiamo aggirare questo? Facile amico mio, ti dirò il segreto per rendere la tua query personalizzata senza aggiungerla direttamente al taxonomy.php file:

Riempiamo il file di tassonomia con il nostro codice. Vai alla riga sotto il get_header () e inserisci il codice qui sotto.

 $ term = get_term_by ('slug', get_query_var ('term'), get_query_var ('tassonomia'));

Il get_term_by la funzione restituirà il valore dello slug specificato. Ricorda il 'rewrite' => array ('slug' => 'proprietà_funzione')? Questo è il valore dello slug che verrà restituito. Lo useremo per eco fuori la lumaca come titolo di tassonomia. Ora vai sulla riga in cui il tag h1 con il titolo della pagina della classe e scrivi il codice per chiamare il termine sotto.

 echo $ term-> nome;

Prova il codice

Torna al tuo pannello di amministrazione quindi vai alle caratteristiche del prodotto e alle categorie di prodotto. Creeremo alcune funzioni e categorie per i nostri prodotti. Chiamerò la mia caratteristica 1, 2, 3 e la categoria 1, 2, 3.

Successivamente creiamo una nuova lista di prodotti. Sotto il campo pubblicato vedrai la tassonomia personalizzata delle categorie e delle categorie che hai appena creato. Non dimenticare di controllarli. Ho creato 3 elenchi di prodotti, quindi controllo la categoria e la funzionalità per ciascuno di essi.

Per vedere come funziona la tua tassonomia, vai alla sezione Prodotto o Categoria prodotto e scorri fino alla categoria che hai creato e fai clic sul pulsante Visualizza come nella foto sopra. Se ti trovi nella pagina di errore 404, vai nel tuo wp-admin, vai su Impostazioni -> Permalink e premi save per far sì che WordPress svuoti le regole di riscrittura. Se hai qualcosa di simile all'immagine sopra, la tua tassonomia funziona già.

Si noti il ​​titolo della tassonomia sotto il menu è il termine che chiamiamo con il nome eco.

Creiamo un menu per accedere più facilmente agli archivi di tassonomia. Vai alla scheda menu e crea due menu, chiameremo il primo menu "Sfoglia per funzionalità" e il secondo menu "Sfoglia per categorie". Poiché abbiamo impostato il parametro 'show_in_nav_menus' => true, questo porterà la nostra tassonomia personalizzata alle opzioni del menu. Scegli tutte le funzioni per il menu "Sfoglia per funzionalità" e le categorie per il menu "Sfoglia per categorie".

Poi vai all'area dei widget e aggiungiamo i menu che abbiamo appena creato al widget del menu personalizzato.

Vai alla tua home page e fai clic su Aggiorna, vedrai il tuo widget tassonomia personalizzato. Ora crea più elenchi di prodotti segnaposto in modo da poter visualizzare l'impaginazione. Ho creato circa 8 schede e le ho assegnate alla funzione 1. Quindi imposta "Mostra pagine blog al massimo" in Impostazioni -> Lettura per mostrare solo 3 messaggi e vai alla pagina degli archivi di tassonomia per verificare se l'impaginazione funziona o meno. Whallah! L'impaginazione funziona bene nella navigazione di default di WordPress.

Proviamo con il famoso plugin di impaginazione di WordPress, il wp-PageNavi collegare. Dopo aver installato il plugin, vai al tuo taxonomy.php e trova la linea con twentyeleven_content_nav ('nav-above'); e twentyeleven_content_nav ('nav-below'); sostituire il codice con il wp_pagenavi () funzione come visto nel codice qui sotto.

 // twentyeleven_content_nav ('nav-above'); wp_pagenavi (); // twentyeleven_content_nav ('nav-below'); wp_pagenavi ();

Ora premi Aggiorna e puoi vedere che l'impaginazione wp_pagenavi funziona se stai seguendo le mie istruzioni.

Ciò non causa più mal di testa sulla paginazione, mentre il permalink non è il default.
Il passo successivo è la creazione della nostra query personalizzata per consentire al file di archivi di tassonomia di mostrare ciò che chiediamo.


Passaggio 5 Chiamare la query utilizzando pre_get_posts ()

Il pre_get_posts () il filtro è uno dei filtri più fantastici (a mio avviso!) Ci consente di creare un filtro post prima che il post venga chiamato. La maggior parte degli sviluppatori di temi WordPress utilizza raramente questa potente arma ... Tutti buoni amici! Carichiamo la nostra arma segreta con il codice. Accendi il tuo editor e apri il file Twenty Eleven functions.php.

Lo caricheremo con due funzioni alla fine del function.php sotto la nostra funzione required_once, il primo è di chiamare la nostra query personalizzata sulla tassonomia e il secondo è di escludere la nostra lista dalla ricerca. Ecco il codice per la prima funzione.

 add_action ('pre_get_posts', 'add_custom_taxonomy_query'); function add_custom_taxonomy_query (& $ query) if (! is_admin () && is_tax ('product_feature') || is_tax ('product_category')) $ query-> set ('orderby', 'date'); $ query-> set ('order', 'ASC'); $ query-> set ('posts_per_page', '1'); 

Il codice sopra eseguirà la query per entrambe le classificazioni product_feature e product_category per ordinare per data e ordine crescente e anche i post per pagina sono impostati su 1. Vai alla pagina dell'archivio di tassonomia quindi premi Aggiorna. Sìì! Hai appena visto la nostra arma segreta essere eseguita. Ora prova il tuo modulo di ricerca, scrivo "prodotto" nel modulo di ricerca e il risultato è che il mio prodotto appare ancora nella pagina dei risultati. Va bene! Rendiamolo invisibile nel risultato della ricerca.

 function search_filter ($ query) if (! is_admin ()) if ($ query-> is_search) $ query-> set ('post_type', array ('post', 'page'));  return $ query;  add_filter ('pre_get_posts', 'search_filter');

Aggiungi la funzione in alto al file functions.php quindi vai al tuo sito e prova a cercare il tuo prodotto. Yap! L'elenco dei prodotti è ora diventato invisibile. Per includere nella ricerca basta aggiungere "listing" alla serie di set di query dopo la "pagina".

 $ query-> set ('post_type', array ('post', 'page', 'listing'));

Conclusione

Va bene, questa è la fine del tutorial! Ti ho detto come gestire la pagina di errore di paginazione 404 e ti faccio sapere tre regole importanti per creare il tuo taxonomy.php file che sono:

  1. Non utilizzare 'exclude_from_search' => true quando si registra il tipo di messaggio pubblico, se è necessario visualizzarlo in una pagina di archivio.
  2. Non registrare la tassonomia personalizzata con priorità inferiore alla priorità per la registrazione del tipo di post associato.
  3. Non è necessario eseguire query personalizzate sulla pagina di tassonomia / categoria / post_tag, in quanto ciò interromperà la tua impaginazione.

Ti ho anche caricato con il mio pre_get_posts arma segreta per gestire tutte le domande senza rovinare l'impaginazione e altre cose che possono causare mal di testa. Il pre_get_posts il metodo stesso può ancora essere esteso con le tue opzioni tema. Goditi il ​​corso!