Feig innleggstype. De beste WordPress-pluginene for å jobbe med tilpassede innleggstyper. Mal for å lage en ny posttype

Oppretter en ny posttype eller endrer en eksisterende.

Siden versjon 4.6 ble en ny klasse WP_Post_Type opprettet og all funksjonskode behandles nå av denne klassen, og denne funksjonen har blitt en innpakning for den.

Taksonomier

Hvis en taksonomi er registrert for en ny posttype, registrer alltid den taksonomien når du registrerer posttypen ved å bruke taxonomies-parameteren. Hvis du ikke gjør dette, vil ikke posttypen og taksonomiene bli gjenkjent som relaterte når kroker som parse_query eller pre_get_posts utløses. Dette kan føre til uventede konsekvenser og feil.

Taksonomier skal registreres separat. Taksonomien spesifiseres ved registrering av en posttype, men dette er kun en forbindelse den må registreres separat, ved hjelp av register_taxonomi() .

Viktig: etter å ha opprettet en ny posttype. Pass på å gå til Innstillinger → Permalinks-siden. Dette er nødvendig for at CNC-reglene skal gjenskapes og reglene for den nye posttypen legges til der.

Returnerer

WP_Post_Type-objekt (fra versjon 4.6).

Mal for å lage en ny posttype
add_action("init", "register_post_types"); function register_post_types())( register_post_type("post_type_name", array("label" => null, "labels" => array("name" => "____", // hovednavn for posttypen "singular_name" => "____ ", // navnet på en oppføring av denne typen "add_new" => "Legg til ____", // for å legge til en ny oppføring "add_new_item" => "Legger til ____", // tittelen på den nyopprettede oppføringen i administrasjonspanelet "edit_item " => "Redigering av ____", // for å redigere et innlegg type "new_item" => "Ny ____", // tekst til et nytt innlegg "view_item" => "Se ____", / / for å se et innlegg av denne typen "search_items" => "Søk ____", // for å søke etter disse posttypene "not_found" => "Ikke funnet", // hvis ingenting ble funnet som et resultat av søket ". not_found_in_trash" => "Ikke funnet i papirkurven", // hvis ikke ble funnet i handlekurven "parent_item_colon" => "", // for foreldre (for tretyper) "menu_name" => "____", // meny navn), "description" => "", "public" => sant, // "publicly_queryable" => null, // avhenger av offentlig // "exclude_from_search" => null, // avhenger av offentlig // "show_ui " => null, // avhenger av offentlig // "show_in_nav_menus" = > null, // avhenger av offentlig "show_in_menu" => null, // om admin-menyen skal vises i menyen // "show_in_admin_bar" => null , // avhenger av show_in_menu "show_in_rest" => null, // legg til 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", // en rekke tilleggsrettigheter for denne posttypen // "map_meta_cap" => null, // Sett true for å aktivere standard spesialrettighetsbehandler "hierarchical" => false, "supports" => [ "title", "editor" ], // "title","editor "," forfatter","thumbnail","utdrag","trackbacks","tilpassede felter","kommentarer","revisjoner","sideattributter","post-formater" "taksonomier" => , " has_archive" => usann, "rewrite" => sant, "query_var" => sant,)); )

Bruk

register_post_type($post_type, $args); $post_type (streng) (påkrevd)

Posttypenavn (maksimalt 20 tegn). Kan bare inneholde små bokstaver, tall, _ eller - : a-z0-9_- .

Reserverte navn for innleggstyper. Du kan ikke bruke følgende navn for nye innleggstyper da de brukes av WordPress og koden din vil være i konflikt med gjeldende WordPress-kode eller funksjonalitet:

Revisjon av innleggssidevedlegg nav_menu_item custom_css customize_changeset handling forfatter bestillingstema $args (matrise) En rekke argumenter.
Standard: array() (standardparametere)

$args Parameterargumenter

merkelapp (linje) Navnet på en posttype merket for oversettelse til et annet språk.
Standard: $post_type etiketter (matrise)

For ikke-innstilte strenger (dvs. standard), vil følgende bli brukt:

  • For posttyper som ikke er tre - navnene på "innlegg".
  • For treposttyper - navnene på de "permanente sidene".

Følgende argumenter kan spesifiseres i matrisen:

"name" => "", // hovednavnet for innleggstypen, vanligvis i flertall. "singular_name" => "", // navn for en post av denne typen. "add_new" => "", // tekst for å legge til en ny oppføring, som "legg til ny" for innlegg i administrasjonspanelet. // Hvis du trenger å bruke en oversettelse av navnet, skriv det inn slik: _x("Legg til nytt", "produkt"); "add_new_item" => "", // titteltekst for den nyopprettede oppføringen i administrasjonspanelet. Hvordan "Legg til et nytt innlegg" for innlegg. "edit_item" => "", // tekst for å redigere innleggstypen. Standard: rediger innlegg/rediger side. "new_item" => "", // tekst til den nye oppføringen. Standard: "Nytt innlegg" "view_item" => "", // tekst for å se et innlegg av denne typen. Standard: "Se innlegg"/"Vis side". "search_items" => "", // tekst for å søke etter disse innleggstypene. Standard er "Finn innlegg"/"finn side". "not_found" => "", // tekst hvis ingenting ble funnet som et resultat av søket. // Standard: "Ingen innlegg ble funnet"/"Ingen sider ble funnet." "not_found_in_trash" => "", // tekst hvis den ikke ble funnet i papirkurven. Som standard, "Ingen innlegg ble funnet i handlekurven"/"Sider // ble ikke funnet i handlekurven." "parent_item_colon" => "", // tekst for overordnede typer. Dette alternativet brukes ikke for posttyper som ikke er tre. // Standard er "Overordnet side". "all_items" => "", // Alle oppføringer. Standard er menu_name "arkiver" => "", // Arkiver med oppføringer. Standard for all_items "insert_into_item" => "", // Sett inn i innlegget "uploaded_to_this_item" => "", // Lastet opp for dette innlegget "featured_image" => "", // Miniatyrbilde for innlegg "set_featured_image" => "" , // Sett miniatyrbildet for innlegget "remove_featured_image" => "", // Fjern innleggets miniatyrbilde "use_featured_image" => "", // Bruk miniatyrbildet for innlegget "filter_items_list" => "", // Filtrer listen over innlegg " items_list_navigation" = > "", // Navigering gjennom oppføringer "items_list" => "", // Liste over oppføringer "menu_name" => "", // Menynavn. Standard for navn. "name_admin_bar" => "", // Navn i admin-linjen (verktøylinjen). Standard er singular_name. "view_items" => "", // Tittel i verktøylinjen for innleggstypens arkivside. Standard: "Se innlegg" / "Vis sider". Med WP 4.7. "attributes" => "", // Navn på metaboksen for innleggsattributter (for sider er dette metaboksen "Sideegenskaper" - "Sideattributter"). // Standard: "Innleggsattributter" eller "Sideattributter". Med WP 4.7. "item_updated" => "", // Tekst til notatet i innleggsredigeringsprogrammet når du oppdaterer et innlegg. Med WP 5.0. // Standard: "Innlegg oppdatert." / "Siden er oppdatert." "item_published" => "", // Tekst til notatet i innleggsredigeringsprogrammet når du publiserer et innlegg. Med WP 5.0. // Standard: "Innlegg publisert." / "Side publisert." "item_published_privately" => "", // Tekst til notatet i innleggsredigeringsprogrammet når du publiserer et privat innlegg. Med WP 5.0. // Standard: "Innlegg publisert privat." / "Side publisert "item_reverted_to_draft" => "", // Teksten til notatet i innleggsredigeringsprogrammet når innlegget returneres til utkast. Med WP 5.0. // Standard: "Innlegget er tilbakestilt til utkast." / "Side reverted to "item_scheduled" => "", // Tekst til notatet i innleggsredigeringsprogrammet når publisering er planlagt til en fremtidig dato. Med WP 5.0. // Standard: "Innlegg planlagt." / "Side planlagt."

For en fullstendig liste over verdier se get_post_type_labels()

Standard: hvis ikke angitt, vil navn og singular_name ta verdien av etikettargumentet

Beskrivelse (linje) En kort beskrivelse av denne typen innlegg. Verdien brukes i REST API. Verdien kan fås ved å bruke get_the_post_type_description()-funksjonen.
Standard: "" offentlig (logisk)

Bestemmer om innleggstypen er offentlig eller ikke. Mange andre er bygget på grunnlag av denne parameteren, dvs. Dette er en slags forhåndsinstallasjon for følgende parametere:

    • show_ui = false - ikke vis brukergrensesnittet (UI) for denne posttypen
    • publicly_queryable = false - spørringer relatert til denne posttypen vil ikke fungere i malen
    • exclude_from_search = true - denne typen innlegg vil ikke bli tatt i betraktning når du søker på nettstedet
    • show_in_nav_menus = false - denne typen innlegg vil bli skjult fra navigasjonsmenyen
  • ekte
    • show_ui = sant
    • publicly_queryable = sant
    • ekskluder_fra_søk = usann
    • show_in_nav_menus = sant
  • tittel - tittelblokk;
  • editor - blokk for å legge inn innhold;
  • forfatter - forfattervalgblokk;
  • thumbnail blokk for å velge en post thumbnail. Du må også aktivere støtte for installasjon av post-thumbnails-temaet;
  • utdrag - sitat input blokk;
  • trackbacks - muliggjør støtte for trackbacks og ping (ikke ansvarlig for blokkeringer);
  • egendefinerte felt - blokk for å angi egendefinerte felt;
  • kommentarer - kommentarblokk (diskusjon);
  • revisjoner - blokk med revisjoner (vises ikke før det ikke er noen revisjoner);
  • sideattributter - blokk med attributter for permanente sider (mal og trelignende forhold mellom poster, trelignende struktur må være aktivert).
  • postformater – blokk med postformater, hvis de er aktivert i temaet.

Standard: array("tittel","editor")

Register_meta_box_cb (linje) tilbakeringingsfunksjon som vil utløses når du setter metablokker for opprettelse/redigering av denne typen innlegg. Bruk remove_meta_box() og add_meta_box() i tilbakeringingsfunksjonen.
Standard: nei taksonomier (matrise)

En rekke registrerte taksonomier som vil knyttes til denne posttypen, for eksempel: kategori eller post_tag .

Du kan knytte taksonomier til et innlegg senere ved å bruke register_taxonomy_for_object_type()-funksjonen.

Taksonomier må registreres ved å bruke register_taxonomien()-funksjonen.

Denne parameteren lar oss spesifisere hvilken gruppe endepunkter vi ønsker å koble til posttypen vi oppretter (innleggs-URLen). Hvis vi for eksempel spesifiserer "permalink_epmask" = EP_PAGES & EP_TAGS , vil innleggstypen vår ha alle de ekstra URL-variasjonene (endepunktene) som er gitt for permanente sider og tagger.

Som standard er permalink_epmask = EP_PERMALINK - dette betyr at endepunktene som legges til vanlige WordPress-innlegg vil bli lagt til URL-en til den opprettede posttypen (i CNC-reglene), som legges til vanlige WordPress-innlegg: paginering, kommentarside, etc.

Hvis du ikke vil legge til noen endepunkter til den nye posttypen, må du spesifisere EP_NONE . Eller omvendt, vi spesifiserer EP_ALL når vi må legge til alle endepunkter.

Standard: EP_PERMALINK

Har_arkiv (streng/boolsk)

Aktiver støtte for arkivsider for denne typen innlegg (eksempel: post-URLen ser slik ut: site.ru/type/post_name, så vil arkiv-URLen se slik ut: site.ru/type.

Hvis du spesifiserer en streng, vil den bli brukt i CNC. For eksempel spesifiserer vi typepage her og får en lenke til et arkiv av en posttype av denne typen: site.ru/typepage.
Arkivfilen i temaet vil se ut som archive-type.php . En ny CNC-regel vil bli lagt til for arkiver hvis omskrivingsargumentet er aktivert.
Standard: usant

Omskrive (matrise/boolsk)

Om man skal bruke CNC for denne typen opptak. For ikke å bruke CNC, spesifiser false. Standard: true - posttypenavnet brukes som et prefiks i lenken. Du kan spesifisere ytterligere parametere i matrisen for å konstruere en CNC:

    mordersnegle (linje)
    Prefiks i CNC (/prefix/record_label). Bruk array("slug" => $slug) for å lage et annet prefiks.
    I denne parameteren kan du spesifisere plassholdere av typen %category%. Men de må opprettes ved hjelp av add_rewrite_tag() og læres opp til WP for å forstå dem.
    Standard: navn på posttype

    with_front (logisk)
    Må jeg sette inn et vanlig prefiks fra innstillingene i begynnelsen? Prefikset er hentet fra $wp_rewite->front . For eksempel, hvis strukturen til permalinker for innlegg i innstillingene ser ut som blog/%postname% , så får vi: /news/post_name, hvis false, og hvis true vi får: /blog/news/post_name.
    Standard: sant

    feeds (logisk)
    Om det skal legges til en CNC-regel for RSS-feeder av denne typen oppføring.
    Standard: har_arkiv-argumentverdi

  • sider (logisk)
    Bør jeg legge til en CNC-regel for paginering av et arkiv med poster av denne typen? Eks: /post_type/page/2 .
    Standard: sant

Standard: sann (posttype brukes som prefiks)

Query_var (streng/boolsk)

Angir navnet på spørringsparameteren for den opprettede posttypen.

Sett den til usann for å deaktivere muligheten for spørringer.

  • false - deaktiverer forespørselsparameteren. Innlegget vil ikke være tilgjengelig på URL: /?(query_var)=(post_slug) .
  • streng - angir navnet på forespørselsparameteren. /?(query_var_string)=(post_slug) .

Merk: query_var har ingen betydning hvis publicly_queryable = false .

Merk: Denne parameteren legger til den angitte verdien (hvis den ikke er spesifisert, så posttype-taggen) til WordPress-listen over tillatte parametere slik at WordPress forstår denne spørringsparameteren, se add_rewrite_tag() . WordPress fjerner alle søkeparametere den ikke kjenner til.

Eksempel:
La oss si at vi angir bokinnleggstypen og spesifiserte boknavnstrengen i denne parameteren. Nå, hvis du går til boksiden via lenken /book/harry-potter , i koden som behandler denne siden vil get_query_var("boknavn") returnere harry-potter . Og hvis vi ikke spesifiserte noe i denne parameteren (det ville være sant), så må vi bruke get_query_var("bok") for å få Harry-potter.

Standard: sann - argumentet $post_type er satt

Kan_eksportere (logisk) Mulighet for å eksportere denne typen poster.
Standard: sant slett_med_bruker (logisk)

  • true - slett poster av denne typen som tilhører brukeren når brukeren slettes. Hvis papirkurven er aktivert, vil ikke oppføringene bli slettet, men legges i papirkurven.
  • usant - når en bruker slettes, vil ikke hans registre av denne typen bli behandlet på noen måte.
  • null - oppføringer vil bli slettet eller flyttet til papirkurven hvis post_type_supports("author") er satt. Og de vil ikke bli behandlet hvis posttypen ikke støtter "forfatter".
// $tax_slug = get_term_parents_list($term_id, $tax_name, array("separator" => "/", "format" => "slug", "link" => usant, "inclusive" => sant,));

Det er også viktig at når du registrerer en posttype, skal den hierarkiske parameteren være falsk !

#3 Legge til taksonomi til CNC (oppføring og skatt har samme prefiks)

Dette eksemplet viser hvordan du oppretter et spørsmålsinnlegg og seksjoner for det. I dette tilfellet vil CNC:

  • Ved oppføringen: site.ru/faq/(category)/(label-entry)
  • Dachs: site.ru/faq/(category)

Her er det viktig å først registrere takst, og deretter posttype...

Add_action("init", "register_faq_post_type"); function register_faq_post_type() ( // Spørsmålsseksjon - faqcat register_taxonomi("faqcat", array("faq"), array("label" => "Spørsmålsseksjon", // bestemt av parameteren $labels->name "etiketter" => array("name" => "Spørsmålsseksjoner", "singular_name" => "Spørsmålsseksjonen", "search_items" => "Søkespørsmålsseksjonen", "all_items" => "Alle spørsmålsseksjoner", "parent_item" = > " Genererer spørsmålsseksjonen", "parent_item_colon" => "Genererer spørsmålsseksjonen", "edit_item" => "Rediger spørsmålsseksjonen", "update_item" => "Oppdater spørsmålsseksjonen", "add_new_item" => "Legg til seksjonen question", "new_item_name" => "Ny spørsmålsseksjon", "menu_name" => "Spørsmålsseksjon", "description" => "Kategorier for spørsmålsseksjonen", // taksonomibeskrivelse "public" => sant, " show_in_nav_menus " => usant, // lik argumentet public "show_ui" => sant, // lik argumentet public "show_tagcloud" => usant, // lik argumentet show_ui "hierarchical" => sant, "rewrite" => array(" slug"=>"faq", "hierarchical"=>false, "with_front"=>false, "feed"=>false), "show_admin_column" => true, // Hvorvidt auto skal tillates eller ikke -oppretting av en taksonomikolonne i den tilhørende tabellposttypen. (fra versjon 3.5))); // post type - spørsmål - faq register_post_type("faq", array("label" => "Spørsmål", "etiketter" => array("name" => "Spørsmål", "singular_name" => "Spørsmål", "menu_name" => "Arkiv med spørsmål", "all_items" => "Alle spørsmål", "add_new" => "Legg til et spørsmål", "add_new_item" => "Legg til et nytt spørsmål", "edit" => " Rediger", "edit_item" => "Rediger spørsmål", "new_item" => "Nytt spørsmål", "description" => "", "public" => sant, "publicly_queryable" => sant, "show_ui" => sant , "show_in_rest" => usann, "rest_base" => "", "show_in_menu" => sant, "exclude_from_search" => usant, "capability_type" => "innlegg", "map_meta_cap" => sant, " hierarchical" => false, "rewrite" => array("slug"=>"faq/%faqcat%", "with_front"=>false, "pages"=>false, "feeds"=>false, "feed" =>false ), "has_archive" => "faq", "query_var" => true, "supports" => array("tittel", "editor"), "taksonomies" => array("faqcat"),) ); ) ## Filtrer en CNC av en vilkårlig type // filter: application_filters("post_type_link", $post_link, $post, $leavename, $sample); add_filter("post_type_link", "faq_permalink", 1, 2); funksjon faq_permalink($permalink, $post)( // exit hvis dette ikke er vår posttype: uten holder %products% if(strpos($permalink, "%faqcat%") === false) return $permalink; // Hent skatteelementer $terms = get_the_terms($post, "faqcat"); // hvis det er et element, bytt ut holderen if(! is_wp_error($terms) && !empty($terms) && is_object($terms)) $term_slug = array_pop($terms)->slug; // det er ikke noe element, men det skal være... else $term_slug = "no-faqcat"; return str_replace("%faqcat%", $term_slug, $permalink); )

Notater

Plugin for å registrere posttype

Det er en praktisk plugin som lar deg registrere nye innleggstyper og nye taksonomier: Custom Post Type UI

Gi nytt navn til posttypeoverskrifter

Hvis posttypen allerede er registrert, men vi trenger å navngi den noe annet, bruk følgende kode.

Denne koden viser hvordan du endrer navn på standard Post-innleggstypen til Artikler:

## erstatte ordet “posts” med “articles” //$labels = apply_filters("post_type_labels_($post_type)", $labels); add_filter("post_type_labels_post", "rename_posts_labels"); function rename_posts_labels($labels)( // vil ikke erstatte automatisk, for eksempel erstattet: Post = Artikkel, og i testen vil det se slik ut "Se artikkelen" /* original stdClass Object ("navn" => "Innlegg" , "singular_name" => " Oppføring", "add_new" => "Legg til ny", "add_new_item" => "Legg til oppføring", "edit_item" => "Rediger oppføring", "new_item" => "Ny oppføring", "view_item" => "Vis post", "search_items" => "Søker i poster", "not_found" => "Ingen poster funnet.", "not_found_in_trash" => "Ingen poster ble funnet i papirkurven.", "parent_item_colon " => "", "all_items" => "Alle innlegg", "arkiver" => "Innleggsarkiver", "insert_into_item" => "Sett inn i innlegg", "uploaded_to_this_item" => "Lastet opp for dette innlegget", " featured_image" => "Legg inn thumbnail", "set_featured_image" => "Sett thumbnail", "remove_featured_image" => "Fjern thumbnail", "use_featured_image" => "Bruk som thumbnail", "filter_items_list" => "filtrering" ", "items_list_navigation" => "Navigering etter liste over innlegg", "items_list" => "Liste over innlegg", "menu_name" => "Innlegg", "name_admin_bar" => "Innlegg",) */ $new = array("name" => "Artikler", " singular_name" => "Artikkel", "add_new" => "Legg til artikkel", "add_new_item" => "Legg til artikkel", "edit_item" => "Rediger artikkel", "new_item" => "Ny artikkel", "view_item " => "Se artikkel", "search_items" => "Søk etter artikler", "not_found" => "Ingen artikler funnet.", "not_found_in_trash" => "Nei artikler funnet i papirkurven.", "parent_item_colon" => " ", "all_items" => "Alle artikler", "archives" => "Artikkelarkiver", "insert_into_item" => "Sett inn i artikkel", "uploaded_to_this_item" => "Lastet opp for denne artikkelen", "featured_image" => "Artikkelminiatyrbilde", "filter_items_list" => "Filtrer listen over artikler", "items_list_navigation" => "Navigering gjennom listen over artikler", "items_list" = > "Liste over artikler", "menu_name" => "Artikler", "name_admin_bar" => "Artikkel", // element "add"); return (objekt) array_merge((matrise) $etiketter, $ny); )

Veldig billige, men høykvalitets Instagram-følgere er tilgjengelige på https://doctorsmm.com/. Her kan du finne ethvert tilbud tilpasset kontoen din. Nettstedet tilbyr et bredt utvalg av kvalitet på lagt til sider og hastighetsmodus, samt geografisk målgruppemålretting.

Notater

  • Global. Array. $wp_post_types Liste over innleggstyper.

Liste over endringer

Fra versjon 2.9.0 Introdusert.
Fra versjon 3.0.0 Show_ui-argumentet håndheves nå på den nye postskjermen.
Fra versjon 4.4.0 Show_ui-argumentet håndheves nå på posttype-oppføringsskjermen og postredigeringsskjermen.
Fra versjon 4.6.0 Posttypeobjekt returnert er nå en forekomst av WP_Post_Type .
Fra versjon 4.7.0 Introduserte argumentene show_in_rest , rest_base og rest_controller_class for å registrere posttypen i REST API.

Registrer posttypekode: wp-includes/post.php WP 5.2.3

20) ( _doing_it_wrong(__FUNCTION__, __("Innleggstypenavn må være mellom 1 og 20 tegn lange."), "4.2.0"); return new WP_Error("post_type_length_invalid", __("Innleggstypenavn må være mellom 1 og 20 tegn lange.")); ) $post_type_object = new 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(); /** * Avfyres etter at en posttype er registrert. * * @since 3.3.0 * @since 4.6.0 Konverterte `$post_type`-parameteren til å akseptere et `WP_Post_Type`-objekt. * * @param string $post_type Innleggstype. * @param WP_Post_Type $post_type_object Argumenter brukt for å registrere posttypen. */ do_action("registered_post_type", $post_type, $post_type_object); returner $post_type_object; )

I dagens leksjon skal vi gjøre oss kjent med konseptet tilpasset innleggstype, og lær også hvordan du lager din egen tilpassede posttype og en mal for det. Egendefinert innleggstype dette er en av hovedretningene i WordPress, som utviklere jobber med.

I WordPress blogginnlegg og sider – alt dette posttype og for å utvide funksjonaliteten, må utvikleren legge til nye posttype. For eksempel har du en nettside for salg av bøker, du vil ikke publisere disse bøkene som blogginnlegg. For å gjøre dette vil du opprette en ny posttype med tittel "bok", som vil ha sitt eget utseende, sin egen mal og sine egne innstillinger.

I dag skal vi lage vår egen posttype har krav på "bok", som vil ha en egendefinert mal for det offentlige innlegget og for arkivsiden. La oss ta en titt på dokumentasjonen først WordPress - Codex/Post Type. Først av alt viser koden alle navnene i (Standard innleggstyper), som vi ikke kan bruke når vi registrerer nye innleggstitler.

For å lage tilpassede innlegg i WordPress det er en spesiell funksjon - register_post_type(). La oss se på eksemplet nedenfor.

Funksjon registerpost_type kobles til kjernen WordPress bruke en annen krokfunksjon - add_action. En krok er en krok som vi fester funksjonen vår til kjernen med WordPress, som ved initialisering av funksjonene legger til våre.

La oss prøve å registrere vår posttype, kopier kodebiten fra eksempelet ovenfor og lim den inn i filen function.php, starttema understrek, som vi installerte i forrige leksjon og kalte mitt_tema- "Wordpress-temafiler" . Du kan gjøre dette via administrasjonspanelet WordPress om emnet Utseende / Redaktør, åpne filen function.php og lim inn koden fra koden nederst i dokumentet.

La oss se på denne koden mer detaljert. WordPress registrerer posttype ved å bruke funksjonen registerpost_type. Parametre sendes i parentes, den første parameteren acme_product- Dette id en ny type innlegg, som vi endrer til vår egen bok.

Register_post_type("bok",

Det etterfølges av parameteren som denne funksjonen mottar, dette er en rekke innstillinger, i eksemplet er det bare tre av dem, men i dokumentasjonen er det mange flere. La oss gi nytt navn "Produkter""bøker", A "Produkt""bok".

Array(
"etiketter" => array(
"navn" => __("bøker"),
"singular_name" => __("bok")
),

Offentlig betyr at innlegget er offentlig, alle kan se det og det går inn i arkivet har_arkiv.

"public" => sant,
"has_archive" => sant,
)

Husk å skrive kommentarer over koden om hva slags kode det er, slik at du selv ikke glemmer hvorfor du la den der.

/**
* Egendefinert kode for min blogg.
*/

Lagre innlegget, gå til administrasjonskonsollen og se den nye posttypen bok, men den har et minimalt antall innstillinger.

På kodekssiden vil du se en fullstendig liste over innstillinger. Vi må legge til muligheten til å legge til et forhåndsvisningsbilde, vi vil sende parameteren i matrisen "thumbnail". La oss også gå tilbake tittel Og redaktør.

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

På samme måte kan du legge til andre innstillinger fra dokumentasjonen. Anbefalt for egendefinerte titler, inkludert posttype bruke prefikser (min bok), for å unngå konflikt med andre plugins, fordi navnene kan være de samme. For å unngå feil WordPress anbefaler alle dine utviklede funksjoner, variabler, id, klasser og konstanter skal skrives med prefikser.

Egendefinert mal for en ny posttype

La oss lage to innlegg i en ny posttype bok med titler Bok 1 Og Bok 2 og åpne en nettside på http://my_blog.com/book/.

Vi ser at den vi laget har blitt lastet inn bok av posttype, ikke standard WordPress-innleggstype, men fortsatt lastet gammel archive.php, men vi må lage vår egen, i stedet for standarden. Vi ønsker at bøkene ikke skal stå i blogginnlegg, men se annerledes ut, uten den typiske bloggstrukturen. La oss lage en tom fil arkiv-bok.php og koble en hette til den,

get_header();
?>

get_footer();
?>

og sende ut innholdet i en loop ved å kopiere koden fra dokumentasjonsdelen Post_Types, erstatte "produkt""bok".

$args = array("post_type" => "bok", "posts_per_page" => 10);
$loop = new WP_Query($args);
while ($loop->have_posts()): $loop->the_post();
tittelen();
ekko "

";
innholdet();
ekko "
";
endwhile;
?>

Lignende handlinger må gjøres for filen singel.php.

Det er allment kjent at innhold er hovedkomponenten på ethvert nettsted. WordPress tilbyr flere typer innhold som standard, mer rettet mot blogging eller nyhetsorientering. For å lage nettsteder med en annen, ikke-standard struktur (for eksempel nettbutikker eller nettsteder som tilbyr tjenester), er det imidlertid nødvendig å lage dine egne typer som oppfyller de angitte kriteriene, noe som gir fleksibilitet for ytterligere utvidelse av ressursen.

Hva er tilpassede innleggstyper i WordPress?

"Motoren" lagrer og viser alt innhold på nettstedet i form av såkalte poster, som hver tilhører en bestemt type. For eksempel, Side refererer til innleggstypen " side", og blogginnlegget er " post" Dette er standard WordPress-datatyper som allerede finnes i en nyinstallert kopi av motoren. En tilpasset type er en manuelt generert ny innholdstype. På tidspunktet for kunngjøringen vil en ny posttype bli registrert i systemet. Her er eksempler på tilfeller der det er nødvendig å opprette en egendefinert datatype:

  • Bøker (bøker),
  • Organisasjoner (organisasjoner),
  • Mennesker (mennesker),
  • Produkter (produkter),
  • Steder (steder) etc.

Hvorfor lage din egen WordPress-posttype?

Når du oppretter din egen posttype, kan du legge inn og vise innhold på nettstedet på ønsket måte, spesifikt for denne informasjonen. I tillegg vil en tilpasset datatype tillate deg å lagre alle typer informasjon i WordPress-databasen din.

Når er det verdt å lage en egendefinert posttype?

Vanligvis er det nødvendig å opprette en egendefinert posttype for innhold hvis utdata ikke passer innenfor de innebygde typene ( Innlegg Og Sider). Dessuten vil den nye typen tillate deg å legge til de nødvendige alternativene til poster (for eksempel navn, adresser, telefonnumre osv.)

Plugins for å jobbe med tilpassede innleggstyper

Egendefinerte (ikke-standard) innleggstyper i WordPress kan opprettes på to måter: ved hjelp av en plugin eller manuelt. Den siste metoden er den mest arbeidskrevende, da den krever at brukeren er godt forberedt på programmeringsspråk. Vi vil vurdere et enklere alternativ som løser det samme problemet, men på en enklere måte - gjennom admin-grensesnittet, uten å kreve noen programmeringskunnskap. For dette formålet har spesielle plugins blitt utviklet og brukt med hell. La oss bli kjent med de mest populære av dem.

Custom Post Type UI Plugin

Custom Post Type UI-tillegget gir brukeren et enkelt og intuitivt grensesnitt for å lage og administrere tilpassede datatyper i WordPress. Blant de viktigste fordelene er:

  • muligheten til å legge til egendefinerte typer til innebygde eller andre manuelt opprettede;
  • støtte for ulike postredigeringsalternativer;
  • tilstedeværelsen av en egen liste over innleggstyper opprettet gjennom plugin.

Plugg inn Custom Post Type UI har også negative sider, spesielt for en nybegynner WordPress-bruker:

  • innleggstyper opprettet gjennom plugin-en må legges til manuelt i emner;
  • en ganske mager beskrivelse av evnene;
  • manglende evne til å legge til egendefinerte felt.

Toolset Types plugin

Toolset Types-pluginen, i motsetning til den forrige, lar deg legge til egendefinerte felt og taksonomier (kategorisering). Blant hovedfunksjonene:

  • støtte for avanserte funksjoner av vilkårlige typer;
  • muligheten til å kontrollere tilgang til felt som brukere kan redigere og se;
  • tilstedeværelsen av verktøytips for komplekse funksjoner;
  • evnen til å skape foreldre-barn-relasjoner mellom alle typer;
  • tilstedeværelsen av eksport/import-funksjoner for plugin-data;
  • flerspråklig;
  • muligheten til å gjenta alle felt.

En betydelig ulempe med plugin, spesielt for nybegynnere, er uleiligheten med driften, siden tilpassede innleggstyper og tilpassede felter presenteres på forskjellige skjermer i administrasjonspanelet.

Tilpassede innleggstyper og tilpassede felt-skaperplugin – WCK

WCK Custom Post Type Creator er en annen plugin for å lage og administrere tilpassede WordPress-posttyper, og gir et praktisk og intuitivt grensesnitt. Fordeler med tillegget:

  • enkelhet og klarhet i grensesnittet;
  • muligheten til å opprette og støtte tilpassede innleggstyper, taksonomier og tilpassede felt, samt metafelt for innlegg, sider og tilpassede innleggstyper;
  • Tilgjengelighet av en hurtigveiledning for å komme i gang.

Custom Post Type Maker Plugin

Custom Post Type Maker er en WordPress-plugin som lar deg lage tilpassede innleggstyper og taksonomier med maksimal brukervennlighet. Løsningen er fullt integrert med WordPress API og gir støtte for nesten alle parametere Custom Post Type API. Har en rekke fordeler:

  • tilstedeværelsen av et godt gjennomtenkt grensesnitt med separate seksjoner Posttyper Og Taksonomier;
  • tilstedeværelsen av et grensesnitt for å administrere tilpassede innleggstyper, for eksempel vanlige innlegg og sider;
  • gir alle nødvendige funksjoner for å lage og administrere tilpassede innleggstyper;
  • gir muligheten til å stille inn nesten alle parametere Custom Post Type API.

Blant manglene ved plugin er mangelen på muligheten til å vise tilpassede innleggstyper og taksonomier.

CPT-onomier plugin

CPT-onomies er en plugin for å lage tilpassede innleggstyper, kompatibel med multisites i WordPress. Lar deg lage kraftige taksonomier og relasjoner mellom innlegg. Blant fordelene er:

  • evnen til å bruke taksonomier;
  • evnen til å skape relasjoner mellom poster;
  • støtte for registrering av andre tilpassede innleggstyper laget av WordPress-plugins og temaer;
  • Full støtte for flere nettsteder. Det er mulig å registrere tilpassede innleggstyper og taksonomier på tvers av hele nettverket eller kun for spesifikke nettsteder.

Plugin-en har ikke blitt oppdatert på lenge, så den er ikke så populær blant WordPress-brukere.

MB Custom Post Type Plugin

MB Custom Post Type-pluginet lar deg lage tilpassede innleggstyper og taksonomier, noe som gir enkel administrasjon takket være et tydelig grensesnitt. Blant fordelene med tillegget er følgende:

  • støtte for alle typeargumenter post;
  • brukervennlighet;
  • støtte for live redigeringsmodus, som automatisk fyller ut alle nødvendige tagger;
  • import/eksportstøtte for opprettede posttyper;
  • Mulighet for å utvide funksjonalitet ved hjelp av tillegg.

For arbeid MB tilpasset posttype Installasjon av Meta Box-plugin er nødvendig.

Egendefinert Post Type Generator Plugin

Custom Post Type Generator er en enkel og intuitiv løsning som lar deg generere tilpassede innleggstyper fra WordPress-konsollen. Programtillegget gir:

  • enkelt grensesnitt;
  • mulighet for å generere PHP-kode for å inkludere tilpassede innleggstyper og taksonomier i temaer og plugins;
  • separat utgang av tilpassede innleggstyper, innebygde typer og temastøttede typer.

Ulempe Egendefinert posttypegenerator er mangelen på visning av registrerte innleggstyper og taksonomier i listen over redigerte objekter.

Pods-plugin – tilpassede innholdstyper og felt

Med Pods-pluginen kan du lage nesten alle typer innhold, uavhengig av kompleksiteten. Takket være det brukervennlige grensesnittet kan du enkelt administrere tilpassede felt og innholdstyper. Fordeler med løsningen:

  • klart grensesnitt;
  • tilgjengeligheten av et stort antall alternativer;
  • muligheten til å lage tilpassede innleggstyper, tilpassede taksonomier, innstillingssider osv.;
  • muligheten til å legge til tilpassede felt til tilpassede taksonomier;
  • lage avanserte innholdstyper som vil bruke sine egne tabeller i databasen;
  • muligheten til å utvide eksisterende innholdstyper, som innleggstyper, taksonomier, media, brukere, kommentarer.

Det eneste negative Pods er vanskelig for en nybegynner WordPress-bruker, gitt tilgjengeligheten av detaljert dokumentasjon.

I artikkelen vår om å lage og bruke egendefinerte innleggstyper dekket vi essensen av tilpassede innfødte innleggstyper i Wordpress og prøvde også å komme i gang med å lage dine egne typer. Vi dekket også måter å opprettholde modularitet ved å bruke en separat PHP-fil, som lar oss overføre innleggstyper fra mal til mal.

I dag ønsker vi å lede deg gjennom prosessen med å lage en taksonomi for dine egne innleggstyper, samt lage dine egne felt og metablokker, lagre dataene og bruke dem i dine egne WordPress-maler.

La oss komme i gang!

Opprette en taksonomi (for å tillate sortering etter kategori)

Det neste trinnet i vår læring vil være å lage taksonomier som lar oss sortere våre tilpassede innleggstyper i kategorier. Når det gjelder effektivitet, er dette omtrent det samme som kategorier for innlegg, bortsett fra at vi kan gjøre dem til alt vi vil med bare noen få linjer med kode.

Til dette vil vi bruke Wordpress-funksjonen. Som du kan se nedenfor og i codex.wordpress.org, er argumentene som kreves taksonomi, etterfulgt av objekttypen og til slutt $args. For eksempelet vårt opprettet vi 2 taksonomier – ferdigheter og klubbnivå. Vi bruker taksonomier på idrettsutøverinnleggstypen og setter deretter argumentene, inkludert etiketter, og overskrivingsprivilegier. La oss ta en titt på koden.

Register_taxonomy("Sport", array("atlet"), array("hierarchical" => true, "label" => "Sport", "singular_label" => "Sport", "rewrite" => true));
register_taxonomy("Klubbnivå", array("atlet"), array("hierarchical" => true, "label" => "Klubbnivå", "singular_label" => "Klubbnivå", "rewrite" => true) );
Registrerte taksonomier ser omtrent slik ut:

Du kan klikke på en posttype og du vil bli omdirigert til en side som ligner veldig på en kategoriside hvor du vil ha muligheten til å legge til dine egne taksonomier.

Er du ferdig ennå?

Hmm, i utgangspunktet har du allerede din egen posttype som fungerer. Men for øyeblikket er det ikke forskjellig fra vanlige opptak. La oss dykke ned i å lage tilpassede felt for innleggene dine som lar deg spesifisere unik informasjon og deretter vise den i maler.

Lag dine egne felt

For å begynne å lage ekte magi med dine egendefinerte innleggstyper, må du først initialisere en funksjon for å kunne legge til metablokker. Vi kaller vår admin_init(), og den vil se slik ut:

Add_action("admin_init", "admin_init");

funksjon admin_init())(
add_meta_box("personlig_info", "Personlig informasjon", "personlig_info", "idrettsutøver", "normal", "lav");
}
Den første delen av koden vår initialiserer admin_init() funksjonen. Det er tydelig at den andre delen av denne koden representerer selve funksjonen. I utgangspunktet forteller denne koden malen din om å opprette en ny metablokk kalt "Personlig info", legge den inn i posttypen for utøveren og deretter gi den lav prioritet (plassering i posttypen).

Kul! Vel, er vi ferdige nå?

Ikke ennå. Men det er allerede veldig nært! La oss legge til noen flere egendefinerte felt. Dette gjelder mer for HTML enn for PHP.

Lage felt i dine egne metablokker

Og nå begynner moroa. Vi skal lage en metablokk med personopplysninger (vi har allerede laget den ovenfor, men nå skal vi fylle den ut) som vil be om personens for- og etternavn, kjønn, e-postadresse, telefonnummer og dato av fødsel.

For å gjøre dette lager vi en funksjon kalt personal_info(). Den samme funksjonen som vi kalte i admin_init() funksjonen. Nå, skal vi slå på lyset? Alle linjer konvergerer.

Standardkategoriene brukes kun for innlegg. I noen scenarier kan det imidlertid være lurt å bruke dem med en tilpasset posttype. I denne artikkelen vil vi fortelle deg hvordan du gjør dette.

Plugin-metode

For nybegynnere anbefaler vi å bruke Custom Post Type UI-plugin for å lage en egendefinert posttype. Ved å bruke denne plugin-modulen har du muligheten til å knytte en tilpasset posttype til en hvilken som helst innebygd eller tilpasset taksonomi, inkludert kategorier. Etter å ha installert plugin, gå til CPT UI » Legg til/rediger innleggstyper for å opprette en ny tilpasset posttype eller redigere en eksisterende.

Rull ned til Avanserte alternativer, og der vil du se alternativet Innebygd taxnomies. Merk av i boksen ved siden av kategorier og lagre innleggstypen din.

Legge til kategorier manuelt for en tilpasset innleggstype

Hvis du opprettet en egendefinert posttype ved å legge til kode i functions.php-filen din, må du endre den koden for å legge til kategorien som en støttet taksonomi. Alt du trenger å gjøre er å legge til denne linjen i dine egendefinerte innleggstypeargumenter:

'taksonomier' => array('kategori'),

Det er mulig at du allerede har denne linjen i koden din med en annen tilpasset taksonomi. I så fall trenger du bare å legge til et komma etter det og legge til en kategori:

'taksonomier' => array('emner', 'kategori'),

Her er et eksempel på hele koden der vi laget en egendefinert posttype kalt "filmer" med støtte for alle de innebygde kategoriene.

Funksjon custom_post_type() ( // Sett UI-etiketter for Custom Post Type $labels = array("name" => _x("Filmer", "Innleggstype generelt navn", "twentythirteen"), "singular_name" => _x(" Movie", "Post Type Singular Name", "twentythirteen"), "menu_name" => __("Movies", "twentythirteen"), "parent_item_colon" => __("Overordnet film", "twentythirteen"), "all_items" " => __("Alle filmer", "twentythirteen"), "view_item" => __("Se film", "twentythirteen"), "add_new_item" => __("Legg til ny film", "twentythirteen"), "add_new" => __("Legg til ny", "twentythirteen"), "edit_item" => __("Rediger film", "twentythirteen"), "update_item" => __("Oppdater film", "twentythirteen") , "search_items" => __("Søk etter film", "twentythirteen"), "not_found" => __("Ikke funnet", "twentythirteen"), "not_found_in_trash" => __("Ikke funnet i papirkurven", " twentythirteen")); // Angi andre alternativer for Custom Post Type $args = array("label" => __("filmer", "twentythirteen"), "description" => __("Filmnyheter og anmeldelser", " twentythirteen"), "labels" => $labels, "supports" => array("tittel", "editor", "utdrag", "author", "thumbnail", "comments", "revisions", "custom - fields",), "hierarchical" => usant, "public" => sant, "show_ui" => sant, "show_in_menu" => sant, "show_in_nav_menus" => sant, "show_in_admin_bar" => sant, "menu_position " => 5, "can_export" => sant, "has_archive" => sant, "exclude_from_search" => usant, "publicly_queryable" => sant, "capability_type" => "side", // Det er her vi legger til taksonomier til vår CPT "taksonomier" => array("kategori"),); // Registrere din egendefinerte posttype register_post_type("movies", $args); ) /* Koble til "init"-handlingen slik at funksjonen * Inneholder vår posttyperegistrering ikke * blir unødvendig utført. */ add_action("init", "custom_post_type", 0);

Viser flere innleggstyper på en kategoriside

Som standard viser kategorisider på et WordPress-nettsted standard posttype. Hvis du vil at innleggstypen din skal vises på samme kategoriside som standardinnlegg, må du legge til følgende kode i functions.php-filen din:

Add_filter("pre_get_posts", "query_post_type"); funksjon 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", " filmer"); // ikke glem nav_menu_item for å la menyer fungere $query->set("post_type",$post_type);

Ikke glem å endre filmer til navnet på din egendefinerte posttype.

Vår spesialitet er utvikling og støtte for WordPress-sider. Kontakter for gratis konsultasjon - ,