Fox Taxonomia ta WordPress Calea cea bună

Tipurile personalizate de posturi și taxonomiile personalizate au fost unul dintre cele mai interesante trucuri noi pentru dezvoltatorii WordPress de la lansarea sa în WordPress versiunea 2.9. Cu toate acestea, utilizarea acestora poate deveni o durere de cap pentru cei mai experimentați dezvoltatori de WordPress, fără să știe câteva trucuri suplimentare. În acest articol voi folosi Twenty Eleven ca exemplu pentru a vă oferi sfaturi și trucuri pentru a vă crea propria taxonomie în mod corect.

Iată conturul a ceea ce vom acoperi astăzi. Vom folosi un scenariu ipotetic pentru a ilustra câteva soluții importante; S-ar putea să nu aveți exact aceeași situație, dar soluția ar trebui să se aplice la o mulțime de dureri de cap specifice taxonomiei, cum ar fi 404, probleme de paginare și lista de taxonomii care nu pot fi căutate.

  • Pasul 1: Crearea tipului de mesaj personalizat
  • Pasul 2: Crearea taxonomiilor produselor noastre
  • Pasul 3: Inițializarea tipului postului și a taxonomiilor
  • Pasul 4: Crearea fișierului de taxonomie
  • Pasul 5: Apelați interogarea utilizând pre_get_posts ()

Pasul 1 Crearea tipului dvs. de post particularizat

Pentru exemplul nostru, vom crea un tip de articol personalizat pentru lista noastră de produse ipotetice; Activați editorul și creați un fișier nou numit, post-type.php; Apoi salvați fișierul într-un folder nou numit "include"Iată codul pe care îl vom adăuga la acel fișier:

 funcția product_listing () $ labels = array ('name' => __ ('Listing listings', 'post type general name'), 'singular_name' 'add_new' => _x ('Adăugați noi', 'Listing'), 'add_new_item' => __ ('Adăugați o nouă listă'), 'edit_item' => __ ('Listing Listing'), 'all_items' => __ ('Toate Listările'), 'view_item' => > __ ('Nu există anunțuri găsite'), 'not_found_in_trash' => __ ('Nici o listă nu a fost găsită în coșul de gunoi'), 'parent_item_colon' => ',' menu_name '=> '=> true,' public_query '=> true,' show_ui '=> true,' show_in_menu '=> true,' query_var '=> true,' menu_position '=> '=>' post ',' hierarchical '=> false,' has_archive '=> true,' rewrite '=> array (' slug '=>' listing ',' with_front '=> false); suporta '=> array (' title ',' editor ',' thumbnail ',' author '),' taxonomies '=> 'product_feature', 'product_category'),); register_post_type ("lista", $ args); 

Ce am făcut acolo: am creat o funcție pentru un produs care va fi adăugat la init acțiune în WordPress mai târziu. $ eticheteeste o matrice care conține toate informațiile de care avem nevoie pentru a crea un tip de postare. În continuare, eticheta este o serie de argumente ($ args). Lucrul important de reținut este "rescrie'unde definim slugul nostru care va fi folosit ca permalink, pentru acest exemplu vom folosi'listare“. În partea de jos avem argumente de taxonomie care conțin conținutul nostru product_feature și Categorie produs.

O tehnică comună pe care mulți dezvoltatori WordPress o folosesc este de a exclude tipul de post personalizat din rezultatele căutării cu argumentul 'exclude_from_search' => true. Nu vom face asta aici pentru că vom avea nevoie de o arhivă pentru taxonomia tip post, astfel încât oamenii să poată căuta produsul nostru. Pentru mine, regula este aici nu utilizați 'exclude_from_search' => true la înregistrarea tipului de post public; Dacă aveți nevoie să îl afișați într-o pagină de arhivă, doriți să fie inclus în căutări. Dacă vrem să excludem căutare pe blog, atunci trebuie să o excludem printr-o funcție personalizată pe care o vom trece mai târziu.


Pasul 2 Crearea taxonomiilor produselor noastre

După cum puteți vedea din codul din pasul 1, va trebui să înregistrați două taxonomii personalizate pentru lista noastră de produse. Prima va fi caracteristica produsului și a doua va fi categoria de produse. Deci sa începem.

Trebuie să adăugăm o nouă funcție după funcția product_listing. Vom numi această funcție product_taxonomies. Codul complet al taxonomiilor poate fi văzut mai jos:

 / ** * Adăugați taxonomii personalizate pentru listarea produselor * / funcția product_taxonomies () $ labels = array ('name' => __ ('Product Features', 'taxonomy general name' ("Caracteristica produsului principal"), "search_items" => __ ("Caracteristicile produsului"), "all_items" ), 'update_item' => __ ('Update Feature Feature'), 'add_new_item' => __ ("Adăugați o nouă caracteristică a produsului"), "new_item_name" => __ ("Caracteristică nouă a produsului"), "nume_menu" => __ ("Caracteristicile produsului")); (de exemplu, '', '', '', '' '', ' product_feature '),' query_var '=> true,' show_in_nav_menus '=> true,' public '=> true)); $ labels = array ('nume' => __ ('Categorii de produse', 'taxonomie generală nume'), 'singluar_name' => "Categoria produselor părinte"), "all_items" => __ ("Toate categoriile de produse"), "parent_item" => 'add_new_item' => __ ('Adăugare Categorie de Produs Nou'), 'new_item_name' => __ ('Edit_item' => "Categoria de produse noi"), "nume_menu" => __ ("Categorii de produse")); (de exemplu, '', '', '', '' '', ' product_category '),' query_var '=> true,' show_in_nav_menus '=> true,' public '=> true)); 

product_taxonomies funcția, prezentată mai sus, înregistrează două taxonomii personalizate pentru noi. Lucrul important pe care trebuie să-l reținem aici este că argumentul "rescrie" este același cu tipul de rescriere de tip post, pe care l-am creat pentru pasul 1. Acesta va deveni urlul pentru arhivele noastre de taxonomie. Apoi, am creat și un argument public, astfel încât oamenii să poată naviga în taxonomiile noastre.


Pasul 3 init(iate) Tipul mesajelor și taxonomiile

Acum, să folosim filtrul add_actions pentru a permite WordPress să execute funcțiile noastre.

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

Fiți atenți la ultimul argument pe care îl vom trece la ADD_ACTION filtru. Înregistram tipul de postare a listei de produse cu prioritatea de 0 și taxonomiile personalizate pentru tipul de post în sine ca 10. Acesta este un lucru crucial: nu înregistrați o taxonomie personalizată cu o prioritate mai mică decât prioritatea pentru înregistrarea tipului de post asociat. Aceasta este problema principală care vă poate provoca dureri de cap; dacă prioritatea taxonomiei dvs. este mai mică decât prioritatea tip post, lucrurile se vor rupe, deoarece implicit pentru "10" va fi folosit pentru tipul de post personalizat dacă nu specificați altfel.

Acum, să o includem în funcțiile celor douăzeci și unsprezece. Deschideți functions.php și defilați la ultima linie și adăugați acest cod de mai jos după ce clasele de douăzeci și unu de clase funcționează, astfel încât tema să poată executa codul nostru de tip post.

 funcția twentyeleven_body_classes ($ classes) if (! is_multi_author ()) $ classes [] = 'un singur autor';  dacă is_singular () &&! is_home () &&! is_page_template ('showcase.php') &&! is_page_template ('sidebar-page.php') $ classes [] = 'singular'; returnează clase de $;  add_filter ('body_class', 'twentyeleven_body_classes'); // aceasta este fișierul include include_once ('/ include / post-types.php');

Acum deschideți wp-admin-ul și activați tema Twenty Eleven, dacă nu ați făcut-o deja, și veți vedea tipul dvs. de post personalizat și taxonomia a fost adăugată sub meniul postărilor.


Pasul 4 Crearea fișierului de taxonomie

Iată pasul important dacă doriți să vă faceți taxonomia răsfoiți-capabil. În primul rând, copiați cele douăzeci și unsprezece archive.php fișier și redenumiți-l la taxonomy.php. Ceea ce vrem să facem cu "taxonomiile" noastre este foarte similar cu ceea ce face WordPress cu "archive.php" și "category.php file"; De aceea nu este nevoie să rulați o interogare personalizată pe o pagină de arhivă taxonomy / category / post_tag.

Notă: Ceea ce văd cel mai mult dezvoltatorii de tematici WordPress în zilele noastre este acest lucru; Ei adaugă interogarea personalizată direct în fișierul de taxonomie, care deseori întrerupe paginarea. Cum putem face acest lucru? Ușor prietenii mei, vă voi spune secretul de a vă face interogarea personalizată fără a adăuga direct la taxonomy.php fişier:

Să umplem dosarul de taxonomie cu codul nostru. Accesați linia de sub elementul get_header () și introduceți codul de mai jos.

 $ term = get_term_by ("slug", get_query_var ("termen"), get_query_var ("taxonomie"));

get_term_by funcția va reveni la valoarea blocului pe care îl specificăm. Amintiți-vă 'rescrie' => array ('slug' => 'property_feature')? Aceasta este valoarea sticlei care va fi returnată. Vom folosi asta ecou ca pe titlul de taxonomie. Acum du-te la linia unde tag-ul h1 cu titlu de pagină de clasă și scrie codul pentru a apela termenul de mai jos.

 echo $ term-> nume;

Testați codul

Întoarceți-vă la panoul de administrare, apoi accesați caracteristicile produsului și categoriile de produse. Vom crea cateva caracteristici si categorii pentru produsele noastre. Voi numi caracteristica mea 1, 2, 3 și categoriile 1, 2, 3.

Apoi vom crea o nouă listă de produse. Sub câmpul publicat veți vedea taxonomia personalizată a categoriei personale și a categoriei pe care tocmai ați creat-o. Nu uitați să le verificați. Am creat 3 înregistrări de produse, așa că am verificat categoria și caracteristicile pentru fiecare dintre ele.

Pentru a vedea modul în care funcționează taxonomia, accesați funcția Produs sau Categoria de produse și defilați la categoria pe care ați creat-o și faceți clic pe butonul de vizualizare așa cum se vede în imaginea de mai sus. Dacă sunteți îndreptat spre pagina de eroare 404, mergeți în wp-admin, mergeți la Settings -> Permalinks și salvați pentru a face WordPress să elimine regulile de rescriere. Dacă ai ceva asemănător cu imaginea de mai sus, taxonomia ta funcționează deja.

Observați că titlul taxonomiei de sub meniu este numele termenului pe care îl apelăm cu ecou.

Să creăm un meniu pentru a avea acces mai ușor la arhivele taxonomice. Accesați fila meniu și creați două meniuri, vom apela primul meniu "Căutați după caracteristici" și al doilea meniu "Răsfoiți după categorii". Deoarece am setat parametrul 'show_in_nav_menus' => true, acest lucru va aduce taxonomia noastră personalizată la opțiunile de meniu. Alegeți toate funcțiile pentru meniul și categoriile "Căutați după caracteristici" pentru meniul "Căutați după categorii".

Înainte de a merge la zona widget-uri și să adăugăm meniurile pe care tocmai le-am creat în widget-ul meniului personalizat.

Du-te la pagina dvs. de pornire și apăsați refresh, veți vedea widget personalizat taxonomie. Acum creați mai multe liste de produse cu substituenți pentru a putea apărea paginarea. Am creat aproximativ 8 înregistrări și le-am atribuit funcției 1. Apoi setați "Paginile blogului să arate cel mult" din Setări -> Citire pentru a afișa numai 3 posturi și accesați pagina arhivelor taxonomice pentru a testa dacă paginarea funcționează sau nu. Whallah! Paginarea funcționează bine în navigarea implicită WordPress.

Să o testați cu faimosul plugin de paginare WordPress wp-PageNavi conecteaza. După ce ați instalat plugin-ul, mergeți la dvs. taxonomy.php și găsiți linia cu twentyeleven_content_nav ("nav-deasupra"); și twentyeleven_content_nav ("nav-jos"); înlocuiți codul cu wp_pagenavi () funcție cum se vede în codul de mai jos.

 // twentyeleven_content_nav ("nav-deasupra"); wp_pagenavi (); // twentyeleven_content_nav ("nav-jos"); wp_pagenavi ();

Apăsați repetat și puteți vedea că paginarea wp_pagenavi funcționează dacă urmați instrucțiunile mele.

Acest lucru nu cauzează mai mult dureri de cap la paginare în timp ce permalink nu este implicit.
Următorul pas este crearea interogării personalizate pentru a permite fișierului arhivelor de taxonomie să arate ceea ce cerem.


Pasul 5 Apelați interogarea folosind pre_get_posts ()

pre_get_posts () filtrul este unul dintre cele mai minunate filtre (în opinia mea!) Ne permite să creăm un filtru post înainte de a fi sunat postul. Cei mai mulți dezvoltatori temă WordPress rareori folosesc această armă puternică ... Bine! Să ne încarcăm arma secretă cu codul. Activați editorul și deschideți fișierul Twenty Eleven functions.php.

O vom încărca cu două funcții în capătul funcțiilor.php sub funcția noastră required_once, prima este aceea de a apela interogarea noastră personalizată pe taxonomie, iar cea de-a doua este de a exclude înregistrarea noastră de la căutare. Iată codul pentru prima funcție.

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

Codul de mai sus va executa interogarea pentru taxonomiile product_feature și product_category la ordinea după dată și ordinea ascendentă și, de asemenea, postările pe pagină sunt setate la 1. Du-te la pagina dvs. de arhivă taxonomie, apoi apăsați refresh. Ura! Tocmai ai văzut armă secretă care a fost executată. Acum, testați formularul de căutare, introduc "produs" în formularul de căutare și rezultatul este că produsul meu mai apare în pagina de rezultate. Bine! Să facem acest lucru invizibil în rezultatul căutării.

 funcția search_filter ($ query) if (! is_admin ()) if ($ query-> is_search) $ query-> set ('post_type', array ('post';  returnează $ query;  add_filter ('pre_get_posts', 'search_filter');

Adăugați funcția de mai sus în fișierul functions.php, apoi mergeți la site-ul dvs. și încercați să căutați produsul. Yap! Lista de produse a devenit acum invizibilă. Pentru a include în căutare doar adăugați 'listing' în matricea setului de interogări după 'pagina'.

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

Concluzie

În regulă, acesta este sfârșitul tutorialului! V-am spus cum să faceți față paginii de eroare 404 de paginare și să vă informați despre trei reguli importante pentru a vă crea taxonomy.php fișier care sunt:

  1. Nu utilizați 'exclude_from_search' => adevărat la înregistrarea tipului de post public, dacă aveți nevoie să îl afișați într-o pagină de arhivă.
  2. Nu înregistrați taxonomia personalizată cu prioritate mai mică decât prioritatea pentru înregistrarea tipului de post asociat.
  3. Nu este nevoie să rulați interogarea personalizată pe pagina de arhivă taxonomy / category / post_tag, deoarece aceasta vă va rupe paginarea.

Și eu te-am încărcat cu mine pre_get_posts arma secrete pentru a face față tuturor întrebărilor fără a distruge paginarea și alte lucruri care pot provoca dureri de cap. pre_get_posts metoda însăși poate fi extinsă cu propriile opțiuni tematice. Bucurați-vă de curs!

Cod