$post_type ( lijn) hoe je je berichttype wilt noemen, deze naam zal in de toekomst in de parameters van veel functies worden gebruikt, houd hier rekening mee. Bovendien kunnen de volgende door WordPress gereserveerde woorden niet als titel worden gebruikt:
- bijlage
- herziening
- nav_menu_item
- aangepaste_css
- customize_changeset
- actie
- volgorde
- thema
- auteur
Standaard: openbare argumentwaarde. uitsluiten_van_zoeken( logisch)
- waar — sluit records van dit type uit van zoekresultaten op de site,
- vals - sluit niet uit.
Standaard: tegengestelde waarden van de publieke parameter. show_in_nav_menus( logisch) of elementen van dit type bericht beschikbaar moeten worden gemaakt voor toevoeging aan het sitemenu.
Standaard: openbare argumentwaarde. toon_ui( logisch) of het nodig is om een standaardinterface toe te voegen in het beheerderspaneel voor het bewerken en toevoegen van records van dit type.
Standaard: openbare argumentwaarde.
Toon_in_menu ( logisch|lijn) of het nodig is om items aan het beheerdersmenu toe te voegen.
Standaard: waarde van show_ui-argument. show_in_admin_bar ( logisch) of het nodig is om een link toe te voegen om een nieuw record van dit type aan te maken in het beheerdersdashboard.
Standaard: waarde van het argument show_in_menu. menu_positie( geheel getal) volgorde van opstelling in het menu in het admin-paneel.
menu_icon( lijn) absolute URL van het pictogram voor het menu. De optimale beeldresolutie is 16x16 pixels.Bovendien introduceerde WordPress 3.8 een ingebouwd pictogrampakket - u kunt elk van deze pictogrammen gebruiken door eenvoudigweg de naam op te geven als een parameterwaarde, bijvoorbeeld dashicons-cart.
Standaard wordt het pictogram voor gewone berichten gebruikt. verwijder_met_gebruiker( logisch) moeten bij het verwijderen van een gebruiker op een blog alle berichten van dit type die hij heeft gepubliceerd automatisch worden verwijderd?
Standaard: onwaar. hiërarchisch ( logisch) of dit type bericht een hiërarchie moet hebben.
Standaard: onwaar. heeft_archief( logisch|lijn) of dit type bericht een eigen archiefpagina moet hebben. U kunt een snelkoppeling naar de archiefpagina opgeven als parameterwaarde.
Standaard: onwaar. herschrijven( reeks|logisch) stelt regels in voor permalinks in URL's. Als u false opgeeft als waarde van deze parameter, worden er geen regels voor permalinks gemaakt.
Naaktslak ( lijn) label gebruikt voor berichten van dit type (standaard is de naam van het berichttype) with_front ( logisch) of de waarde $wp_rewite->front moet worden toegevoegd aan permalinks (standaard - true) feeds ( logisch) of het nodig is om een RSS-feed te maken voor dit type bericht (standaard - de waarde van de parameter has_archive) pagina's ( logisch) moet paginering zijn toegestaan in berichten van een geregistreerd type met behulp van de tag(standaard is waar) ondersteunt ( reeks) welke moeten worden toegevoegd aan de pagina's voor het bewerken van records van dit type.
- titel - veld voor het invoeren van de titel van het bericht
- editor - teksteditor
- uittreksel - "Citaat" metabox
- auteur — “Auteur” metabox
- thumbnail - Metabox “Post Thumbnail” (daarnaast moet je thema dit ondersteunen)
- reacties — metabox “Reacties” (indien gespecificeerd, reacties op berichten van het geregistreerde type zijn toegestaan)
- trackbacks — metabox “Backlinks verzenden”
- custom-fields — “Aangepaste velden” metabox (aangepaste velden worden in ieder geval ondersteund)
- revisies — metabox “Revisies” (indien gespecificeerd, zullen revisies van berichten van dit type in de database worden aangemaakt)
- page-attributes - Metabox “Paginakenmerken” met de mogelijkheid om een bovenliggend element te selecteren en de volgorde in te stellen menu_order
- post-formats - “Formaat” metabox, lees meer over berichtformaten. taxonomieën ( reeks) een reeks taxonomieën, zoals categorie of post_tag , die voor dit berichttype moeten worden gebruikt. U kunt ook taxonomieën toewijzen met behulp van de functie.
Voorbeeld van registratie van berichttype
Als je niet weet waar je de code moet invoegen, plak deze dan in functies.php van je huidige thema.
add_action ("init", "true_register_products"); // Gebruik de functie alleen binnen de init hook function true_register_products() ( $labels = array ("name" => "Producten" , "singular_name" => "Product" , // beheerderspaneel Add->Functie"add_new" => "Product toevoegen" , "add_new_item" => "Nieuw product toevoegen", // tagtitel |
Maak een aangepast berichttype Lidwoord met aangepaste categorieën (aangepaste taxonomie) Categorie artikelen.
In mijn geval zijn alle standaardrecords Producten, dus we zullen Artikelen weergeven via aangepaste records.
In het functiebestand function.php registreren we een aangepast berichttype Artikelen:
Functie wptp_create_post_type() ( $labels = array("name" => __("Artikelen"), "singular_name" => __("Artikelen"), "add_new" => __("Nieuw artikel"), "add_new_item" => __("Nieuw artikel toevoegen"), "edit_item" => __("Artikel bewerken"), "new_item" => __("Nieuw artikel"), "view_item" => __("Artikel bekijken"), "search_items" => __("Artikelen zoeken"), "not_found" => __("Geen artikelen gevonden"), "not_found_in_trash" => __("Geen artikelen gevonden in prullenbak")),); $args = array( "labels" => $labels, "has_archive" => true, "public" => true, "hiërarchisch" => false, "menu_position" => 5, "supports" => array("title", "editor" , "uittreksel", "aangepaste velden", "thumbnail")); register_post_type("articles", $args); ) add_action("init", "wptp_create_post_type");
Als je wilt dat standaardcategorieën worden weergegeven in aangepaste berichten, koppel ze dan aan de categorieëntaxonomie:
"taxonomieën" => array("categorie"),
Als je ook aangepaste taxonomieën voor aangepaste berichten maakt, moet je deze koppelen aan de gemaakte taxonomieën; als we het onderstaande voorbeeld nemen, zijn dit artikelen_categorie
"taxonomieën" => array("articles_category"),
Vervolgens registreren we voor het aangepaste berichttype Artikelen de ‘Artikelcategorie’-taxonomieën, zodat verschillende berichten tot verschillende categorieën kunnen behoren.
Functie wptp_register_taxonomy() ( register_taxonomy("articles_category", "articles", array("labels" => array("name" => "Artikelcategorieën", "singular_name" => "Artikelcategorie", "search_items" => " Artikelcategorieën zoeken", "all_items" => "Alle artikelcategorieën", "edit_item" => "Artikelcategorieën bewerken", "update_item" => "Artikelcategorie bijwerken", "add_new_item" => "Nieuwe artikelcategorie toevoegen", "new_item_name" => "Nieuwe artikelcategorienaam", "menu_name" => "Artikelcategorie",), "hiërarchisch" => true, "sort" => true, "args" => array("orderby" => "term_order"), "show_admin_column" => true)); ) add_action("init", "wptp_register_taxonomy");
Voor een aangepaste taxonomie kun je de naaktslak in een mooiere veranderen, zodat deze niet de artikelen_categorie is, maar je moet ervoor zorgen dat dergelijke naaktslakken niet langer op andere pagina's of berichten voorkomen, anders zullen er problemen optreden:
"rewrite" => array("slug" => "blog"),
Wanneer u slugs wijzigt, moet u de instellingen voor “Permanente Links” in het beheerderspaneel bijwerken, anders ontvangt u een 404-foutmelding in plaats van de gewenste pagina.
Meer voorbeelden vindt u hier. Maar het hielp om al deze code op orde te brengen, waarvoor ik de auteur erg dankbaar ben.
Het bestand single.php is verantwoordelijk voor het uiterlijk van een aangepast bericht, maar om het uiterlijk van een aangepast bericht te wijzigen, kun je een bestand single-(post_type).php maken - in mijn geval zal het single-articles.php zijn met zijn eigen inhoud.
Nu moet je aangepaste berichten op de pagina weergeven. Standaard is het index.php-bestand verantwoordelijk voor het weergeven van het archief van aangepaste berichten. Maar u kunt een bestand maken dat verantwoordelijk is voor het weergeven van aangepaste vermeldingen in uw taxonomie.
Optie 1 is het meest correct. We geven vermeldingen in de taxonomie op dezelfde manier weer als in een reguliere categorie.
Om dit te doen, maakt u een bestand taxonomie-(taxonomie).php - in mijn geval zal het taxonomy-articles_category.php zijn en daarin geven we de gebruikelijke cyclus weer, zoals voor standaarditems in een categorie:
In het tax-item.php-bestand geven we de gegevens weer die we uit elk bericht moeten halen, bijvoorbeeld titel, berichtlink, thumbnail en uittreksel.
In het paginering.php bestand geven we de paginering in dit formaat weer.
De cyclus is niet veranderlijk, paginering werkt prima. Dit is de beste optie voor het weergeven van aangepaste taxonomieën.
Optie 2 – als er geen aangepaste taxonomieën zijn, kun je eenvoudig alle aangepaste berichten in de vorm van een archief krijgen
Om dit te doen, maken we in de sjabloon een bestandsarchief-(post_type).php - in mijn geval zal het archive-articles.php zijn, waarin we, net als in de taxonomie, een regelmatige lus weergeven, alleen in plaats van de Taxonomietitel: we geven de naam van het aangepaste berichttype weer :
Met deze optie kunt u, als er geen archiefpagina voor een aangepast bericht is gemaakt, een lijst met alle aangepaste berichten krijgen via de directe link BLOG_URL?post_type=(post_type) of in mijn geval http://site.com/ Lidwoord/ .
Optie 3. Geef eenvoudig alle aangepaste artikelitems weer op een pagina met een bepaald sjabloon
"artikelen", "posts_per_page" => -1); $loop = nieuwe WP_Query($args); while ($loop->have_posts()) : $loop->the_post(); get_template_part("include/tax-item"); eindtijd; ?>get_template_part("include/tax-item"); – in het tax-item.php bestand geef ik de inhoud van het bericht weer die ik nodig heb om berichten binnen de lus weer te geven (titel, miniatuur, datum, citaat, enz.)
Met deze optie worden alle artikelen op de pagina weergegeven, ongeacht taxonomieën (categorieën).
En als we elke categorie afzonderlijk moeten weergeven met eigen nieuws, dan gebruiken we de eerste hierboven beschreven optie.
Dat gezegd hebbende, als je de Yoast SEO-plug-in gebruikt en de broodkruimels gebruikt:
Wanneer u vervolgens de taxonomie “Artikelencategorie” selecteert in de plug-ininstellingen in “Taxonomie om in broodkruimels voor berichttypen weer te geven”, ontvangt u in broodkruimels een link naar de categorie waartoe het Nieuws behoort; met andere opties voor het weergeven van aangepaste berichten , dit kon niet.
Over aangepaste berichttypen in WordPress (CPT, aangepaste berichttypen in WordPress), hoe u categorieën en tags toevoegt, hoe u geneste URL's /posttype/categorie/post of http://example.com/post_type/ maakt categorie/ bericht/ .
Het beschrijft ook hoe je de standaardfunctionaliteit van WordPress kunt uitbreiden door nieuwe soorten berichten te maken die voor verschillende doeleinden kunnen worden gebruikt: het toevoegen van je eigen portfolio, een film- en muziekindex, een productcatalogus, een evenementenkalender en zelfs het maken van je eigen kleine online winkel (omdat groot beter is, gebruik kant-en-klare oplossingen zoals WooCommerce) of een sociaal netwerk, en nog veel meer in deze geest.
Eerst algemene informatie, daarna details.
Over berichten in WordPress: waar ze in de database worden opgeslagen en hoe je ze kunt verkrijgen
Absoluut alle berichten in WordPress, die hieronder worden besproken, worden opgeslagen in één tabel: wp_posts. Metagegevens van berichten, zoals gegevens uit metaboxen, worden opgeslagen in de tabel wp_postmeta.
Ik zal een voorbeeld geven van hoe je 10 berichten van het type post (standaard Berichten in het beheerderspaneel).
In algemene zin is het niet nodig om specifiek gegevens op te vragen. In sjablonen zijn ze al vooraf geïnstalleerd, in single.php zijn recordgegevens bijvoorbeeld al beschikbaar voor verwerking in een lus
If (have_posts()) ( while (have_posts()) ( the_post(); // Hier gebruiken we gegevens uit de lus, zoals the_title(), etc. ) )
Als gegevens ergens buiten de lus of sjabloon moeten worden verkregen, wordt de WP_Query-query gebruikt
$args = array("post_type" => "post", // Berichttype: pagina, bijlage, ... "posts_per_page" => 10, // 10 berichten tegelijk); $p = get_posts($args); // Gegevens kunnen in een lus worden uitgebreid if (!empty($p)) ( foreach ($p as $post) ( setup_postdata($post); ?> ">= the_title() ?>
Gegevens kunnen worden verkregen met behulp van een SQL-query:
Globaal$wpdb; $query = "SELECT * FROM ($wpdb -> berichten) WAAR post_type = "post" LIMIET 10"; $p = $wpdb -> get_results($query); exit(print_r($p)); // $p bevat nu een array met postgegevens
Alle drie bovenstaande methoden geven hetzelfde uitvoerresultaat.
Vooraf ingestelde berichttypen in WordPress: bericht, pagina, bijlage, revisie, nav_menu_item
Inzendingen of berichten (post)
De meest gebruikte eenheid van alle typen in WordPress zijn Posts (ook wel posts genoemd). Gebruikt als blogposts en dergelijke. Het heeft 2 vooraf ingestelde taxonomieën: kopteksten, ook wel categorieën (category) genoemd, en tags, ook wel tags (post_tag) genoemd.
Taxonomieën worden gebruikt om berichten te sorteren en te ordenen.
Categorieën verschillen van tags doordat ze een boomstructuur hebben (ze kunnen in elkaar worden genest).
Labels zijn eenheden die onafhankelijk van elkaar zijn en lijken in dit opzicht enigszins op Records.
Bovendien wordt de RSS-feed van een WordPress-site standaard gegenereerd op basis van inzendingen.
Voor records worden de volgende sjabloonbestanden gebruikt (in volgorde van prioriteit):
- single-post.php
- single.php
- enkelvoud.php
- index.php
Sjabloonbestanden worden van boven naar beneden in volgorde van prioriteit doorzocht. Als er een sjabloonbestand in het thema wordt gevonden, wordt dit gebruikt en wordt de zoekopdracht gestopt.
Pagina's
De pagina's worden voornamelijk gebruikt als servicepagina's, landingspagina's, landingspagina's, encyclopediecollecties en dergelijke. Ze hebben een boomachtige hiërarchie, dat wil zeggen dat ze in elkaar kunnen worden genest, wat wordt weerspiegeld in het adres van de laatste pagina (bovenliggende snelkoppelingen zullen aanwezig zijn in de URL-keten), en in deze rol is het mogelijk om geef ze voorrang bij het sorteren.
U kunt op twee manieren een landingspagina maken:
Maak een speciaal paginasjabloon
Maak ergens binnen het thema, in de hoofdmap of de submap ervan, een bestand met een willekeurige naam en php-extensie, bijvoorbeeld landing.php. Binnenin kunt u absoluut elke sjabloon plaatsen, die compleet anders kan zijn dan andere pagina's op de site. Maar het belangrijkste is om deze code aan het begin van het bestand te plaatsen:
Sjabloonnaam is een speciaal label dat WordPress vertelt dat dit bestand een speciaal sjabloon is.
Wanneer u nu een pagina maakt en bewerkt, kijkt u in het blok aan de rechterkant genaamd Paginakenmerken. Daarin kunt u in het gedeelte Sjabloon onze unieke landingspagina selecteren.
Voor Pages wordt de volgende sjabloonhiërarchie gebruikt. Net als bij Records geef ik in volgorde van prioriteit aan:
- (sjabloon).php
- pagina-(pagina_label).php
- pagina-(pagina_ID)
- pagina.php
- enkelvoud.php
- index.php
Bijlagen, bijlagen of bijlagen
Een hulpprogramma dat is ontworpen om informatie op te slaan over bestanden (afbeeldingen, audio, video en dergelijke) die zijn geüpload via de uploader in de standaard WordPress-editor bij het bewerken van een bericht, pagina of iets dergelijks: grootte, gewicht, beschrijving, welk bericht of welke pagina waar ze aan gehecht zijn, en dat soort dingen.
U kunt bijlagen verkrijgen voor latere manipulatie met behulp van de volgende code:
$args = array("post_type" => "attachment", // Berichttype: bijlage "post_status" => "inherit", // De standaard is "publish", en daarmee kun je geen bijlagen ontvangen, dus geven we een speciale bijlagestatus "erven"); $p = get_posts($args); exit(print_r($p)); // Bij de uitvoer hebben we een array met bijlagen
Hiërarchie van sjablonen voor bijlagen:
- (mime-type).php
- (mime-subtype).php
- (mime-type-subtype).php
- bijlage.php
- single.php
- enkelvoud.php
- index.php
Revisies, concepten of herzieningen
Revisies, ook wel revisies genoemd, zijn versies van conceptberichten die automatisch worden gemaakt terwijl u een artikel schrijft in het WordPress-beheerderspaneel of een artikel opslaat zonder het daadwerkelijk te publiceren.
Tijdens het schrijfproces wordt voor elk artikel standaard elke versie van het concept opgeslagen. U kunt twee verschillende versies vergelijken en teruggaan naar de versie die u nodig heeft.
Het opslaan van veel versies van hetzelfde artikel is vrij duur en vaak zinloos (hoewel het waarschijnlijk juister zou zijn om alles standaard te laten staan en regelmatig oude revisies op te schonen met een plug-in, bijvoorbeeld WP Optimize), dus het aantal opgeslagen versies van Revisies kan worden gewijzigd met behulp van 2 opties:
- Gebruik het wp_revisions_to_keep-filter
- Registreer in wp-config.php //Schakel revisies uit naar de minimaal mogelijke waarde definition("WP_POST_REVISIONS", 0);
Mogelijke waarden:
- true of -1: slaat elke versie van het concept op. Standaard optie
- false of 0: schakelt het opslaan van concepten uit, behalve 1 automatisch opslaan
- Geheel getal groter dan nul: het opgegeven aantal conceptversies wordt opgeslagen + 1 automatisch opslaan. Oude versies die niet binnen het opgegeven aantal passen, worden automatisch verwijderd
Navigatiemenu-items (nav_menu_item)
Een navigatiemenu (nav_menu_item) is een berichttype dat informatie over een navigatie-item in WordPress opslaat. Het eerste en tot nu toe enige type record dat niet wordt gebruikt zoals andere soorten records, de gegevens voor bediening en weergave op de site, krijgt zijn eigen afzonderlijke functies.
Bovendien zijn navigatiemenu's niet standaard ingeschakeld. Om ze mogelijk te maken, moet u hun steun betuigen in:
- Schrijf add_theme_support("menu's");
- Of registreer een menuruimte met register_nav_menu() , waarna menuondersteuning automatisch wordt ingeschakeld
Gebruik wp_nav_menu() om de gegevens op te halen, omdat WP_Query niet zal werken en dat is een functie van het berichttype nav_menu_item
// Deze code werkt wp_nav_menu(); // Toont het eerste geregistreerde niet-lege menu // Maar de onderstaande code werkt niet $args = array("post_type" => "nav_menu_item", // Berichttype: pagina, bijlage, ...); $p = get_posts($args); exit(print_r($p)); // De uitvoer zal een lege array zijn
Aangepast berichttype (CPT WordPress)
Nu komen we bij het belangrijkste: de tool waarmee je de standaard WordPress-blogfunctionaliteit kunt uitbreiden naar eindeloze mogelijkheden: een aangepast aangepast berichttype.
Het eenvoudigste voorbeeld van hoe u ons nieuwe berichttype sheensay_product kunt registreren
Add_action("init", "sheensay_post_type"); function sheensay_post_type() ( register_post_type("sheensay_product", array("labels" => array("name" => "Producten", "singular_name" => "Producten",), "public" => true, // type records zijn open voor zoeken en dergelijke "has_archive" => true, // Schakel archiefpagina's in "supports" => array("title", "editor", "thumbnail", "comments"), // Schakel ondersteuning in voor de titel, editor, thumbnails, commentaar)); )
Hier is sheensay_product de naam van het nieuwe berichttype. Het mag niet conflicteren met anderen in het systeem; daarover hieronder meer.
In deze uitvoeringsvorm dient het ook als een snelkoppeling naar dit type bericht, dat wil zeggen dat het aanwezig is in de URL. Als u bijvoorbeeld een andere snelkoppeling wilt opgeven producten, doe zoals in het onderstaande voorbeeld
Add_action("init", "sheensay_post_type"); function sheensay_post_type() ( register_post_type("sheensay_product", array("labels" => array("name" => "Producten", "singular_name" => "Producten",), "public" => true, "rewrite" => array("slug" => "products"), // Het label Custom Post Type "has_archive" => true, "supports" => array("title", "editor", "thumbnail"),) ) ; )
Hoe je de juiste naam kiest voor een nieuw berichttype
De volgende namen zijn gereserveerd in WordPress en kunnen niet worden gebruikt als de naam van een nieuw berichttype:
- bijlage
- herziening
- nav_menu_item
- actie
- thema
- volgorde
Vermijd ook het gebruik van het voorvoegsel wp_ aan het begin van de naam, omdat dit conflicten kan veroorzaken met toekomstige versies van de WordPress-kern.
Het is het beste als u namen voorafvoegt met willekeurige voorvoegsels die verband houden met de naam van uw site, product of merk, bijvoorbeeld sheensay_product, dan voorkomt u gegarandeerd potentiële conflicten
Hoe u een aangepaste taxonomie maakt
Aangepaste berichttypen kunnen taxonomieën uit berichten gebruiken, bijvoorbeeld categorieën (categorieën) of tags (tags), maar u kunt ook uw eigen taxonomieën hebben.
Add_action("init", "sheensay_post_type"); function sheensay_post_type() ( // Registreer de taxonomie register_taxonomy("sheensay_product_type", "sheensay_product", array("label" => "Typen", "hiërarchisch" => true, // Indien WAAR, zal de taxonomie analoog zijn aan koppen (categorieën). Indien FALSE (standaard), wordt de taxonomie een analoog van labels (tags): "rewrite" => array("slug" => "product-type"),)); // Registreer een aangepast post type (Aangepast berichttype) register_post_type ("sheensay_product", array("labels" => array("name" => "Producten", "singular_name" => "Producten",), "public" => true, " rewrite" => array("slug " => "products"), // Het CPT-label wordt hier gedefinieerd "has_archive" => true, "supports" => array("title", "editor", "thumbnail") , // Ondersteuning inschakelen voor titel, editor, thumbnail )); )
Sjablonen voor aangepaste berichttypen
Het hangt allemaal af van wat voor soort informatie wordt weergegeven. Er kunnen 3 opties zijn: een specifiek berichtsjabloon, een berichtarchiefsjabloon en een taxonomiesjabloon
Sjabloon voor berichtpagina
Vermeld in volgorde van prioriteit
- single-(post_type).php
- single.php
- index.php
Postarchiefsjabloon
- archief-(post_type).php
- archief.php
- index.php
Aangepaste taxonomiesjabloon
- taxonomie-(taxonomie_naam)-(term_naam).php
- taxonomie-(taxonomie_naam).php
- taxonomie.php
- archief.php
- index.php
Hier is taxonomie_naam sheensay_product_type en term_naam is het label van de taxonomie die u in het beheerdersdashboard gaat maken.
Hoe u aangepaste berichttypegegevens kunt verkrijgen (Custom Post Type WordPress) en deze op de site kunt weergeven
U kunt aangepaste berichttypegegevens in WordPress verkrijgen voor weergave op uw website met dezelfde methoden als gewone berichten en pagina’s
$args = array("post_type" => "sheensay_product", // Specificeer ons nieuwe berichttype "posts_per_page" => 10,); $p = get_posts($args); foreach ($p als $post) ( setup_postdata($post); ?> ">= the_title() ?>
Als we het hebben over het hoofdverzoek, waarvoor gegevens bijvoorbeeld vooraf zijn geladen voor weergave op de hoofdpagina of op standaardarchiefpagina's, dan zijn willekeurige berichttypen daar uitgeschakeld.
Dus als je wilt dat een aangemaakt berichttype op bijvoorbeeld archiefpagina's verschijnt, samen met gewone berichten, moet je het voorlaadfilter voor berichten wijzigen
// Verbind ons "sheensay_product" met de standaard "post" en "page" add_action("pre_get_posts", "add_sheensay_product_in_main_query"); function add_sheensay_product_in_main_query($query) ( if (is_archive() && $query -> is_main_query()) $query -> set("post_type", array("post", "page", "sheensay_product")); return $query ; )
Kant-en-klare klasse voor het maken van aangepaste berichttypen met aangepaste taxonomie
Hieronder staat een klasse waarmee je elk aangepast berichttype met een eigen taxonomie kunt registreren, en de URL zal er zo uitzien
http://example.com/products/type/product
Om de URL te genereren, moet u naar de permalink-instellingen /wp-admin/options-permalink.php gaan en alle soorten algemene instellingen instellen, behalve eenvoudige
Hieronder vindt u de klassecode zelf. U hoeft er geen wijzigingen in aan te brengen, maar u kunt het berichttypelabel helemaal aan het einde van de regel wijzigen new Sheensay_Product("products");
De code zelf is geschreven in of in . De eerste optie verdient de voorkeur, omdat u in dit geval de toegang tot de inhoud van het nieuwe berichttype niet verliest wanneer u het actieve thema wijzigt.
?p=1713 * */ final class Sheensay_Product { // Ярлык произвольного типа записи по умолчанию private $post_type = "продукция"; function __construct($post_type = "") { // Переопределяем значение ярлыка по умолчанию if ($post_type) $this -> post_type = $post_type; /* * Registreer aangepast berichttype */ add_action("init", array($this, "sheensay_cpt_product"); /* * Filter de URL */ add_filter("post_type_link", array($this, "product_permalink_structure"), 10, 2); /* * Om paginering te laten werken */ add_action("generate_rewrite_rules", array($this, "fix_product_category_pagination")); ) function sheensay_cpt_product() ( /* * Registreer een aangepaste taxonomie voor een nieuw berichttype */ register_taxonomy("sheensay_product_type", "sheensay_product", array("label" => "Typen", "hiërarchisch" => true, "query_var " = > true, "rewrite" => array("slug" => $this -> post_type),)); /* * Registreer een nieuw berichttype */ $labels = array("name" => "Producten" , // Hoofdnaam "singular_name" => "Producten", // Voeg "add_new" toe => "Nieuwe toevoegen", // Naam van de link naar het nieuwe item in de zijbalk "add_new_item" => "Nieuwe producten toevoegen" , // Titel in de editor bij het toevoegen van een nieuw item); $args = array("labels" => $labels, "public" => true, "publicly_queryable" => true, "show_ui" => true, "query_var " => true, "capability_type" = > "post", "hiërarchisch" => false, "menu_position" => null, "supports" => array("title", "editor", "thumbnail", "fragment" ), "rewrite" => array( "slug" => $this -> post_type . "/%sheensay_product_type%", "with_front" => false,), "has_archive" => $this -> post_type,); register_post_type("sheensay_product", $args); if (current_user_can("manage_options")) // Wees voorzichtig met deze functie. Het reset alle URL-detectieregels. Het is beter om er commentaar op te geven nadat al het werk is voltooid flush_rewrite_rules(); ) function product_permalink_structure($post_link, $post) ( if (FALSE !== strpos($post_link, "%sheensay_product_type%")) ( $product_type_term = get_the_terms($post -> ID, "sheensay_product_type"); if (!empty ($product_type_term)) $post_link = str_replace("%sheensay_product_type%", $product_type_term -> slug, $post_link); ) return $post_link; ) function fix_product_category_pagination($wp_rewrite) ( unset($wp_rewrite -> regels[ $this - > post_type . "/([^/]+)/page/?((1,))/?$"]); $wp_rewrite -> regels = array($this -> post_type . "/?$" => $wp_rewrite -> index . "?post_type=sheensay_product", $this -> post_type . "/page/?((1,))/?$" => $wp_rewrite -> index . "?post_type=sheensay_product&paged=" . $wp_rewrite -> preg_index(1), $this -> post_type. "/([^/]+)/page/?((1,))/?$" => $wp_rewrite -> index . "?sheensay_product_type= ". $wp_rewrite -> preg_index(1) . "&pagina=" . $wp_rewrite -> preg_index(2),) + $wp_rewrite -> regels; ) ) /* * Voer de klasse uit * Tussen haakjes kunt u de naam van het berichttypelabel definiëren */ new Sheensay_Product("products");
Nu kunt u in het beheerderspaneel nieuwe producten en hun typen registreren
A! Contentmanagement systeem WordPress kreeg al jaren erkenning, maar de echte doorbraak was de implementatie van de mogelijkheid om records in typen te scheiden. In deze les gaan we dieper in op aangepaste berichttypen, hun creatie en gebruik.
Een beetje geschiedenis
In de praktijk verschenen aangepaste berichttypen al een hele tijd geleden, meer precies sinds 17 februari 2005, toen WordPress 1.5 ondersteuning voor aangepaste typen is toegevoegd voor statische pagina's, via het veld post_type in de database. De functie Wp_insert_post() bestaat sindsdien WordPress 1.0 dus toen het veld post_type in 1.5 werd geïmplementeerd, was het vrij eenvoudig om het met deze functie in te vullen.
En pas in versie 2.8 verscheen de functie register_post_type() voor het maken van aangepaste typen en waren er nog enkele andere nuttige dingen beschikbaar in “nightly builds”, en al vanaf 2.9 werden de functies voor iedereen beschikbaar.
Wat nu?!
Een custom post type is niets meer dan een gewone post (artikel) met een specifieke veldwaarde post_type in de database. In een normaal bericht heeft het veld post_type de waarde na, pagina doet ertoe bladzijde enzovoort. We kunnen nu echter onze eigen typen maken om de details van de inhoud van een bericht te specificeren. Je kunt aangepaste berichttypen maken voor boeken, films, grappen, producten en al het andere.
Als het correct wordt gedaan, kunt u met slechts een paar regels code de volgende resultaten bereiken:
- Plaats een aangepast type op het hoofdpaneel van het admin-gebied met submenu-items: een lijst met alle items met dit type, en maak ook een nieuw item met dit type;
- Maak een archief met berichten van dit type, dat wil zeggen, doe iets dat lijkt op de hoofdpagina voor een aangepast type;
- Maak categorieën en tags die toegankelijk zijn voor aangepaste berichttypen en aangepaste taxonomieën.
Verschillende soorten inhoud hebben verschillende gegevensvereisten. Voor gewone berichten moet je de auteur, categorie en datum vermelden. Terwijl ik voor een record met het type 'boek' de auteur van het boek, het aantal pagina's, het genre, de uitgever en andere specifieke gegevens zou willen kunnen specificeren. Dit kan eenvoudig worden bereikt door aangepaste (metaboxen) gebieden te gebruiken voor gegevensinvoer.
— gebieden voor het rechtstreeks invoeren van aanvullende gegevens op de pagina voor het maken van records. Deze gebieden maken het gemakkelijker om met aangepaste berichttypen te werken.
Werken met aangepaste berichttypen
Om effectief aangepaste berichttypen te kunnen maken en gebruiken, moet je bekend zijn met het volgende:
- Aangepaste berichttypen maken;
- Het creëren van een aangepaste taxonomie;
- Aangepaste gegevensgebieden maken.
Aangepaste berichttypen maken
Het eerste dat u hoeft te doen, is het aangepaste berichttype zelf maken. Idealiter maak je een plug-in om aangepaste berichttypen te verwerken, maar je kunt ook het function.php-bestand van je thema gebruiken.
1 |
|
Dit is de eenvoudigste vorm van het maken van een type dat vrijwel geen instellingen heeft. Om ons nieuwe berichttype te ontwikkelen, zullen we enkele van de meest gebruikte opties gebruiken en deze toevoegen aan de voorheen lege $args-array.
1 | functie mijn_aangepaste_post_product() ( |
- etiketten— deze reeks labels wordt gebruikt om het aangepaste berichttype te beschrijven dat in het onderwerp wordt gemaakt./li>
- beschrijving- een samenvatting van het aangepaste berichttype dat wordt gemaakt, wat het doet en waarom we het gebruiken.
- openbaar— of het aangepaste type openbaar moet worden gebruikt en of het in het administratieve gebied moet worden getoond. In dit geval is de waarheid vastgesteld.
- menu_positie— de positie van het menu-item van ons type op het hoofdbeheerderspaneel. Een waarde van 5 betekent dat het item onmiddellijk na het menu-item “Records” wordt geïnstalleerd, terwijl 10 betekent na het item “Mediabestanden”, enz.
- ondersteunt— deze optie bevat een array die de velden beschrijft die we kunnen bewerken op de pagina voor het maken van records. Dat wil zeggen, titel - er verschijnt een veld voor het invoeren van de naam van het bericht, editor - er wordt een tekstgebied weergegeven voor het invoeren van de tekst van het bericht, enz. De gebruikte aangepaste taxonomie, product_category , wordt ook aangegeven.
- heeft_archief- indien ingesteld op true, wordt er een herschrijfregel gemaakt, zodat u een lijst met records van ons type kunt krijgen op http://mysite.com/product/
Nadat je deze code in je function.php-bestand hebt geïnstalleerd, zou je een menu voor het aangepaste berichttype moeten zien. Het is nu mogelijk om een record toe te voegen en de lijst met records te bekijken.
Dit zijn echter niet alle opties voor een reeks argumenten; u vindt een volledige lijst met opties en alle mogelijkheden van aangepaste typen.
Interactieve waarschuwingen
WordPress genereert enkele berichten die worden geactiveerd door gebruikersacties. We kunnen ook soortgelijke berichten maken om de gebruiker op de hoogte te stellen bij het werken met typen. Dit wordt gedaan door post_updated_messages.
1 | functie mijn_updated_messages( $messages ) ( |
Houd er rekening mee dat u met deze ene functie waarschuwingen kunt instellen voor alle aangepaste berichttypen. Als u geen typenaam opgeeft, worden waarschuwingen gebruikt voor alle aangepaste typen.
Contextuele aanwijzingen worden zelden geïmplementeerd en gebruikt. Als gebruiker heb ik deze functie nog nooit gebruikt, maar ik weet zeker dat iemand ze nog steeds gebruikt. Laten we dus dergelijke contextuele hulp creëren.
Contextuele hints bevinden zich in de rechterbovenhoek, vlakbij het tabblad Scherminstellingen.
1 | functie mijn_contextual_help( $contextual_help , $screen_id , $screen ) ( $contextuele_help = " Deze pagina bevat een lijst met alle producten die op de site worden verkocht. De vermeldingen zijn in omgekeerde chronologische volgorde, waarbij de laatst genoemde items de items zijn die we als eerste hebben toegevoegd. U kunt de details van elk product bekijken/bewerken door op de naam ervan te klikken, of u kunt bulkacties uitvoeren via het vervolgkeuzemenu door meerdere items te selecteren. ) elseif ( "product" == $screen -> id ) ( $contextuele_help = " Op deze pagina kunt u een product maken of bestaande gegevens erover bewerken. Zorg ervoor dat u de aanvullende velden invult. }
|
Om zo'n tooltip te kunnen tonen, moeten we de scherm-ID kennen. Als u tijdens het maken de scherm-ID wilt achterhalen, doet u dit:
echo $screen -> id; |
Aangepaste taxonomie
Voor een gewone blog zijn categorieën en tags voldoende om een organisatiestructuur te creëren. Terwijl dit voor aangepaste berichttypen niet altijd voldoende is. Een aangepaste taxonomie kan dit probleem oplossen. In ons geval is er sprake van een taxonomie met de naam ‘Productcategorieën’, die alleen wordt gebruikt voor berichten met het aangepaste type ‘Producten’.
Het proces van het maken van een aangepaste taxonomie is vrijwel identiek aan het maken van aangepaste berichttypen. Laten we naar ons voorbeeld kijken:
1 | functie mijn_taxonomies_product() ( |
Net als bij het maken van een aangepast type hebben we een labelarray gevormd en aangegeven dat de hiërarchische structuur relevant is voor de gemaakte taxonomie (d.w.z. er kunnen bovenliggende en onderliggende elementen zijn) - dit is typisch voor categorieën in reguliere berichten. Anders worden, als de structuur niet hiërarchisch is, gewone tags gemaakt. U kunt meer lezen over taxonomie.
Extra gegevensgebieden
Mogelijk heb je extra gebieden of blokken gezien voor gegevensinvoer (metaboxen) op de berichtbewerkingspagina. Iedereen kent de standaarden, zoals het kiezen van een categorie of tags. Ook zijn er in sommige onderwerpen opties waarmee u een afbeelding aan een bericht kunt toevoegen, enz.
Omdat we een aangepast type "Producten" maken, hebben we uiteraard de prijs van het product nodig. Laten we eens kijken naar het proces van het maken van aangepaste producten.
Het creatieproces kan in 3 fasen worden verdeeld:
- Definitie van het blok zelf;
- Het definiëren van de inhoud (welke velden aanwezig zijn in het blok);
- Beschrijving van algoritmen voor het verwerken van ingevoerde gegevens.
Definitie van metaboxen
1 | add_action( "add_meta_boxes", "product_price_box" ); |
De bovenstaande code maakt een blok met de volgende parameters:
- product_prijs_doos— een unieke identificatiecode voor de metabox (deze hoeft niet overeen te komen met de functienaam);
- Product prijs— de naam van de metabox die de beheerder op de pagina ziet;
- product_price_box_content— een functie die de inhoud van het venster weergeeft;
- Product— de naam van het aangepaste berichttype waartoe de metaboxen behoren;
- kant— positie van het blok op de pagina (standaard, normaal of geavanceerd);
- hoog— prioriteit van metaboxen (in dit geval “hoog”, het blok bevindt zich helemaal bovenaan de zijbalk. Opties: hoog, kern, laag of standaard - standaard).
Inhoudsdefinitie
1 | functie product_price_box_content( $post ) ( |
We voegen slechts één veld toe om de prijs van het product in te voeren. Merk op dat de naam van de functie overeenkomt met de waarde van de derde parameter wanneer deze wordt gedeclareerd (code hierboven).
Verwerking van ingevoerde gegevens
De laatste stap is het opslaan van de ingevoerde productprijs in de database.
1 | add_action("save_post", "product_price_box_save" ); als (gedefinieerd("DOING_AUTOSAVE") && DOING_AUTOSAVE) if (! wp_verify_nonce( $_POST [ "product_price_box_content_nonce"] , plug-in_basisnaam( __FILE__ ) ) ) if ( "pagina" == $_POST [ "post_type" ] ) ( |
Het grootste deel van de functie bestaat uit controles. Allereerst wordt automatisch opslaan aangevinkt; de prijs wordt pas opgeslagen als op de knop Opslaan of Update wordt gedrukt. Vervolgens worden de toegangsrechten om de gegevens van dit bericht te bewerken gecontroleerd en pas daarna wordt met behulp van de update_post_meta-functie de prijs in de database ingevoerd.
Berichten van het gemaakte type op de blog weergeven
We hebben alle fasen doorlopen van het maken van een aangepast berichttype. Het enige dat overblijft is profiteren van de vruchten van ons werk en een weergave van berichten op de blog maken in overeenstemming met de taxonomie die we hebben vastgesteld.
Omdat we tijdens het maken van het aangepaste type true hebben opgegeven voor de parameter has_archive, is de lijst met records van het producttype beschikbaar op http://mysite.com/product/.
Het archief-.php-bestand (in ons geval archief-product.php) wordt gebruikt voor weergave als het bestaat. Anders wordt archive.php gebruikt voor weergave en als een dergelijk bestand niet in het thema zit, wordt )
)
;
$products = nieuwe WP_Query( $args );
if ($producten -> have_posts () ) (
while ($products -> have_posts () ) (
$producten -> de_post () ;
?>
<
h1>
h1>
<
div class
=
"content"
>
div>
}
}
anders(
echo "Oh nee, geen eten gevonden!";
}
?>
Prijsweergave
De extra ingevoerde gegevens, in ons geval de prijs van het product, kunnen worden opgehaald met behulp van de get_post_meta() functie. Omdat we bovendien het veld product_price gebruiken om de prijswaarde te verkrijgen:
Plug-in voor het maken van aangepaste berichttypen
Als u niet zeker bent van uw programmeervaardigheden, kunt u altijd een kant-en-klare oplossing (plug-in) vinden en deze gebruiken. Aangepaste typen zijn geen uitzondering. Inpluggen WCK-maker van aangepast berichttype Hiermee kunt u eenvoudig aangepaste berichttypen voor WordPress maken zonder enige codeerkennis.
De standaardcategorieën worden alleen gebruikt voor berichten. In sommige scenario's wil je ze misschien gebruiken met een aangepast berichttype. In dit artikel vertellen wij je hoe je dit doet.
Plug-in methode
Voor beginnende gebruikers raden we aan de Custom Post Type UI-plug-in te gebruiken om een aangepast berichttype te maken. Met deze plug-in heb je de mogelijkheid om een aangepast berichttype te koppelen aan elke ingebouwde of aangepaste taxonomie, inclusief categorieën. Nadat je de plug-in hebt geïnstalleerd, ga je naar CPT UI »Posttypes toevoegen/bewerken om een nieuw aangepast berichttype te maken of een bestaand berichttype te bewerken.
Blader omlaag naar Geavanceerde opties en daar ziet u de optie Ingebouwde taxnomieën. Vink het vakje naast categorieën aan en sla uw berichttype op.
Handmatig categorieën toevoegen voor een aangepast berichttype
Als je een aangepast berichttype hebt gemaakt door code toe te voegen aan je function.php-bestand, dan zul je die code moeten wijzigen om de categorie toe te voegen als een ondersteunde taxonomie. Het enige wat je hoeft te doen is deze regel toevoegen aan je aangepaste berichttype-argumenten:
‘taxonomieën’ => array(‘categorie’),
Het is mogelijk dat u deze regel al in uw code heeft met een andere aangepaste taxonomie. Als dat zo is, hoeft u er alleen maar een komma achter te zetten en een categorie toe te voegen:
‘taxonomieën’ => array(‘onderwerpen’, ‘categorie’),
Hier is een voorbeeld van de hele code waarin we een aangepast berichttype hebben gemaakt met de naam 'films', met ondersteuning voor alle ingebouwde categorieën.
Functie custom_post_type() ( // Stel UI-labels in voor aangepast berichttype $labels = array("name" => _x("Movies", "Post Type General Name", "twentythirteen"), "singular_name" => _x(" Film", "Berichttype enkelvoudige naam", "twentythirteen"), "menu_name" => __("Films", "twentythirteen"), "parent_item_colon" => __("Ouderfilm", "twentythirteen"), "all_items " => __("Alle films", "twentythirteen"), "view_item" => __("Film bekijken", "twentythirteen"), "add_new_item" => __("Nieuwe film toevoegen", "twentythirteen"), "add_new" => __("Nieuw toevoegen", "twentythirteen"), "edit_item" => __("Film bewerken", "twentythirteen"), "update_item" => __("Film bijwerken", "twentythirteen") , "search_items" => __("Film zoeken", "twentythirteen"), "not_found" => __("Niet gevonden", "twentythirteen"), "not_found_in_trash" => __("Niet gevonden in prullenbak", " Twentythirteen")), // Andere opties instellen voor aangepast berichttype $args = array("label" => __("movies", "twentythirteen"), "description" => __("Filmnieuws en -recensies", "twentythirteen"), "labels" => $labels, "supports" => array("title", "editor", "uittreksel", "auteur", "thumbnail", "opmerkingen", "revisies", "aangepast -fields",), "hiërarchisch" => false, "public" => true, "show_ui" => true, "show_in_menu" => true, "show_in_nav_menus" => true, "show_in_admin_bar" => true, "menu_position " => 5, "can_export" => true, "has_archive" => true, "exclude_from_search" => false, "publicly_queryable" => true, "capability_type" => "page", // Dit is waar we taxonomieën toevoegen naar onze CPT "taxonomieën" => array("category"),); // Uw aangepaste berichttype registreren register_post_type("movies", $args); ) /* Sluit de actie "init" aan, zodat de functie * die onze posttyperegistratie bevat, * niet onnodig wordt uitgevoerd. */ add_action("init", "custom_post_type", 0);
Meerdere berichttypen weergeven op een categoriepagina
Standaard geven categoriepagina's op een WordPress-site het standaard berichttype weer. Als je wilt dat je berichttype op dezelfde categoriepagina verschijnt als de standaardberichten, moet je de volgende code toevoegen aan je function.php-bestand:
Add_filter("pre_get_posts", "query_post_type"); function query_post_type($query) ( if(is_category()) ( $post_type = get_query_var("post_type"); if($post_type) $post_type = $post_type; else $post_type = array("nav_menu_item", "post", " films"); // vergeet nav_menu_item niet om menu's te laten werken! $query->set("post_type",$post_type); return $query; ) )
Vergeet niet om films te wijzigen in de naam van je aangepaste berichttype.
Onze specialiteit is de ontwikkeling en ondersteuning van WordPress sites. Contacten voor gratis advies - ,