Aangepaste postsoorten en aangepaste taxonomieën zijn een van de meest opwindende nieuwe trucs voor WordPress-ontwikkelaars sinds de release in WordPress versie 2.9. Het gebruik ervan kan echter een hoofdpijn worden voor zelfs de meest ervaren WordPress-ontwikkelaars zonder een paar extra trucjes te kennen. In dit artikel zal ik Twenty Eleven gebruiken als een voorbeeld om je tips en tricks te geven om je eigen taxonomie op de juiste manier te maken.
Dit is het overzicht van wat we vandaag gaan bespreken. We zullen een hypothetisch scenario gebruiken om enkele belangrijke oplossingen te illustreren; U heeft misschien niet exact dezelfde situatie, maar de oplossing moet van toepassing zijn op tal van taxonomiespecifieke hoofdpijnen zoals 404's, paginatieproblemen en niet-doorzoekbare taxonomievermeldingen..
Voor ons voorbeeld zullen we een aangepast berichttype maken voor onze hypothetische productvermelding; Start uw editor op en maak een nieuw bestand met de naam, post-type.php; Sla het bestand vervolgens op in een nieuwe map met de naam "omvat". Hier is de code die we aan dat bestand zullen toevoegen:
function product_listing () $ labels = array ('name' => __ ('Property Listings', 'post type general name'), 'singular_name' => __ ('Property Listing', 'post type singular name'), 'add_new' => _x ('Add New', 'Listing'), 'add_new_item' => __ ('Nieuwe listing toevoegen'), 'edit_item' => __ ('Edit Listing'), 'new_item' => __ ('Nieuwe listing'), 'all_items' => __ ('Alle listings'), 'view_item' => __ ('View Listing'), 'search_items' => __ ('Search Listings'), 'not_found' = > __ ('No Listings found'), 'not_found_in_trash' => __ ('Geen aanbiedingen gevonden in Trash'), 'parent_item_colon' => ", 'menu_name' => 'Listings'); $ args = array ('labels '=> $ labels,' public '=> true,' publicly_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 '=>' listing ',' with_front '=> false), // Belangrijk!' ondersteunt '=> array (' title ',' editor ',' thumbnail ',' author '),' taxonomies '=> array ( 'product_feature', 'product_category'),); register_post_type ('listing', $ args);
Wat we daar deden: we hebben een functie gemaakt voor een product dat wordt toegevoegd aan de in het actie in WordPress later. $ labelsis een array met alle informatie die we nodig hebben om een berichttype te maken. Hieronder is het label een array van argumenten ($ args). Het belangrijkste om te onthouden is de 'herschrijven'deel waar we onze slak definiëren die als permalink zal worden gebruikt, voor dit voorbeeld zullen we gebruiken'vermelding'. Onderaan hebben we taxonomieargumenten die onze bevatten producteigenschap en product categorie.
Een veelgebruikte techniek die veel WordPress-ontwikkelaars gebruiken, is om het aangepaste berichttype uit de zoekresultaten uit te sluiten met het argument van 'exclude_from_search' => true. We gaan dit hier niet doen, omdat we een archief nodig hebben voor de taxonomie van het posttype, zodat mensen kunnen zoeken naar ons product. Voor mij is de regel hier niet gebruiken 'exclude_from_search' => true bij het registreren van uw openbare berichttype; Als u het op een archiefpagina wilt weergeven, wilt u dat dit deel uitmaakt van zoekopdrachten. Als we het van willen uitsluiten blog zoeken, dan moeten we het uitsluiten met een aangepaste functie die we later zullen bespreken.
Zoals u in stap 1 uit de code kunt zien, moeten we twee aangepaste taxonomieën registreren voor onze productvermelding. De eerste zal een productfunctie zijn en de tweede zal een productcategorie zijn. Dus laten we beginnen.
We moeten een nieuwe functie toevoegen na de functie productlijst. We zullen deze functie noemen product_taxonomies. De volledige taxonomieëncode is hieronder te zien:
/ ** * Aangepaste taxonomieën toevoegen voor productvermelding * / function product_taxonomies () $ labels = array ('name' => __ ('Productkenmerken', 'taxonomie algemene naam'), 'singular_name' => __ ('Product Feature ',' taxonomy singular name '),' search_items '=> __ (' Zoek producteigenschappen '),' all_items '=> __ (' Alle producteigenschappen '),' parent_item '=> __ (' Productfunctie ouders ') ), 'parent_item_colon' => __ ('Productfunctie ouder:'), 'edit_item' => __ ('Bewerk productfunctie'), 'update_item' => __ ('Werk producteigenschap bij'), 'add_new_item' => __ ('Nieuwe productfunctie toevoegen'), 'nieuwe_itemnaam' => __ ('Nieuwe productfunctie'), 'menu_name' => __ ('Productkenmerken')); 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 ('naam' => __ ('Productcategorieën', 'taxonomie algemene naam'), 'singluar_name' => __ ('Productcategorie', 'naam singuliere naam van taxonomie'), 'search_items' => __ ( 'Zoek productcategorie'), 'all_items' => __ ('Alle productcategorieën'), 'parent_item' => __ ('Parent Product Category'), 'parent_item_colon' => __ ('Parent Product Category:'), 'edit_item' => __ ('Edit Product Category'), 'update_item' => __ ('Update Product Category'), 'add_new_item' => __ ('Nieuwe productcategorie toevoegen'), 'new_item_name' => __ ( 'Nieuwe productcategorie'), 'menu_name' => __ ('Productcategorieën')); 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));
De product_taxonomies functie, hierboven weergegeven, registreert twee aangepaste taxonomieën voor ons. Het belangrijkste om op te merken is dat het argument 'herschrijven' hetzelfde is als het herschrijven van het berichttype waarvoor we een aangepaste slug hebben gemaakt in stap 1. Dat wordt de URL naar ons taxonomiearchief. Vervolgens hebben we ook een openbaar argument gemaakt, zodat mensen onze taxonomieën kunnen bekijken.
Laten we nu het filter add_actions gebruiken om WordPress onze functies te laten uitvoeren.
add_action ('init', 'product_listing', 0); add_action ('init', 'product_taxonomies', 10);
Let op het allerlaatste argument dat we doorgeven aan de add_action filter. We registreren het berichttype van het producttype met de prioriteit 0 en de aangepaste taxonomieën voor het berichttype zelf als 10. Dit is een cruciaal ding om op te merken: registreer geen aangepaste taxonomie met een prioriteit die lager is dan de prioriteit voor het registreren van het bijbehorende berichttype. Dit is het belangrijkste probleem dat u hoofdpijn kan bezorgen; als de prioriteit van uw taxonomie lager is dan de prioriteit van uw berichttype, zullen dingen breken omdat de standaardwaarde van "10" wordt gebruikt voor het aangepaste berichttype als u niet anders specificeert.
Laten we het nu opnemen in de Twenty Eleven-functies. Open de functions.php en ga naar de laatste regel en voeg deze code hieronder toe nadat de Twenty Eleven body classes functies hebben, zodat het thema onze posttypecode kan uitvoeren.
function twentyeleven_body_classes ($ classes) if (! is_multi_author ()) $ classes [] = 'single-auteur'; if (is_singular () &&! is_home () &&! is_page_template ('showcase.php') &&! is_page_template ('sidebar-page.php')) $ classes [] = 'singulier'; return $ klassen; add_filter ('body_class', 'twentyeleven_body_classes'); // dit is onze include-bestanden require_once ('/ includes / post-types.php');
Open nu je wp-admin en activeer het Twenty Eleven-thema, als je dat nog niet hebt gedaan, en je zult zien dat je aangepaste berichttype en taxonomie is toegevoegd onder het posts-menu.
Hier is de belangrijke stap als u uw taxonomie wilt maken blader-able. Kopieer eerst de Twenty Eleven archive.php bestand en hernoem het naar taxonomy.php. Wat we willen doen met onze "taxonomieën" komt sterk overeen met wat WordPress doet met "archive.php" en "category.php file"; Daarom is het niet nodig om een aangepaste query uit te voeren op een archiefpagina van een taxonomie / categorie / post_tag.
Notitie: Wat ik de meeste WordPress-thema-ontwikkelaars tegenwoordig zie doen is dit; Ze voegen hun aangepaste query rechtstreeks toe aan het taxonomiebestand, waardoor de paginering vaak wordt verbroken. Hoe werken we hier omheen? Makkelijk mijn vrienden, ik zal je het geheim vertellen om je eigen zoekopdracht te maken zonder deze direct aan de taxonomy.php het dossier:
Laten we het taxonomiebestand vullen met onze code. Ga naar de regel onder de get_header () en voer de onderstaande code in.
$ term = get_term_by ('slug', get_query_var ('term'), get_query_var ('taxonomy'));
De get_term_by functie retourneert de waarde van de slug die we opgeven. Herinner de 'rewrite' => array ('slug' => 'property_feature')? Dit is de waarde van de slak die wordt geretourneerd. We zullen het gebruiken om echo de slak uit als de taxonomietitel. Ga nu naar de regel waar de h1-tag met de paginatitel van de klas staat en noteer de code om de onderstaande term te noemen.
echo $ term-> naam;
Ga terug naar uw admin-paneel en ga vervolgens naar de productfuncties en productcategorieën. We zullen een aantal functies en categorieën voor onze producten maken. Ik noem mijn functie 1, 2, 3 en categorie 1, 2, 3.
Vervolgens maken we een nieuwe productvermelding. Onder het gepubliceerde veld ziet u uw functie en categorie aangepaste taxonomie die u zojuist hebt gemaakt. Vergeet ze niet te controleren. Ik heb 3 productvermeldingen gemaakt en dus controleer ik de categorie en functie voor elk product.
Om te zien hoe uw taxonomie werkt, gaat u naar de productfunctie of productcategorie en bladert u naar de categorie die u hebt gemaakt en klikt u op de weergaveknop zoals te zien in de bovenstaande afbeelding. Als je wordt verwezen naar de 404-foutpagina, ga je naar je wp-admin, ga je naar Instellingen -> Permalinks en klik je op opslaan om WordPress de herschrijfregels te laten spoelen. Als u iets heeft dat lijkt op de bovenstaande afbeelding, werkt uw taxonomie al.
Let op de titel van de taxonomie onder het menu is de naam die we met de naam noemen echo.
Laten we een menu maken om gemakkelijker toegang te krijgen tot de taxonomie-archieven. Ga naar het menutabblad en maak twee menu's, we bellen het eerste menu "Bladeren op functies" en het tweede menu "Bladeren op categorieën". Omdat we de parameter hebben ingesteld 'show_in_nav_menus' => waar, dit zal onze aangepaste taxonomie naar de menu-opties brengen. Kies alle functies voor het menu "Bladeren op functies" en categorieën voor het menu "Bladeren op categorieën".
Ga vervolgens naar het widgets-gedeelte en voeg de menu's die we zojuist hebben gemaakt toe aan de aangepaste menuwidget.
Ga naar je startpagina en klik op Vernieuwen. Je ziet je aangepaste taxonomiewidget. Maak nu meer productvermeldingen voor plaatshouders, zodat we de paginering kunnen laten verschijnen. Ik heb ongeveer 8 vermeldingen gemaakt en deze aan de functie 1 toegewezen. Stel vervolgens de pagina's "Blogpagina's weergeven" in onder Instellingen -> Lezen om alleen te tonen 3 berichten en ga naar de pagina taxonomiearchieven om te testen of de paginering werkt of niet. Whallah! De paginering werkt prima in WordPress standaard navigatie.
Laten we het testen met de beroemde plugin voor WordPress-paginering, de wp-PageNavi inpluggen. Nadat u de plug-in hebt geïnstalleerd, gaat u naar uw taxonomy.php en vind de regel met twentyeleven_content_nav ('nav-above'); en twentyeleven_content_nav ('nav-below'); vervang de code door de wp_pagenavi () functie zoals te zien in de onderstaande code.
// twentyeleven_content_nav ('nav-above'); wp_pagenavi (); // twentyeleven_content_nav ('nav-below'); wp_pagenavi ();
Druk nu op Vernieuwen en u kunt zien dat de paginering wp_pagenavi werkt als u mijn instructies volgt.
Dit veroorzaakt geen hoofdpijn meer bij paginering terwijl permalink niet de standaard is.
De volgende stap is het maken van onze aangepaste query om het bestand met taxonomiearchieven te laten zien waar we om vragen.
De pre_get_posts () filter is een van de meest geweldige filters (naar mijn mening!) Hiermee kunnen we een postfilter maken voordat het bericht wordt genoemd. De meeste WordPress-themaontwikkelaars gebruiken dit krachtige wapen zelden ... Oké dudes! Laten we ons geheime wapen met de code laden. Start je editor op en open het Twenty Eleven functions.php-bestand.
We zullen het laden met twee functies aan het einde van de functions.php onder onze required_once functie, de eerste is om onze aangepaste query op de taxonomie te bellen en de tweede is om onze aanbieding uit te sluiten van de zoekopdracht. Hier is de code voor de eerste functie.
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');
De bovenstaande code voert de query uit voor zowel product_feature als productcategorie-taxonomieën om te sorteren op datum en om oplopend te bestellen en ook posts per pagina is ingesteld op 1. Ga naar uw taxonomie-archiefpagina en klik op Vernieuwen. Yay! Je hebt zojuist ons geheime wapen zien worden geëxecuteerd. Test nu uw zoekformulier, ik typ 'product' in het zoekformulier en het resultaat is dat mijn product nog steeds op de resultatenpagina verschijnt. Oke! Laten we het onzichtbaar maken in het zoekresultaat.
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');
Voeg de bovenstaande functie toe aan het functions.php-bestand en ga vervolgens naar uw site en probeer uw product te doorzoeken. Yap! De productvermelding is nu onzichtbaar geworden. Als u wilt opnemen in de zoekopdracht, voegt u 'listing' toe aan de querysetarray na 'page'.
$ query-> set ('post_type', array ('post', 'page', 'listing'));
Oké, dit is het einde van de tutorial! Ik heb je verteld hoe om te gaan met de paginatie 404-foutpagina en laat je drie belangrijke regels kennen om je pagina te maken taxonomy.php bestand die zijn:
Ik heb je ook geladen met mijn pre_get_posts geheim wapen om alle vragen te behandelen zonder de paginering en andere dingen die hoofdpijn kunnen veroorzaken te verpesten. De pre_get_posts methode zelf kan nog steeds worden uitgebreid met uw eigen thema-opties. Geniet van de cursus!