Laf berichttype. De beste WordPress-plug-ins voor aangepaste berichttypen. Sjabloon voor het maken van een nieuw berichttype

Maakt een nieuw recordtype of wijzigt een bestaand type.

Sinds versie 4.6 is er een nieuwe klasse WP_Post_Type gemaakt en wordt alle functiecode nu verwerkt door deze klasse, en deze functie is er een wrapper voor geworden.

taxonomieën

Als je een taxonomie registreert voor een nieuw berichttype, registreer dan altijd die taxonomie wanneer je het berichttype registreert met behulp van de taxonomieënparameter. Als je dat niet doet, worden het berichttype en de taxonomieën niet herkend als geassocieerd wanneer hooks zoals parse_query of pre_get_posts worden geactiveerd. Dit kan leiden tot onverwachte gevolgen en fouten.

Taxonomieën moeten apart worden geregistreerd. De taxonomie wordt opgegeven bij het registreren van het berichttype, maar dit is slechts een relatie, deze moet afzonderlijk worden geregistreerd met register_taxonomie ().

Belangrijk: na het aanmaken van een nieuw berichttype. Zorg ervoor dat u naar de pagina Instellingen → Permalinks gaat. Dit is nodig om de NC-regels opnieuw te maken en de regels van het nieuwe recordtype daar toe te voegen.

Geeft terug

WP_Post_Type-object (sinds versie 4.6).

Sjabloon voor het maken van een nieuw berichttype
add_action ("init", "register_post_types"); functie register_post_types () (register_post_type ("post_type_name", array ("label" => null, "labels" => array ("name" => "____", // hoofdnaam voor het berichttype "singular_name" => " ____ ", // naam voor één record van dit type" add_new "=>" Toevoegen ____ ", // om een ​​nieuw record toe te voegen" add_new_item "=>" Toevoegen ____ ", // de titel van het nieuw aangemaakte record in de admin panel." edit_item "=>" Bewerken ____ ", // om het berichttype te bewerken" new_item "=>" Nieuw ____ ", // de tekst van het nieuwe bericht" view_item "=>" View ____ ", // om de post van dit type te bekijken." Search_items " => "Zoeken naar ____", // om naar dit type records te zoeken "not_found" => "Niet gevonden", // als er niets werd gevonden als resultaat van de zoekopdracht "not_found_in_trash" => "Niet gevonden in het winkelmandje", // indien niet gevonden in het winkelmandje "parent_item_colon" => "", // voor ouders (voor boomsoorten) "menu_name" => "____", // menunaam), "description" => "", "public" => true, // "publicly_queryable" => null , // hangt af van openbaar // "exclude_from_search" => null, // hangt af van openbaar // "show_ui" => null, // hangt af van openbaar // "show_in_nav_menus" => null, // hangt af van openbaar "show_in_menu "=> null, // of te tonen in het admin-menu //" show_in_admin_bar "=> null, // hangt af van show_in_menu" show_in_rest "=> null, // toevoegen aan de REST API. C WP 4.7 "rest_base" => null, // $ post_type. C WP 4.7 "menu_position" => null, "menu_icon" => null, // "capability_type" => "post", // "capabilities" => "post", // reeks extra rechten voor dit posttype / / "map_meta_cap" => null, // Stel in op true om de standaard handler voor speciale rechten in te schakelen "hiërarchisch" => false, "supports" => ["title", "editor"], // "title", "editor ", " author "," thumbnail "," excerpt "," trackbacks "," custom-fields "," comments "," revisies "," page-attributes "," post-formats "" taxonomieën "=>," has_archive "= > false, "rewrite" => true, "query_var" => true,)); )

Gebruik

register_post_type ($ post_type, $ argumenten); $ post_type (string) (verplicht)

Naam recordtype (maximaal 20 tekens). Mag alleen kleine letters, cijfers, _ of - bevatten: a-z0-9_-.

Gereserveerde titels voor berichttypen... De volgende namen kunnen niet worden gebruikt voor nieuwe berichttypen, omdat deze door WordPress worden gebruikt en uw code in strijd is met de huidige WordPress-code of -functies:

Bijlage revisie posten nav_menu_item custom_css customize_changeset actie auteur bestel thema $ args (matrix) Arrangement van argumenten.
Standaard: array () (standaardparameters)

$ Args parameterargumenten

label (lijn) De naam van het recordtype dat is gemarkeerd voor vertaling in een andere taal.
Standaard: $ post_type etiketten (matrix)

Voor niet-ingestelde tekenreeksen (d.w.z. de standaard), wordt het volgende gebruikt:

  • Voor niet-boom post types, de namen van "posts".
  • Voor boomachtige berichttypen, de namen van "permanente pagina's".

De volgende argumenten kunnen in de array worden opgegeven:

"name" => "", // hoofdnaam voor het berichttype, meestal meervoud. "singular_name" => "", // naam voor één record van dit type. "add_new" => "", // tekst voor het toevoegen van een nieuw item, hoe "nieuwe toevoegen" voor berichten in het beheerderspaneel. // Als u een vertaling van de naam moet gebruiken, voert u deze als volgt in: _x ("Nieuw toevoegen", "product"); "add_new_item" => "", // titeltekst voor een nieuw aangemaakt item in het beheerderspaneel. Hoe "Nieuw bericht toevoegen" voor berichten. "edit_item" => "", // tekst voor het bewerken van het berichttype. Standaard: bericht bewerken / pagina bewerken. "new_item" => "", // tekst van het nieuwe item. Standaard: "Nieuw bericht" "view_item" => "", // tekst voor het bekijken van een bericht van dit type. Standaard: "Bekijk bericht" / "Bekijk pagina". "search_items" => "", // tekst om naar deze berichttypen te zoeken. De standaardinstelling is "Vind bericht" / "Pagina zoeken". "not_found" => "", // tekst als er niets is gevonden als resultaat van de zoekopdracht. // Standaard: "Geen berichten gevonden" / "Geen pagina's gevonden". "not_found_in_trash" => "", // tekst als het niet in de prullenbak is gevonden. Standaard zijn "Er zijn geen berichten gevonden in het winkelmandje" / "Pagina's // zijn niet gevonden in het winkelmandje". "parent_item_colon" => "", // tekst voor bovenliggende typen. Deze parameter wordt niet gebruikt voor posttypes die geen boomstructuur zijn. // Standaard "Bovenliggende pagina". "all_items" => "", // Alle records. Standaard is het gelijk aan menu_name "archives" => "", // Recordarchieven. De standaardwaarde is all_items "insert_into_item" => "", // Insert "uploaded_to_this_item" => "", // Geüpload voor dit bericht "featured_image" => "", // Post thumbnail "set_featured_image" => "" , / / Stel de postminiatuur in "remove_featured_image" => "", // Verwijder de postminiatuur "use_featured_image" => "", // Gebruik de postminiatuur "filter_items_list" => "", // Filter de lijst met berichten "items_list_navigation " = > "", // Navigatie door de items "items_list" => "", // Lijst met items "menu_name" => "", // Naam van het menu. De standaard is naam. "name_admin_bar" => "", // Naam in de admin-balk (werkbalk). De standaard is singular_name. "view_items" => "", // Naam in de werkbalk, voor de archiefpagina van het berichttype. Standaard: Berichten bekijken / Pagina's bekijken. Sinds WP 4.7. "attributes" => "", // Naam voor de metabox van de postattributen (voor pagina's is dit de metabox "Page Attributes"). // Standaard: "Berichtkenmerken" of "Paginakenmerken". Sinds WP 4.7. "item_updated" => "", // De tekst van de notitie in de berichteditor wanneer het bericht is bijgewerkt. Met WP 5.0. // Standaard: "Bericht bijgewerkt." / "Pagina bijgewerkt." "item_published" => "", // De tekst van de notitie in de berichteditor wanneer het bericht is gepubliceerd. Met WP 5.0. // Standaard: "Post gepubliceerd." / "Pagina gepubliceerd." "item_published_privately" => "", // Tekst van de notitie in de berichteditor bij het publiceren van een privébericht. Met WP 5.0. // Standaard: "Post privé gepubliceerd." / "Pagina gepubliceerd" item_reverted_to_draft "=>" ", // Tekst van de notitie in de berichteditor wanneer het bericht wordt teruggezet naar concept. Met WP 5.0. // Standaard: "Bericht teruggezet naar concept." / "Pagina is teruggekeerd naar" item_scheduled "=>" ", // Tekst van de notitie in de berichteditor voor een geplande publicatie voor een toekomstige datum. Met WP 5.0. // Standaard: "Post gepland." / "Pagina gepland."

Voor een volledige lijst met waarden zie get_post_type_labels ()

Standaard: indien niet ingesteld, nemen naam en singuliere_naam de waarde van het label-argument aan

Beschrijving (lijn) Een korte beschrijving van dit berichttype. De waarde wordt gebruikt in de REST API. De waarde kan worden verkregen met behulp van de functie get_the_post_type_description ().
Standaard: "" openbaar (logisch)

Bepaalt of het berichttype openbaar is of niet. Vele andere zijn gebouwd op basis van deze parameter, d.w.z. dit is een soort voorinstelling voor de volgende parameters:

    • show_ui = false - laat de gebruikersinterface (UI) voor dit berichttype niet zien
    • publicly_queryable = false - zoekopdrachten met betrekking tot dit berichttype werken niet in de sjabloon
    • exception_from_search = true - dit berichttype wordt niet in aanmerking genomen bij het doorzoeken van de site
    • show_in_nav_menus = false - dit berichttype wordt verborgen in de navigatiemenuselectie
  • waar
    • show_ui = waar
    • publicly_queryable = waar
    • include_from_search = false
    • show_in_nav_menus = true
  • titel - titelblok;
  • editor - een blok voor het invoeren van inhoud;
  • auteur - auteur selectieblok;
  • miniatuurblok voor het selecteren van de recordminiatuur. Je moet ook ondersteuning inschakelen voor het installeren van het post-thumbnails-thema;
  • uittreksel - blok van offerteinvoer;
  • trackbacks - bevat ondersteuning voor trackbacks en pings (niet verantwoordelijk voor blokken);
  • custom-fields - blok voor het instellen van custom velden;
  • opmerkingen - blok met opmerkingen (discussie);
  • revisies - een blok met revisies (niet weergegeven, maar er zijn geen revisies);
  • pagina-attributen - een blok met attributen voor permanente pagina's (sjabloon en boomachtige relatie van berichten, boomachtige structuur moet zijn ingeschakeld).
  • postformaten - Een blok met postformaten, indien opgenomen in het onderwerp.

Standaard: array ("titel", "editor")

Register_meta_box_cb (lijn) callback-functie die wordt geactiveerd bij het instellen van metablokken voor de aanmaak-/bewerkpagina van dit berichttype. Gebruik remove_meta_box () en add_meta_box () in de callback-functie.
Standaard: nee taxonomieën (matrix)

Een array van geregistreerde taxonomieën die aan dit berichttype moeten worden gekoppeld, bijvoorbeeld: categorie of post_tag.

U kunt taxonomieën later aan een bericht koppelen met behulp van de functie register_taxonomy_for_object_type () .

Taxonomieën moeten worden geregistreerd met de functie register_taxonomy ().

Met deze parameter kunnen we specificeren welke groep eindpunten we willen verbinden met het gegenereerde berichttype (post-URL). Als u bijvoorbeeld "permalink_epmask" = EP_PAGES & EP_TAGS opgeeft, heeft ons berichttype alle aanvullende URL-varianten (eindpunten) die zijn voorzien voor permanente pagina's en tags.

Standaard is permalink_epmask = EP_PERMALINK - dit betekent dat eindpunten worden toegevoegd aan de URL van het posttype dat wordt gemaakt (in de CNC-regels), die worden toegevoegd aan reguliere WordPress-berichten: paginering, commentaarpagina, enz.

Als u geen eindpunten aan het nieuwe recordtype wilt toevoegen, moet u EP_NONE specificeren. Of omgekeerd, specificeer EP_ALL wanneer u alle eindpunten moet toevoegen.

Standaard: EP_PERMALINK

Has_archief (string / booleaans)

Schakel ondersteuning voor archiefpagina's voor dit berichttype in (bijv. URL van een bericht ziet er als volgt uit: site.ru/type/postnaam, dan ziet de URL van het archief er als volgt uit: site.ru/type.

Als u een string opgeeft, wordt deze in de CNC gebruikt. Laten we hier bijvoorbeeld de typepagina specificeren en een link krijgen naar het archief van het berichttype van het volgende type: site.ru/typepage.
Het bestand van dit archief in het thema ziet eruit als archive-type.php. Er wordt een nieuwe NC-regel toegevoegd voor archieven als het herschrijfargument is opgenomen.
Standaard: false

Herschrijven (array / booleaans)

Of de CNC voor dit type opname moet worden gebruikt. Geef false op om de CNC niet te gebruiken. Standaard: true - de naam van het berichttype wordt gebruikt als voorvoegsel in de link. U kunt aanvullende parameters in de array specificeren voor het bouwen van CNC:

    naaktslak (lijn)
    CNC-voorvoegsel (/ voorvoegsel / schrijflabel). Gebruik array ("slug" => $ slug) om een ​​ander voorvoegsel te maken.
    In deze parameter kunnen tijdelijke aanduidingen van het type% categorie% worden opgegeven. Maar je moet ze maken met add_rewrite_tag () en WP leren om ze te begrijpen.
    Standaard: naam van berichttype

    with_front (logisch)
    Of het nodig is om het algemene voorvoegsel uit de instellingen aan het begin in te voeren. Het voorvoegsel is afkomstig van $ wp_rewite-> front. Als de structuur van permalinks van berichten in de instellingen er bijvoorbeeld uitziet als blog /% postnaam%, dan krijgen we met false: / news / post_name, en met true krijgen we: / blog / news / post_name.
    Standaard: waar

    feeds (logisch)
    Of er een CNC-regel moet worden toegevoegd voor de RSS-feed van dit berichttype.
    Standaard: de waarde van het argument has_archive

  • Pagina's (logisch)
    Of er een CNC-regel moet worden toegevoegd voor de paginering van het archief met records van dit type. Vb: / post_type / pagina / 2.
    Standaard: waar

Standaard: true (recordtype wordt gebruikt als prefix)

Query_var (string / booleaans)

Stelt de naam in van de queryparameter voor het posttype dat wordt gemaakt.

Stel in op false om de mogelijkheid om query's uit te schakelen uit te schakelen.

  • false - Schakelt de verzoekparameter uit. Het bericht is niet beschikbaar op de URL: /? (Query_var) = (post_slug).
  • string - geeft de naam van de verzoekparameter aan. /? (query_var_string) = (post_slug).

Opmerking: query_var is zinloos als publicly_queryable = false.

Opmerking: deze parameter voegt de opgegeven waarde (indien niet opgegeven, het berichttypelabel) toe aan de lijst met toegestane WordPress-parameters, zodat WordPress deze queryparameter begrijpt, zie add_rewrite_tag (). WordPress verwijdert alle queryparameters die het niet kent.

Voorbeeld:
Stel dat we het recordtype op boeken zetten en dat we de tekenreeks boeknaam in deze parameter hebben gespecificeerd. Als je nu naar de boekpagina gaat via de link / boek / harry-potter, zal in de codeverwerking van deze pagina get_query_var ("boeknaam") harry-potter retourneren. En als we niets specificeerden in deze parameter (het zou waar zijn), dan zouden we get_query_var ("book") moeten gebruiken om de harry-potter te krijgen.

Standaard: true - $ post_type argument is ingesteld

Can_export (logisch) De mogelijkheid om dit type records te exporteren.
Standaard: waar delete_with_user (logisch)

  • true - verwijder records van dit type die aan de gebruiker toebehoren bij het verwijderen van de gebruiker. Als de prullenbak is ingeschakeld, worden de vermeldingen niet verwijderd, maar in de prullenbak geplaatst.
  • false - wanneer een gebruiker wordt verwijderd, worden zijn records van dit type op geen enkele manier verwerkt.
  • null - berichten worden verwijderd of naar de prullenbak verplaatst als post_type_supports ("auteur") is ingesteld. En ze worden niet verwerkt als het berichttype "auteur" niet ondersteunt.
// $ tax_slug = get_term_parents_list ($ term_id, $ tax_name, array ("separator" => "/", "format" => "slug", "link" => false, "inclusive" => true,));

Het is ook belangrijk dat bij het registreren van een berichttype de hiërarchische parameter onwaar is!

#3 Taxonomie toevoegen aan CNC (post en tax hebben hetzelfde prefix)

Dit voorbeeld laat zien hoe u een Vragen-record en secties ervoor maakt. In dit geval zal de CNC:

  • Voor een record: site.ru/faq/(category)/(label-records)
  • Bij de teckel: site.ru/faq/(category)

Het is belangrijk om eerst het tarief te wijzigen en vervolgens het type invoer ...

Add_action ("init", "register_faq_post_type"); functie register_faq_post_type () (// Vraagsectie - faqcat register_taxonomy ("faqcat", array ("faq"), array ("label" => "Vraagsectie", // gedefinieerd door de parameter $ labels-> naam "labels" => array ("name" => "Vraagsecties", "singular_name" => "Vraagsectie", "search_items" => "Zoeken naar Vraagsectie", "all_items" => "Alle Vraagsecties", "parent_item" => " Bovenliggende vraagsectie "," parent_item_colon "=>" Bovenliggende vraagsectie: "," edit_item "=>" Vraagsectie bewerken "," update_item "=>" Vraagsectie bijwerken "," add_new_item "=>" Sectie toevoegen vraag "," new_item_name "=>" Nieuwe vraagsectie "," menu_name "=>" Vraagsectie ",)," description "=>" Categorieën voor een vraagsectie ", // taxonomiebeschrijving" public "=> true, " show_in_nav_menus "=> false, // gelijk aan het argument public" show_ui "=> true, // gelijk aan het argument public" show_tagcloud "=> false, // gelijk aan het argument show_ui" hiërarchische "=> true," herschrijf "=> array (" slug "=>" faq "," hiërarchisch "=> false," with_front "=> false," feed "=> false)," show_admin_column "=> true, // Het al dan niet toestaan ​​van het automatisch aanmaken van een taxonomiekolom in de bijbehorende berichttypetabel. (sinds versie 3.5))); // post type - vragen - faq register_post_type ("faq", array ("label" => "Questions", "labels" => array ("name" => "Questions", "singular_name" => "Question", "menu_name" => "Vragenarchief", "all_items" => "Alle vragen", "add_new" => "Vraag toevoegen", "add_new_item" => "Nieuwe vraag toevoegen", "edit" => "Bewerken", "edit_item" => "Vraag bewerken", "new_item" => "Nieuwe vraag", "description" => "", "public" => true, "publicly_queryable" => true, "show_ui" => true , "show_in_rest" => false, "rest_base" => "", "show_in_menu" => true, "exclude_from_search" => false, "capability_type" => "post", "map_meta_cap" => true, "hiërarchisch" = > false, "rewrite" => array ("slug" => "faq /% faqcat%", "with_front" => false, "pages" => false, "feeds" => false, "feed" => false ), "has_archive" => "faq", "query_var" => true, "supports" => array ("title", "editor"), "taxonomieën" => array ("faqcat"),)); ) ## Laten we het willekeurige CNC-type filteren // filter: apply_filters ("post_type_link", $ post_link, $ post, $ leavename, $ sample); add_filter ("post_type_link", "faq_permalink", 1, 2); functie faq_permalink ($ permalink, $ post) (// exit als dit niet ons berichttype is: geen houder% products% if (strpos ($ permalink, "% faqcat%") === false) return $ permalink; // Belastingelementen ophalen $ termen = get_the_terms ($ post, "faqcat"); // als er een element is, vervang de houder als (! is_wp_error ($ termen) &&!lege ($ termen) && is_object ($ termen)) $ term_slug = array_pop ($ termen) -> slug; // er is geen element, maar er zou ... else $ term_slug = "no-faqcat" moeten zijn; return str_replace ("% faqcat%", $ term_slug, $ permalink); )

Opmerkingen:

Plugin voor posttype registreren

Er is een handige plug-in waarmee je nieuwe berichttypes en nieuwe taxonomieën kunt registreren: Custom Post Type UI

Titels van berichttypen hernoemen

Als het berichttype al is geregistreerd, maar we moeten het een andere naam geven, gebruik dan de volgende code.

Deze code laat zien hoe je het standaard berichttype "Posts" hernoemt naar "Artikelen":

## vervang het woord "records" door "articles" // $ labels = apply_filters ("post_type_labels _ ($ post_type)", $ labels); add_filter ("post_type_labels_post", "rename_posts_labels"); functie rename_posts_labels ($ labels) (// automatisch vervangen werkt niet bijvoorbeeld vervangen: Record = Artikel, en in de test zal het eruit zien als "Bekijk artikel" / * origineel stdClass Object ("naam" => "Records", " singular_name" => " Record "," add_new "=>" Voeg nieuw toe "," add_new_item "=>" Voeg record toe "," edit_item "=>" Bewerk record "," new_item "=>" Nieuw record "," view_item "=>" Bekijk record "," search_items "=>" Zoek naar records "," not_found "=>" Geen records gevonden. "," not_found_in_trash "=>" Geen records gevonden in winkelwagen. "," parent_item_colon "=> " "," all_items " => "Alle berichten", "archieven" => "Berichtarchieven", "insert_into_item" => "Invoegen in bericht", "uploaded_to_this_item" => "Geüpload voor dit bericht", "featured_image" = > "Miniatuur plaatsen", "set_featured_image" => "Miniatuur instellen", "remove_featured_image" => "Miniatuur verwijderen", "use_featured_image" => "Gebruiken als miniatuur", "filter_items_list" => "Invoerlijst filteren", "items_list _navigation "=>" Navigeren door de lijst met items "," items_list "=>" Lijst met items "," menu_name "=>" Entries "," name_admin_bar "=>" Entries ",) * / $ new = array (" name " => "Artikelen", "singular_name" => "Artikel", "add_new" => "Artikel toevoegen", "add_new_item" => "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 de basket." , "parent_item_colon" => "", "all_items" => "Alle artikelen", "archives" => "Artikelarchieven", "insert_into_item" => "Invoegen in artikel", "uploaded_to_this_item" => "Geupload voor dit artikel "," featured_image "=>" Miniatuur artikel "," filter_items_list "=>" Filter de lijst met artikelen "," items_list_navigation "=>" Navigeer door de lijst met artikelen "," items_list "=>" Lijst met artikelen "," menu_name "=> "Artikelen", "name_admin_bar" => "Artikel", // paragraaf "toevoegen"); return (object) array_merge ((array) $ labels, $ nieuw); )

Zeer goedkope maar kwalitatieve Instagram-volgers zijn beschikbaar op https://doctorsmm.com/. Hier vindt u elk aanbod persoonlijk voor uw account. De site biedt een breed scala aan kwaliteit van toegevoegde pagina's en snelheidslimieten, en is ook gericht op het publiek per geografie.

Opmerkingen:

  • Globaal. Reeks. $ wp_post_types Lijst met berichttypes.

Lijst met wijzigingen

Sinds versie 2.9.0 Geïntroduceerd.
Sinds versie 3.0.0 Het argument show_ui wordt nu afgedwongen op het nieuwe berichtscherm.
Sinds versie 4.4.0 Het argument show_ui wordt nu afgedwongen in het berichttypelijstscherm en het berichtbewerkingsscherm.
Sinds versie 4.6.0 Het geretourneerde posttype-object is nu een instantie van WP_Post_Type.
Sinds versie 4.7.0 Introductie van show_in_rest, rest_base en rest_controller_class argumenten om het berichttype in REST API te registreren.

Posttypecode registreren: wp-includes / post.php WP 5.2.3

20) (_doing_it_wrong (__ FUNCTION__, __ ("Namen van berichttypes moeten tussen 1 en 20 tekens lang zijn"), "4.2.0"); retourneer nieuwe WP_Error ("post_type_length_invalid", __ ("Namen van berichttypes moeten tussen 1 en 20 tekens lang. "));) $ Post_type_object = nieuw WP_Post_Type ($ post_type, $ args); $ post_type_object-> add_supports (); $ post_type_object-> add_rewrite_rules (); $ post_type_object-> register_meta_boxes (); $ wp_post_types [$ post_type] = $ post_type_object; $ post_type_object-> add_hooks (); $ post_type_object-> register_taxonomies (); / ** * Brandt nadat een berichttype is geregistreerd. * * @since 3.3.0 * @since 4.6.0 De parameter `$ post_type` geconverteerd om een ​​`WP_Post_Type`-object te accepteren. * * @param string $ post_type Berichttype. * @param WP_Post_Type $ post_type_object Argumenten die worden gebruikt om het berichttype te registreren. * / do_action ("registered_post_type", $ post_type, $ post_type_object); retourneer $ post_type_object; )

In de les van vandaag maken we kennis met het concept aangepast berichttype, en leer ook hoe u uw eigen maatwerk kunt maken berichttype en een sjabloon ervoor. Aangepast berichttype dit is een van de hoofdrichtingen in WordPress waarmee de ontwikkelaars werken.

V WordPress-e blogberichten en pagina's zijn allemaal berichttype en om de functionaliteit uit te breiden, moet de ontwikkelaar nieuwe toevoegen berichttype... U heeft bijvoorbeeld een website voor het verkopen van boeken, u publiceert deze boeken niet als blogposts. Om dit te doen, maakt u een nieuwe berichttype met de titel "boek", die zijn eigen uiterlijk, zijn eigen sjabloon en zijn eigen instellingen zal hebben.

Vandaag maken we onze berichttype recht hebben "boek" die een aangepaste sjabloon heeft voor de openbare post en voor de archiefpagina. Laten we eerst de documentatie bekijken WordPress - Codex / berichttype... De eerste stap in de code is om alle namen in (Standaard berichttypes) die we niet kunnen gebruiken bij het registreren van nieuwe postnamen.

Aangepaste berichten maken in WordPress er is een speciale functie - register_post_type ()... Laten we eens kijken naar het onderstaande voorbeeld.

Functie register_post_type verbindt met de kern WordPress een andere haakfunctie gebruiken - add_action... Een haak is een haak waarmee we onze functie aan de kern vasthaken. WordPress, die, bij het initialiseren van zijn functies, de onze toevoegt.

Laten we proberen onze te registreren berichttype, kopieer het stukje code uit het bovenstaande voorbeeld en plak het in het bestand functie.php, start onderwerp laag streepje, die we in de vorige les hebben geïnstalleerd en hebben genoemd mijn thema- "Wordpress themabestanden". Dit kan via het admin panel WordPress in het onderwerp, Uiterlijk / Editor, open het bestand functie.php en plak de code uit de code onderaan het document.

Laten we deze code eens nader bekijken. WordPress registreert berichttype de functie gebruiken register_post_type... Parameters worden tussen haakjes doorgegeven, de eerste parameter acme_product- dit is ID kaart een nieuw type bericht dat we veranderen in onze boek.

Register_post_type ("boek",

Het wordt gevolgd door de parameter die deze functie ontvangt, dit is een reeks instellingen, in het voorbeeld zijn er slechts drie, maar in de documentatie zijn er veel meer. Laten we hernoemen "Producten" Aan "boeken", een "Product" Aan "boek".

reeks (
"labels" => matrix (
"naam" => __ ("boeken"),
"singular_name" => __ ("boek")
),

Openbaar betekent dat het bericht openbaar is, iedereen het ziet en naar het archief gaat has_archive.

"openbaar" => waar,
"has_archive" => waar,
)

Zorg ervoor dat je opmerkingen boven de code schrijft, wat voor soort code het is, zodat je niet vergeet waarom je het daar hebt geplaatst.

/**
* Mijn blog custome code.
*/

Sla het bericht op, ga naar de beheerdersconsole en zie een nieuw berichttype boek, het is echter met het minimale aantal instellingen.

Op de codexpagina ziet u een volledige lijst met instellingen. We moeten de mogelijkheid toevoegen om een ​​voorbeeldafbeelding toe te voegen, de parameter in de array doorgeven "miniatuur"... Laten we het ook terugzetten titel en editor.

"supports" => array ("titel", "editor", "thumbnail"),

Op dezelfde manier kunt u andere instellingen uit de documentatie toevoegen. Aanbevolen voor aangepaste titels, waaronder: berichttype voorvoegsels toepassen (mijn boek) om conflicten met andere plug-ins te voorkomen, omdat de namen hetzelfde kunnen zijn. Om fouten te voorkomen WordPress beveelt al uw ontwikkelde functies, variabelen, ID kaart, klassen en constanten moeten met voorvoegsels worden geschreven.

Aangepast sjabloon voor een nieuw berichttype

Laten we twee berichten maken in een nieuw berichttype boek met titels Boek 1 en Boek 2 en open de site op http://my_blog.com/book/.

We zien dat de gecreëerde post type boek, niet de standaard berichttype WordPress maar de oude is toch geladen archief.php, en we moeten onze eigen maken, in plaats van de standaard. We willen dat de boeken niet in blogposts staan, maar er anders uitzien, zonder de typische blogstructuur. Laten we een leeg bestand maken archief-boek.php en sluit er een hoed op aan,

get_header ();
?>

get_footer ();
?>

en maak de uitvoer van de inhoud in een lus door de code uit de documentatiesectie te kopiëren Post_Types vervangen "Product" Aan "boek".

$ args = array ("post_type" => "boek", "posts_per_page" => 10);
$ loop = nieuwe WP_Query ($ args);
while ($ loop-> have_posts ()): $ loop-> the_post ();
de titel ();
echo "

";
de inhoud ();
echo "
";
eindtijd;
?>

Dezelfde actie moet worden gedaan voor het bestand enkele.php.

Het is algemeen bekend dat inhoud het belangrijkste onderdeel is van elke website. WordPress biedt standaard verschillende soorten inhoud, meer gericht op blog- of nieuwsoriëntatie. Als u echter sites wilt maken met een andere, niet-standaard structuur (bijvoorbeeld online winkels of sites die services bieden), moet u uw eigen typen maken die voldoen aan de opgegeven criteria, waardoor u meer flexibiliteit krijgt om de bron verder uit te breiden.

Wat zijn aangepaste berichttypen in WordPress?

De volledige inhoud van de site wordt opgeslagen en weergegeven door de "engine" in de vorm van zogenaamde records, die elk tot een bepaald type behoren. Bijvoorbeeld, Bladzijde is van het berichttype “ bladzijde"En de blogpost is" na”. Dit zijn standaard WordPress datatypes die al aanwezig zijn in een vers geïnstalleerd exemplaar van de engine. Een willekeurig type is een handmatig gegenereerd nieuw inhoudstype. Op het moment van bekendmaking wordt een nieuw type records in het systeem geregistreerd. Hier zijn voorbeelden van gevallen waarin het nodig is om een ​​willekeurig gegevenstype te maken:

  • Boeken (boeken),
  • organisaties
  • Mensen
  • Producten
  • Plaatsen enz.

Waarom uw eigen WordPress-berichttype maken?

Door uw eigen berichttype te maken, kunt u inhoud op de site invoeren en weergeven op de manier die u nodig hebt, specifiek voor deze informatie. Bovendien kunt u met het aangepaste gegevenstype elk type informatie in de WordPress-database opslaan.

Wanneer is het de moeite waard om een ​​aangepast berichttype te maken?

Meestal is het maken van een aangepast berichttype nodig voor inhoud die niet past bij de ingebouwde berichttypen ( Records en Pagina's). Bovendien kunt u met het nieuwe type de nodige opties aan de vermeldingen toevoegen (bijvoorbeeld namen, adressen, telefoonnummers, enz.)

Plug-ins voor het werken met aangepaste berichttypen

Aangepaste (niet-standaard) berichttypen in WordPress kunnen op twee manieren worden gemaakt: met behulp van een plug-in of handmatig. De laatste methode is het meest tijdrovend, omdat het zorgt voor een goede voorbereiding van de gebruiker in programmeertalen. We zullen een eenvoudigere optie overwegen die hetzelfde probleem oplost, maar met een eenvoudigere methode - via de beheerdersinterface, zonder enige programmeerkennis. Hiervoor zijn speciale plugins ontwikkeld die met succes worden toegepast. Laten we kennis maken met de meest populaire van hen.

Aangepast berichttype UI-plug-in

De Custom Post Type UI-add-on biedt de gebruiker een eenvoudige en intuïtieve interface voor het maken en beheren van aangepaste gegevenstypen in WordPress. Een van de belangrijkste voordelen zijn:

  • de mogelijkheid om willekeurige typen toe te voegen aan ingebouwde of andere handmatig gemaakte typen;
  • ondersteuning voor verschillende opties voor de editor van records;
  • de aanwezigheid van een aparte lijst met berichttypen die is gemaakt via de plug-in.

Inpluggen Gebruikersinterface voor aangepast berichttype heeft ook nadelen, vooral voor een beginnende WordPress-gebruiker:

  • berichttypen die via de plug-in zijn gemaakt, moeten handmatig aan thema's worden toegevoegd;
  • nogal karige beschrijving van de mogelijkheden;
  • onmogelijkheid om aangepaste velden toe te voegen.

Toolset Types Plugin

Met de plug-in Toolset Types kunt u, in tegenstelling tot de vorige, aangepaste velden en taxonomieën toevoegen (categorisatie). Een van de belangrijkste kenmerken:

  • ondersteuning voor uitgebreide functies van willekeurige typen;
  • de mogelijkheid om de toegang tot velden te beheren die gebruikers kunnen bewerken en bekijken;
  • de aanwezigheid van tooltips voor complexe functies;
  • de mogelijkheid om ouder-kindrelaties tussen alle typen te creëren;
  • aanwezigheid van export / import-mogelijkheid voor plug-ingegevens;
  • meertaligheid;
  • de mogelijkheid om alle velden te herhalen.

Een belangrijk nadeel van de plug-in, vooral voor beginnende gebruikers, is het ongemak in het werk, aangezien aangepaste berichttypen en aangepaste velden op verschillende schermen van het beheerderspaneel worden gepresenteerd.

Aangepaste berichttypen en plug-in voor het maken van aangepaste velden - WCK

WCK Custom Post Type Creator is een andere plug-in voor het maken en beheren van aangepaste berichttypen in WordPress, en biedt een handige en intuïtieve interface. Voordelen van de add-on:

  • eenvoud en duidelijkheid van de interface;
  • de mogelijkheid om aangepaste berichttypen, taxonomieën en aangepaste velden te maken en te ondersteunen, evenals metavelden voor berichten, pagina's en aangepaste berichttypen;
  • beschikbaarheid van een snelstartgids.

Aangepaste Post Type Maker-plug-in

Custom Post Type Maker is een WordPress-plug-in waarmee u met maximale gebruiksvriendelijkheid aangepaste berichttypen en taxonomieën kunt maken. De oplossing is volledig geïntegreerd met: WordPress-API en biedt ondersteuning voor bijna alle parameters Aangepaste berichttype-API... Heeft een aantal voordelen:

  • de aanwezigheid van een goed doordachte interface met aparte secties Berichttypen en taxonomieën;
  • de aanwezigheid van een interface voor het beheren van willekeurige berichttypen zoals reguliere berichten en pagina's;
  • biedt alle benodigde mogelijkheden om aangepaste berichttypen te maken en te beheren;
  • biedt de mogelijkheid om bijna alle parameters in te stellen Aangepaste berichttype-API.

Een van de nadelen van de plug-in is het ontbreken van de mogelijkheid om aangepaste berichttypen en taxonomieën weer te geven.

CPT-onomieën plug-in

CPT-onomies is een aangepaste plug-in van het posttype die compatibel is met WordPress multisite. Hiermee kunt u krachtige taxonomieën en relaties tussen berichten maken. Een van de voordelen zijn:

  • het vermogen om taxonomieën te gebruiken;
  • het vermogen om relaties tussen records te creëren;
  • ondersteuning voor het registreren van andere aangepaste berichttypen die zijn gemaakt door WordPress-plug-ins en -thema's;
  • volledige ondersteuning op meerdere locaties. Het is mogelijk om aangepaste berichttypen en taxonomieën op het hele internet of alleen voor specifieke sites te registreren.

De plug-in is al lang niet meer bijgewerkt, dus hij is niet zo populair onder WordPress-gebruikers.

MB plug-in voor aangepast berichttype

Met de plug-in MB Custom Post Type kunt u aangepaste berichttypen en taxonomieën maken, waardoor ze gemakkelijk te beheren zijn dankzij een intuïtieve interface. Een van de voordelen van het supplement zijn de volgende:

  • ondersteuning voor alle typeargumenten na;
  • makkelijk te gebruiken;
  • ondersteuning voor live-editing-modus, die automatisch alle benodigde labels invult;
  • import / export ondersteuning voor aangemaakte berichttypes;
  • de mogelijkheid om functionaliteit uit te breiden met behulp van add-ons.

Voor het werk MB Aangepast berichttype De Meta Box-plug-in moet zijn geïnstalleerd.

Aangepaste plug-in voor posttype-generator

Custom Post Type Generator is een eenvoudige en duidelijke oplossing waarmee u aangepaste berichttypen kunt genereren vanuit het WordPress-dashboard. De plug-in biedt:

  • eenvoudige interface;
  • mogelijkheid om te genereren PHP-code om aangepaste berichttypen en taxonomieën op te nemen in thema's en plug-ins;
  • afzonderlijke uitvoer van aangepaste berichttypen, ingebouwde typen en typen die door het thema worden ondersteund.

Nadeel Aangepaste berichttype-generator is het ontbreken van weergave van geregistreerde berichttypes en taxonomieën in de lijst met bewerkbare objecten.

Plugin Pods - Aangepaste inhoudstypen en velden

Met de Pods-plug-in kunt u bijna elk type inhoud maken, ongeacht de complexiteit ervan. Dankzij de gebruiksvriendelijke interface kunt u eenvoudig aangepaste velden en inhoudstypen beheren. Voordelen van de oplossing:

  • duidelijke interface;
  • de aanwezigheid van een groot aantal opties;
  • de mogelijkheid om aangepaste berichttypen, aangepaste taxonomieën, instellingenpagina's, enz.
  • de mogelijkheid om aangepaste velden toe te voegen aan aangepaste taxonomieën;
  • het creëren van geavanceerde inhoudstypes die hun eigen tabellen in de database zullen gebruiken;
  • de mogelijkheid om bestaande inhoudstypen uit te breiden, zoals berichttypen, taxonomieën, media, gebruikers, opmerkingen.

Het enige nadeel: Pods is een lastige voor een beginnende WordPress-gebruiker gezien de uitgebreide documentatie.

In ons artikel over het maken en gebruiken van je eigen aangepaste berichttypen, hebben we de basisprincipes van aangepaste berichttypen in Wordpress behandeld en geprobeerd om aan de slag te gaan met het maken van je eigen berichttypen. We hebben ook gewezen op manieren om de modulariteit te behouden door een apart PHP-bestand te gebruiken, waarmee we berichttypen van sjabloon naar sjabloon kunnen migreren.

Vandaag willen we u vertellen over het proces van het maken van een taxonomie voor uw eigen berichttypen, evenals het maken van uw eigen velden en metaboxen, het opslaan van gegevens en het gebruiken ervan in uw eigen sjablonen voor Wordpress.

Laten we beginnen!

Taxonomie maken (om op categorie te kunnen sorteren)

De volgende stap in onze tutorial is het maken van taxonomieën waarmee we onze eigen berichttypen in categorieën kunnen sorteren. In termen van efficiëntie is dit ongeveer hetzelfde als categorieën voor berichten, behalve dat we er met slechts een paar regels code van kunnen maken wat we willen.

Hiervoor gebruiken we de Wordpress-functie. Zoals je hieronder en in codex.wordpress.org kunt zien, zijn de benodigde argumenten taxonomie, gevolgd door het objecttype en ten slotte $ args. Voor ons voorbeeld hebben we 2 taxonomieën gemaakt: vaardigheden en clubniveau. We passen taxonomieën toe op het posttype van de atleet en stellen vervolgens argumenten in, inclusief snelkoppelingen, en overschrijfrechten. Laten we de code eens bekijken.

Register_taxonomy ("Sport", array ("atleet"), array ("hiërarchisch" => true, "label" => "Sport", "singular_label" => "Sport", "rewrite" => true));
register_taxonomy ("Club Level", array ("athlete"), array ("hiërarchisch" => true, "label" => "Club Level", "singular_label" => "Club Level", "rewrite" => true) );
Geregistreerde taxonomieën zien er ongeveer als volgt uit.

U kunt op het berichttype klikken en u wordt doorgestuurd naar een pagina die erg lijkt op een categoriepagina, waar u uw eigen taxonomieën kunt toevoegen.

Al klaar?

Hmm, over het algemeen heb je al je eigen posttype dat werkt. Maar op dit moment is het niet anders dan reguliere opnames. Laten we een duik nemen in het maken van aangepaste velden voor uw berichten waarmee u unieke informatie kunt opgeven en deze vervolgens in sjablonen kunt weergeven.

Uw eigen velden maken

Om de echte magie te doen met je aangepaste berichttypes, moet je eerst een functie initialiseren om metaboxen toe te voegen. We noemen de onze admin_init (), en het ziet er als volgt uit:

Add_action ("admin_init", "admin_init");

functie admin_init () (
add_meta_box ("personal_info", "Persoonlijke Info", "personal_info", "atleet", "normaal", "laag");
}
Het eerste deel van onze code initialiseert de admin_init () functie. Het is duidelijk dat het tweede deel van deze code de functie zelf is. Over het algemeen vertelt deze code uw sjabloon om een ​​nieuwe metabox met de naam "Persoonlijke Info" te maken, deze in het berichttype van de atleet te plaatsen en het vervolgens een lage prioriteit te geven (locatie in het berichttype).

Koel! Zijn we nu klaar?

Nog niet. Maar al heel dichtbij! Laten we nog wat aangepaste velden toevoegen. Dit is relevanter voor HTML dan voor PHP.

Maak velden in uw eigen metaboxen

En nu begint de pret. We gaan een metablok maken met persoonlijke gegevens (we hebben het hierboven al gedaan, en nu gaan we het invullen), waarin de voor- en achternaam van de persoon, het geslacht, het e-mailadres, het telefoonnummer en de datum van geboorte.

Om dit te doen, maken we een functie genaamd personal_info (). Dezelfde functie die we hebben aangeroepen in de admin_init () functie. Doe nu het licht aan? Alle lijnen komen samen.

De standaardcategorieën worden alleen voor berichten gebruikt. In sommige scenario's wilt u ze misschien gebruiken met een aangepast berichttype. In dit artikel laten we je zien hoe je dit kunt doen.

Plug-in methode:

Voor nieuwe gebruikers raden we aan om 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. Ga na het installeren van de plug-in naar CPT UI »Posttypes toevoegen / bewerken om een ​​nieuw aangepast berichttype te maken of een bestaand bericht te bewerken.

Scrol omlaag naar Geavanceerde opties en daar ziet u de optie Ingebouwde taxnomieën. Vink het vakje naast de categorieën aan en sla je berichttype op.

Handmatig categorieën toevoegen voor een aangepast berichttype

Als je een aangepast berichttype hebt gemaakt door code toe te voegen aan je functions.php-bestand, dan moet je die code aanpassen om de categorie toe te voegen als een ondersteunde taxonomie. Het enige dat u hoeft te doen, is deze regel toevoegen aan uw aangepaste berichttypeargumenten:

‘Taxonomieën’ => array (‘categorie’),

Het is mogelijk dat u deze regel al in uw code heeft met een andere aangepaste taxonomie. Als dat het geval is, hoeft u alleen maar een komma toe te voegen en een categorie toe te voegen:

‘Taxonomieën’ => array (‘onderwerpen’, ‘categorie’),

Hier is een heel codevoorbeeld waarin we een aangepast berichttype hebben gemaakt met de naam "movies" met ondersteuning voor alle ingebouwde categorieën.

Functie custom_post_type () (// Stel UI-labels in voor Custom Post Type $ labels = array ("name" => _x ("Films", "Algemene naam bericht", "twentythirteen"), "singular_name" => _x (" Film "," Post Type Singular Name "," Twentythirteen ")," menu_name "=> __ (" Movies "," Twentythirteen ")," parent_item_colon "=> __ (" Parent Movie "," Twentythirteen ")," all_items "=> __ (" Alle films "," Twentythirteen ")," view_item "=> __ (" View Movie "," Twentythirteen ")," add_new_item "=> __ (" Nieuwe film toevoegen "," Twentythirteen "), "add_new" => __ ("Nieuwe toevoegen", "twentythirteen"), "edit_item" => __ ("Film bewerken", "twentythirteen"), "update_item" => __ ("Film bijwerken", "twentythirteen") , "search_items" => __ ("Search Movie", "twentythirteen"), "not_found" => __ ("Not Found", "twentythirteen"), "not_found_in_trash" => __ ("Niet gevonden in Prullenbak", " Twentythirteen "),); // Stel andere opties in voor Custom Post Type $ args = array (" label "=> __ (" movies "," Twentythirteen ")," description "=> __ (" Movie news and reviews ", "dertien" ), "labels" => $ labels, "supports" => array ("titel", "editor", "uittreksel", "auteur", "thumbnail", "opmerkingen", "revisies", "aangepaste velden" ,), "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", // Hier voegen we taxonomieën toe aan onze CPT "taxonomieën" => array ("categorie"),); // Uw Custom Post Type registreren register_post_type ("movies", $ args); ) / * Haak in op de "init" actie zodat de functie * die onze post type registratie 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, dan moet je de volgende code toevoegen aan je Functions.php-bestand:

Add_filter ("pre_get_posts", "query_post_type"); functie 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", " movies "); // 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 het ontwikkelen en ondersteunen van WordPress-sites. Contacten voor een gratis consult -,