Egendefinerte innleggstyper og egendefinerte taksonomier har vært et av de mest spennende nye triksene for WordPress-utviklere siden det ble utgitt i WordPress versjon 2.9. Imidlertid kan bruk av dem bli hodepine for selv de mest erfarne WordPress-utviklerne uten å vite noen ekstra triks. I denne artikkelen vil jeg bruke tjue elleve som et eksempel for å gi deg tips og triks for å lage din egen taksonomi på den riktige måten.
Her er oversikten over hva vi skal dekke i dag. Vi vil bruke et hypotetisk scenario for å illustrere noen viktige løsninger. Du har kanskje ikke nøyaktig samme situasjon, men løsningen bør gjelde for mange taksonomiske spesifikke hodepine som 404-tall, paginering problemer og ikke-søkbare taksonomi oppføringer.
For vårt eksempel vil vi opprette en tilpasset posttype for vår hypotetiske produktoppføring; Brann opp redaktøren din og opprett en ny fil som heter, post-type.php; Lagre filen i en ny mappe som heter "inkluderer". Her er koden som vi legger til den filen:
Funksjon product_listing () $ labels = array ('name' => __ ('Eiendomsoppføringer', 'posttype generell navn'), 'singular_name' => __ ('Eiendomsoppføring', 'Posttype Singular Name'), 'add_new' => _x ('Add New', 'Listing'), 'add_new_item' => __ ('Legg til ny oppføring'), 'edit_item' => __ ('Rediger liste'), 'new_item' => __ ('Ny oppføring'), 'all_items' => __ ('Alle oppføringer'), 'view_item' => __ ('Vis liste'), 'search_items' => __ ('Søkeoppføringer'), 'not_found' = > __ ('Ingen oppføringer funnet'), 'not_found_in_trash' => __ ('Ingen oppføringer funnet i søppel'), 'parent_item_colon' => ", 'menu_name' => 'Oppføringer'); $ args = array '=> $ etiketter,' public '=> sant,' publicly_queryable '=> sant,' show_ui '=> sant,' show_in_menu '=> true,' query_var '=> true,' menu_position '=> 4,' capability_type '=>' post ',' hierarkisk '=> false,' has_archive '=> sant,' rewrite '=> array (' slug '=>' notering ',' with_front '=> false), // Viktig!' støtter '=> array (' title ',' editor ',' miniatyrbilde ',' forfatter '),' taxonomies '=> array 'product_feature', 'product_category'),); register_post_type ('listing', $ args);
Hva vi gjorde der: Vi opprettet en funksjon for et produkt som vil bli lagt til i det handling i WordPress senere. $ etiketterer en matrise som inneholder all informasjon vi trenger for å lage en posttype. Neste under er etiketten en rekke argumenter ($ args). Det viktige å huske er "omskrive'del der vi definerer vår slug som vil bli brukt som permalink, for dette eksempelet bruker vi'oppføring'. På bunnen har vi taksonomiargumenter som inneholder vår Produktfunksjon og produktkategori.
En vanlig teknikk som mange WordPress-utviklere bruker, er å ekskludere den egendefinerte innleggstypen fra søkeresultatene med argumentet til 'exclude_from_search' => true. Vi skal ikke gjøre det her, fordi vi trenger et arkiv for posttypegratonomien, slik at folk kan bla gjennom vårt produkt. For meg er regelen her ikke bruk 'exclude_from_search' => true når du registrerer din offentlige posttype; Hvis du trenger å vise den på en arkivside, vil du ha den inkludert i søk. Hvis vi ønsket å ekskludere det fra blogg søk, da må vi utelukke det med en tilpasset funksjon vi skal gå over senere.
Som du kan se fra koden i trinn 1, må vi registrere to egendefinerte taksonomier for produktoppføringen. Først blir produktfunksjonen og andre blir produktkategori. Så la oss komme i gang.
Vi må legge til en ny funksjon etter produkt_listingsfunksjonen. Vi vil ringe denne funksjonen product_taxonomies. Den fullstendige taxonomikoden kan sees nedenfor:
/ ** * Legg til egendefinerte taksonomier for produktoppføring * / funksjon product_taxonomies () $ labels = array ('name' => __ ('Produktegenskaper', 'taxonomy generell navn'), 'singular_name' => __ Feature ',' Taxonomy singular name '),' search_items '=> __ (' Søk produktfunksjoner '),' all_items '=> __ (' Alle produktfunksjoner '),' parent_item '=> __ (' Parent Product Feature ' ), 'parent_item_colon' => __ ('Parent Product Feature:'), 'edit_item' => __ ('Rediger produktfunksjon'), 'update_item' => __ ('Oppdater produktfunksjon'), 'add_new_item' => __ ('Legg til ny produktfunksjon'), 'new_item_name' => __ ('Ny produktfunksjon'), 'menu_name' => __ ('Produktegenskaper')); register_taxonomy ('product_feature', array ('listing'), array ('etiketter' => $ etiketter, 'hierarkisk' => sann, 'show_ui' => true, 'rewrite' => array ('slug' => ' product_feature '),' query_var '=> true,' show_in_nav_menus '=> true,' public '=> true)); $ labels = array ('name' => __ ('Produktkategorier', 'taksonomi generell navn'), 'singluar_name' => __ ('Produktkategori', 'Taxonomy singular name'), 'search_items' => __ 'Søk produktkategori'), 'all_items' => __ ('Alle produktkategorier'), 'parent_item' => __ ('Foreldreproduktkategori'), 'parent_item_colon' => __ ('Parent Product Category:') 'edit_item' => __ ('Rediger produktkategori'), 'update_item' => __ ('Oppdater produktkategori'), 'add_new_item' => __ ('Legg til ny produktkategori'), 'new_item_name' => __ 'Ny produktkategori'), 'menynavn' => __ ('Produktkategorier')); register_taxonomy ('product_category', array ('listing'), array ('etiketter' => $ etiketter, 'hierarkisk' => sann, 'show_ui' => true, 'rewrite' => array ('slug' => ' product_category '),' query_var '=> true,' show_in_nav_menus '=> true,' public '=> true));
De product_taxonomies funksjonen, vist ovenfor, registrerer to egendefinerte taksonomier for oss. Det viktige å merke seg her er at "omskrivnings" -argumentet er det samme som skrivetypen omskrivning vi opprettet en tilpasset slug for i trinn 1. Det blir adressen til våre taksonomiarkiver. Deretter opprettet vi også et offentlig argument slik at folk kan bla gjennom våre taksonomier.
La oss nå bruke add_actions-filteret for å la WordPress utføre våre funksjoner.
add_action ('init', 'product_listing', 0); add_action ('init', 'product_taxonomies', 10);
Vær oppmerksom på det siste argumentet vi sender inn til ADD_ACTION filter. Vi registrerer produktoppføringsposttypen med prioritet på 0 og de egendefinerte taksonomiene for posttypen selv som 10. Dette er en viktig ting å merke seg: ikke registrer en egendefinert taksonomi med en prioritet lavere enn prioritet for å registrere sin tilknyttede posttype. Dette er hovedproblemet som kan føre til hodepine. hvis taksonomiens prioritet er lavere enn prioritet for posttypen, vil ting bryte siden standardet "10" vil bli brukt til den egendefinerte innleggstypen hvis du ikke angir noe annet.
La oss nå inkludere det i de tjue elleve funksjonene. Åpne opp functions.php og bla til siste linje og legg til denne koden nedenfor etter at de tjuefemte kroppsklassene fungerer slik at temaet kan utføre vår posttypekode.
funksjon twentyeleven_body_classes ($ klasser) if (! is_multi_author ()) $ classes [] = 'single-author'; hvis (is_singular () &&! is_home () &&! is_page_template ('showcase.php') &&! is_page_template ('sidebar-page.php')) $ klasser [] = 'entall'; returner $ klasser; add_filter ('body_class', 'twentyeleven_body_classes'); // dette er våre inkluderte filer require_once ('/ includes / post-types.php');
Nå åpner du wp-admin og aktiverer temaet Twenty Eleven, hvis du ikke allerede har det, og du vil se din egendefinerte innleggstype og taksonomi er lagt til under innleggsmenyen.
Her er det viktige trinnet hvis du vil gjøre taksonomien din bla-stand. Først, kopier de tjue elleve archive.php fil og endre navn på det til taxonomy.php. Hva vi vil gjøre med våre "taksonomier", ligner veldig på hva WordPress gjør med "archive.php" og "category.php file"; Derfor er det ikke nødvendig å kjøre et tilpasset søk på en taksonomi / kategori / post_tag arkivside.
Merk: Hva jeg ser de fleste WordPress-temautviklere som gjør i dag, er dette; De legger til deres tilpassede spørring direkte til taksonomi-filen, som ofte bryter paginasjonen. Hvordan jobber vi rundt dette? Enkle mine venner, jeg vil fortelle deg hemmeligheten til å lage din egendefinerte spørring uten å legge den direkte til taxonomy.php fil:
La oss fylle taksonomifilen med vår kode. Gå til linjen under get_header () og skriv inn koden nedenfor.
$ term = get_term_by ('slug', get_query_var ('term'), get_query_var ('taxonomy'));
De get_term_by funksjonen returnerer verdien av slugken vi spesifiserer. Husk 'rewrite' => array ('slug' => 'property_feature')? Dette er verdien av sluggen som vil bli returnert. Vi vil bruke den til ekko ut slug som taksonomi tittelen. Gå nå til linjen der h1-taggen med klassesider-tittel og skriv ned koden for å ringe termen nedenfor.
ekko $ term-> navn;
Gå tilbake til administrasjonspanelet og gå til produktfunksjonene og produktkategorier. Vi vil lage noen funksjoner og kategorier for våre produkter. Jeg ringer min funksjon 1, 2, 3 og kategori 1, 2, 3.
Deretter oppretter vi en ny produktoppføring. Under det publiserte feltet ser du funksjonen og kategorien tilpasset taksonomi du nettopp har opprettet. Ikke glem å sjekke dem. Jeg opprettet 3 produktoppføringer, og så sjekker jeg kategorien og funksjonen for hver av dem.
For å se hvordan taksonomien din fungerer, gå til produktfunksjonen eller produktkategorien, og bla til kategorien du har opprettet, og klikk på visningsknappen som vist på bildet ovenfor. Hvis du er påpekt 404-feilsiden, kan du gå inn i wp-admin, gå til Innstillinger -> Permalinks og trykk på Lagre for å få WordPress til å spyle omskrivningsreglene. Hvis du har noe som ligner på bildet ovenfor, fungerer taksonomien din allerede.
Legg merke til tittelen på taksonomien under menyen er det termen vi kaller med ekko.
La oss opprette en meny for å få enklere tilgang til taksonomiarkivene. Gå til menyfanen og opprett to menyer, vi vil ringe den første menyen "Browse by Features" og den andre menyen "Browse by Categories". Siden vi har satt parameteren 'show_in_nav_menus' => true, Dette vil bringe vår tilpassede taksonomi til menyalternativene. Velg alle funksjoner for menyen "Bla gjennom funksjoner" og kategorier for "Bla gjennom kategorier" -menyen.
Neste hodet til widgets-området og la oss legge til menyene vi nettopp har opprettet til den tilpassede meny-widgeten.
Gå til hjemmesiden din og klikk på oppdateringen, og du vil se din tilpassede taksonomi-widget. Opprett nå flere plassholderprodukter, så vi kan få paginasjonen til å vises. Jeg opprettet rundt 8 oppføringer og tildelte dem til funksjonen 1. Deretter angir du «Bloggsidene mest» under Innstillinger -> Lesing for å vise bare 3 innlegg og gå til taksonomiarkivsiden for å teste om paginasjonen fungerer eller ikke. Whallah! Paginasjonen fungerer fint i WordPress-standardnavigering.
La oss teste det med den berømte WordPress paginering plugin, the wp-pagenavi plugg inn. Når du har installert pluginet, går du til din taxonomy.php og finn linjen med twentyeleven_content_nav ('nav-over'); og twentyeleven_content_nav ('nav-under'); erstatt koden med wp_pagenavi () Funksjon som vist i koden nedenfor.
// twentyeleven_content_nav ('nav-over'); wp_pagenavi (); // twentyeleven_content_nav ('nav-under'); wp_pagenavi ();
Nå treffer oppdatering, og du kan se wp_pagenavi-paginasjonen fungerer hvis du følger instruksjonene mine.
Dette forårsaker ikke mer hodepine på paginering mens permalink ikke er standard.
Det neste trinnet er å skape vår tilpassede spørring for å la taksonomiarkivfilen vise hva vi ber om.
De pre_get_posts () Filteret er på de mest fantastiske filtre (etter min mening!) Det lar oss lage et innleggsfilter før innlegget blir kalt. De fleste WordPress-temautviklere sjelden bruker dette kraftige våpenet ... Okay dudes! La oss laste vårt hemmelige våpen med koden. Brann opp redaktøren din og åpne Twenty Eleven functions.php filen.
Vi laster den med to funksjoner på slutten av funksjonene.php under vår required_once-funksjon, den første er å ringe vår egendefinerte spørring på taksonomi og den andre er å ekskludere vår liste fra søk. Her er koden for den første funksjonen.
add_action ('pre_get_posts', 'add_custom_taxonomy_query'); funksjon add_custom_taxonomy_query (& $ query) if (! is_admin () && is_tax ('product_feature') || is_tax ('product_category')) $ query-> sett ('orderby', 'date'); $ query-> set ('order', 'ASC'); $ query-> set ('posts_per_page', '1');
Koden ovenfor vil utføre spørringen for både product_feature og product_category taxonomics for å bestille etter dato og rekkefølge stigende og også innlegg per side er satt til 1. Gå til taksonomi arkiv siden og deretter oppdatere. Jippi! Du har nettopp sett at vårt hemmelige våpen blir henrettet. Test nå søkeskjemaet ditt, jeg skriver inn 'produkt' i søkeskjemaet, og resultatet er at produktet mitt fremdeles vises på resultatsiden. Greit! La oss gjøre det usynlig i søkeresultatet.
funksjon search_filter ($ query) if (! is_admin ()) if ($ query-> is_search) $ query-> sett ('post_type', array ('post', 'side')); returnere $ spørring; add_filter ('pre_get_posts', 'search_filter');
Legg til funksjonen ovenfor i funksjonen functions.php, så gå til nettstedet ditt og prøv å søke i produktet. Yap! Produktoppføringen er nå blitt usynlig. Hvis du vil inkludere i søket, legger du bare til 'notering' i spørringssettet etter 'side'.
$ query-> set ('post_type', array ('post', 'side', 'listing'));
Ok, dette er slutten av opplæringen! Jeg har fortalt deg hvordan du skal håndtere paginering 404 feilsiden og fortelle deg tre viktige regler for å lage din taxonomy.php fil som er:
Jeg lastet deg også med min pre_get_posts hemmelig våpen for å håndtere alle spørsmålene uten å ødelegge paginering og andre ting som kan forårsake hodepine. De pre_get_posts Metoden selv kan fortsatt utvides med dine egne temaalternativer. Nyt kurset!