$post_type ( linje) hvad du vil navngive din posttype, vil dette navn blive brugt i parametrene for mange funktioner i fremtiden, husk dette. Derudover kan følgende ord reserveret af WordPress ikke bruges som titler:
- vedhæftet fil
- revision
- nav_menu_item
- custom_css
- customize_changeset
- handling
- bestille
- tema
- forfatter
Standard: offentlig argumentværdi. ekskluder_fra_søgning( logisk)
- sand — udelad registreringer af denne type fra søgeresultater på webstedet,
- falsk - udelukk ikke.
Standard: modsatte værdier af den offentlige parameter. show_in_nav_menus( logisk) om elementer af denne type indlæg skal gøres tilgængelige for tilføjelse til webstedets menu.
Standard: offentlig argumentværdi. vis_ui( logisk) om det er nødvendigt at tilføje en standardgrænseflade i admin panelet til redigering og tilføjelse af poster af denne type.
Standard: offentlig argumentværdi.
Vis_i_menu ( logisk|linje) om det er nødvendigt at tilføje elementer til admin-menuen.
Standard: værdien af show_ui-argumentet. show_in_admin_bar ( logisk) om det er nødvendigt at tilføje et link for at oprette en ny post af denne type i adminpanelet.
Standard: værdien af show_in_menu-argumentet. menu_position( heltal) rækkefølge af arrangement i menuen i admin panelet.
menu_icon( linje) absolut URL for ikonet for menuen. Den optimale billedopløsning er 16x16 pixels.Derudover introducerede WordPress 3.8 en indbygget ikonpakke - du kan bruge enhver af disse ikoner ved blot at angive dens navn som en parameterværdi, for eksempel dashcons-cart.
Som standard bruges ikonet for almindelige indlæg. slet_med_bruger( logisk) når du sletter en bruger på en blog, skal alle indlæg af denne type, som han har offentliggjort, automatisk slettes.
Standard: falsk. hierarkisk ( logisk) om denne type indlæg skal have et hierarki.
Standard: falsk. har_arkiv( logisk|linje) om denne type indlæg skal have sin egen arkivside. Du kan angive en genvej til arkivsiden som parameterværdien.
Standard: falsk. omskriv ( array|logisk) angiver regler for permalinks i URL'er. Hvis du angiver false som værdien af denne parameter, vil regler for permalinks ikke blive oprettet.
Snegl ( linje) etiket brugt til indlæg af denne type (standard er navnet på indlægstypen) with_front ( logisk) om værdien $wp_rewite->front skal tilføjes til permalinks (standard - sand) feeds ( logisk) om det er nødvendigt at oprette et RSS-feed for denne type indlæg (som standard - værdien af parameteren has_archive) sider ( logisk) bør paginering være tilladt i indlæg af en registreret type ved hjælp af tagget(standard er sand) understøtter ( array) hvilke der skal tilføjes til siderne for at redigere poster af denne type.
- titel - felt til indtastning af titlen på indlægget
- editor - tekst editor
- uddrag — "Citat" metaboks
- forfatter - "Forfatter" metaboks
- thumbnail - "Post Thumbnail" metaboks (derudover skal dit tema understøtte dem)
- kommentarer - "Kommentarer" metaboks (hvis det er angivet, er kommentarer til indlæg af den registrerede type tilladt)
- trackbacks — metaboks "Send backlinks"
- brugerdefinerede felter - "Brugerdefinerede felter" metaboks (tilpassede felter understøttes under alle omstændigheder)
- revisioner — "Revisioner" metaboks (hvis angivet, vil revisioner af indlæg af denne type blive oprettet i databasen)
- sideattributter - "Sideattributter" metaboks med mulighed for at vælge et overordnet element og indstille rækkefølgen menu_order
- post-formater - “Format” metaboks, læs mere om postformater. taksonomier ( array) en række taksonomier, såsom kategori eller post_tag , der skal bruges til denne posttype. Du kan også tildele taksonomier ved hjælp af funktionen.
Eksempel på posttyperegistrering
Hvis du ikke ved, hvor du skal indsætte koden, så indsæt den i functions.php i dit aktuelle tema.
add_action ("init", "true_register_products"); // Brug kun funktionen inde i init-krogen function true_register_products() ( $labels = array ( "name" => "Produkter" , "singular_name" => "Produkt" , // admin panel Tilføj->Funktion"add_new" => "Tilføj produkt" , "add_new_item" => "Tilføj nyt produkt", // tag titel |
Opret en brugerdefineret posttype Artikler med tilpassede kategorier (tilpasset taksonomi) Artikler Kategori.
I mit tilfælde er alle standardregistreringer produkter, så vi vil vise artikler gennem brugerdefinerede poster.
I funktionsfilen functions.php registrerer vi en tilpasset posttype Artikler:
Funktion wptp_create_post_type() ( $labels = array("name" => __("Artikler"), "singular_name" => __("Artikler"), "add_new" => __("Ny artikel"), "add_new_item" => __("Tilføj ny artikel"), "edit_item" => __("Rediger artikel"), "new_item" => __("Ny artikel"), "view_item" => __("Se artikel"), "search_items" => __("Søg i artikler"), "not_found" => __("Ingen artikler fundet"), "not_found_in_trash" => __("Ingen artikler fundet i papirkurven")),); $args = array( "labels" => $labels, "has_archive" => sand, "public" => sand, "hierarchical" => falsk, "menu_position" => 5, "understøtter" => array("title", "editor" , "uddrag", "custom-fields", "thumbnail")); register_post_type("artikler", $args); ) add_action("init", "wptp_create_post_type");
Hvis du ønsker, at standardkategorier skal vises i brugerdefinerede indlæg, skal du linke dem til kategoriens taksonomi:
"taksonomier" => array("kategori"),
Hvis du også opretter brugerdefinerede taksonomier for brugerdefinerede indlæg, så skal du linke dem til de oprettede taksonomier; hvis vi tager eksemplet nedenfor, vil disse være articles_category
"taksonomier" => array("articles_category"),
Derefter registrerer vi 'Artikelkategori'-taksonomierne for den tilpassede artikelposttype, så forskellige indlæg kan tilhøre forskellige kategorier.
Funktion wptp_register_taxonomy() ( register_taxonomy("articles_category", "articles", array("labels" => array("name" => "Artikelkategorier", "singular_name" => "Artikelkategori", "search_items" => " Søg artikelkategorier", "all_items" => "Alle artikelkategorier", "edit_item" => "Rediger artikelkategorier", "update_item" => "Opdater artikelkategori", "add_new_item" => "Tilføj ny artikelkategori", "new_item_name" => "Ny artikelkategorinavn", "menu_name" => "Artikelkategori", "hierarchical" => sand, "sortér" => sand, "args" => array("orderby" => "term_order"), "show_admin_column" => sand)); ) add_action("init", "wptp_register_taksonomi");
For en brugerdefineret taksonomi kan du ændre sneglen til en smukkere, så den ikke er articles_category , men du skal sikre dig, at sådanne snegle ikke længere findes på andre sider eller indlæg, ellers vil der være problemer:
"rewrite" => array("slug" => "blog"),
Når du skifter slugs, skal du opdatere indstillingerne for "Permanente links" i admin-panelet, ellers vil du modtage en 404-fejl i stedet for den ønskede side.
Flere eksempler kan findes her. Men det hjalp at bringe al denne kode i orden, hvilket jeg er forfatteren meget taknemmelig for.
Filen single.php er ansvarlig for udseendet af et brugerdefineret indlæg, men for at ændre udseendet af et brugerdefineret indlæg kan du oprette en fil single-(post_type).php – i mit tilfælde vil det være single-articles.php med sit eget indhold.
Nu skal du vise tilpassede indlæg på siden. Som standard er index.php-filen ansvarlig for at vise arkivet med tilpassede indlæg. Men du kan oprette en fil, der vil være ansvarlig for at vise brugerdefinerede poster i din taksonomi.
Mulighed 1 er den mest korrekte. Vi viser poster i taksonomien på samme måde som i en almindelig kategori.
For at gøre dette skal du oprette en fil taxonomy-(taxonomy).php - i mit tilfælde vil det være taxonomy-articles_category.php, og i den viser vi den sædvanlige cyklus, som for standardindgange i en kategori:
I tax-item.php-filen viser vi de data, vi skal have fra hvert indlæg, for eksempel titel, postlink, thumbnail og uddrag.
I pagination.php-filen viser vi pagineringen i dette format.
Cyklusen kan ikke ændres, paginering fungerer godt. Dette er den bedste mulighed for at vise brugerdefinerede taksonomier.
Mulighed 2 – hvis der ikke er nogen brugerdefinerede taksonomier, så kan du simpelthen få alle brugerdefinerede indlæg i form af et arkiv
For at gøre dette opretter vi i skabelonen en fil archive-(post_type).php - i mit tilfælde vil det være archive-articles.php , hvor vi, ligesom i taksonomien, viser en regulær loop, kun i stedet for Taksonomi titel viser vi navnet på den tilpassede posttype :
Med denne mulighed, hvis der ikke er oprettet en arkivside for et tilpasset indlæg, så kan du få en liste over alle tilpassede indlæg ved at bruge det direkte link BLOG_URL?post_type=(post_type) eller i mit tilfælde http://site.com/ artikler/ .
Mulighed 3. Du skal blot vise alle brugerdefinerede artikler på en side med en given skabelon
"artikler", "posts_per_page" => -1); $loop = new WP_Query($args); while ($loop->have_posts()): $loop->the_post(); get_template_part("inkluder/skattevare"); endwhile; ?>get_template_part("inkluder/skattevare"); – i tax-item.php-filen viser jeg det indlægsindhold, som jeg skal bruge for at vise indlæg inde i løkken (titel, thumbnail, dato, citat osv.)
Denne indstilling viser alle artikler på siden, uanset taksonomier (kategorier).
Og hvis vi skal vise hver kategori separat med sine egne nyheder, så bruger vi den første mulighed beskrevet ovenfor.
Når det er sagt, hvis du bruger Yoast SEO plugin og bruger dets brødkrummer:
Når du derefter vælger taksonomien "Artikelkategori" i plugin-indstillingerne i "Taxonomi til at vise i brødkrummer for indlægstyper", vil du i brødkrummer modtage et link til den kategori, nyhederne tilhører; med andre muligheder for at vise brugerdefinerede indlæg , dette kunne ikke lade sig gøre.
Om brugerdefinerede indlægstyper i WordPress (CPT, brugerdefinerede indlægstyper i WordPress), hvordan man opretter og konfigurerer, tilføjer kategorier og tags, hvordan man laver indlejrede webadresser /indlægstype/kategori/indlæg eller http://example.com/post_type/ kategori/ indlæg/ .
Den beskriver også, hvordan du kan udvide standardfunktionaliteten i WordPress ved at skabe nye typer indlæg, der kan bruges til forskellige formål: tilføje din egen portefølje, et film- og musikindeks, et produktkatalog, en begivenhedskalender, endda at lave din egen lille online butik (fordi stort er bedre at bruge færdige løsninger som WooCommerce) eller et socialt netværk, og meget mere i denne ånd.
Først generel information, derefter detaljer.
Om indlæg i WordPress: hvor de er gemt i databasen og hvordan man får dem
Absolut alle indlæg i WordPress, som diskuteres nedenfor, er gemt i én tabel: wp_posts. Post-metadata, såsom data fra metabokse, gemmes i wp_postmeta-tabellen.
Jeg vil give et eksempel på, hvordan man får 10 indlæg af typen post (standard Indlæg i administratorpanelet).
Generelt er der ikke behov for specifikt at anmode om data. I skabeloner er de allerede forudinstalleret, for eksempel i single.php er registreringsdata allerede tilgængelige til behandling i en loop
If (have_posts()) ( while (have_posts()) ( the_post(); // Her bruger vi data fra loopet, såsom the_title() osv. ) )
Hvis data skal hentes et sted uden for løkken eller skabelonen, bruges WP_Query-forespørgslen
$args = array("post_type" => "indlæg", // Indlægstype: side, vedhæftet fil, ... "posts_per_page" => 10, // 10 indlæg ad gangen); $p = get_posts($args); // Data kan udvides i en loop, hvis (!empty($p)) ( foreach ($p som $post) ( setup_postdata($post); ?> ">= the_title() ?>
Data kan hentes ved hjælp af en SQL-forespørgsel:
Global$wpdb; $query = "VÆLG * FRA ($wpdb -> indlæg) WHERE post_type = "indlæg" LIMIT 10"; $p = $wpdb -> get_results($query); exit(print_r($p)); // $p indeholder nu et array med postdata
Alle tre metoder ovenfor vil give det samme outputresultat.
Forudindstillede indlægstyper i WordPress: indlæg, side, vedhæftet fil, revision, nav_menu_item
Indlæg eller indlæg (indlæg)
Den mest brugte enhed af alle typer, der er i WordPress, er Posts (aka posts). Bruges som blogindlæg og lignende. Den har 2 forudindstillede taksonomier: overskrifter, også kendt som kategorier (kategori) og tags, også kendt som tags (post_tag).
Taksonomier bruges til at sortere og organisere indlæg.
Kategorier adskiller sig fra tags ved, at de har en træstruktur (de kan indlejres inde i hinanden).
Etiketter er enheder uafhængige af hinanden og på denne måde minder de lidt om Records.
Som standard genereres RSS-feedet på et WordPress-websted også fra indgange.
Følgende skabelonfiler bruges til Records (i prioriteret rækkefølge):
- enkelt-post.php
- enkelt.php
- ental.php
- index.php
Skabelonfiler søges fra top til bund i prioriteret rækkefølge. Hvis der findes en skabelonfil i temaet, bruges den, og søgningen stoppes.
sider
Siderne bruges hovedsageligt som servicesider, landingssider, landingssider, encyklopædisamlinger og lignende. De har et trælignende hierarki, det vil sige, at de kan indlejres i hinanden, hvilket vil afspejles i adressen på den sidste side (forældregenveje vil være til stede i URL-kæden), og i denne rolle er det muligt at give dem prioritet i sorteringen.
For at oprette en landingsside kan du gå på to måder:
Opret en speciel sideskabelon
Et sted inde i temaet i roden eller dets undermappe skal du oprette en fil med et vilkårligt navn og php-udvidelse, for eksempel landing.php. Indeni kan du placere absolut enhver skabelon, som kan være helt anderledes end andre sider på webstedet. Men det vigtigste er at placere denne kode i begyndelsen af filen:
Skabelonnavn er en speciel etiket, der fortæller WordPress, at denne fil er en speciel skabelon.
Når du nu opretter og redigerer en hvilken som helst side, skal du kigge i blokken til højre kaldet Sideattributter, i den, i skabelonsektionen, kan du vælge vores unikke landingsside.
For Pages bruges følgende skabelonhierarki. Som med Records angiver jeg i prioriteret rækkefølge:
- (skabelon).php
- side-(side_label).php
- side-(side_ID)
- side.php
- ental.php
- index.php
Vedhæftede filer, vedhæftede filer eller vedhæftede filer
En hjælpetype designet til at gemme information om filer (billeder, lyd, video og lignende), der blev uploadet gennem uploaderen i standard WordPress-editoren, når du redigerer et indlæg, en side eller lignende: størrelse, vægt, beskrivelse, hvilket indlæg eller hvilken side de er knyttet til, og sådan noget.
Du kan få vedhæftede filer til efterfølgende manipulation med dem ved hjælp af følgende kode:
$args = array("post_type" => "vedhæftet fil", // Indlægstype: vedhæftet fil "post_status" => "arv", // Standard er "publicer", og med det kan du ikke modtage vedhæftede filer, så vi angiver en særlig tilknytningsstatus "arve"); $p = get_posts($args); exit(print_r($p)); // Ved output vil vi have et array med vedhæftede filer
Hierarki af skabeloner til vedhæftede filer:
- (mime-type).php
- (mime-undertype).php
- (mime-type-undertype).php
- vedhæftet fil.php
- enkelt.php
- ental.php
- index.php
Revisioner, udkast eller revisioner
Revisioner, også kendt som revisioner, er versioner af kladdeindlæg, der oprettes automatisk, mens du skriver en artikel i WordPress-administrationspanelet eller gemmer en artikel uden egentlig at udgive den.
Under skriveprocessen gemmes hver version af kladden som standard for hver artikel. Du kan sammenligne to forskellige versioner, og du kan rulle tilbage til den, du har brug for.
At gemme mange versioner af den samme artikel er ret dyrt og ofte meningsløst (selvom det nok ville være mere korrekt at lade alt være som standard, regelmæssigt at rydde op i gamle revisioner ved hjælp af et plugin, for eksempel WP Optimize), så antallet af gemte versioner af revisioner kan ændres med 2 muligheder:
- Brug filteret wp_revisions_to_keep
- Registrer i wp-config.php //Deaktiver revisioner til den mindst mulige værdi define("WP_POST_REVISIONS", 0);
Mulige værdier:
- sand eller -1: Gemmer hver version af kladden. Standardindstilling
- falsk eller 0: deaktiverer lagring af kladder, undtagen 1 automatisk lagring
- Heltal større end nul: det angivne antal kladdeversioner gemmes + 1 automatisk lagring. Gamle versioner, der ikke passer inden for det angivne antal, slettes automatisk
Navigationsmenupunkter (nav_menu_item)
En navigationsmenu (nav_menu_item) er en posttype, der gemmer information om et navigationselement i WordPress. Den første, og indtil videre den eneste type post, der ikke bruges som andre typer poster, dataene til drift og visning på webstedet modtager sine egne separate funktioner.
Desuden er navigationsmenuer ikke aktiveret som standard. For at aktivere dem skal du erklære deres støtte i:
- Skriv add_theme_support("menuer");
- Eller registrer et menurum ved hjælp af register_nav_menu() , så aktiveres menuunderstøttelse automatisk
Brug wp_nav_menu() til at hente dataene, fordi WP_Query ikke virker, og det er en funktion af posttypen nav_menu_item
// Denne kode vil fungere wp_nav_menu(); // Viser den første registrerede ikke-tomme menu // Men koden nedenfor vil ikke fungere $args = array("post_type" => "nav_menu_item", // Indlægstype: side, vedhæftet fil, ...); $p = get_posts($args); exit(print_r($p)); // Outputtet vil være et tomt array
Custom Post Type (CPT WordPress)
Nu kommer vi til det vigtigste - værktøjet, der giver dig mulighed for at udvide standard WordPress-blogfunktionaliteten til uendelige muligheder: en tilpasset brugerdefineret posttype.
Det enkleste eksempel på, hvordan du kan registrere vores nye posttype sheensay_product
Add_action("init", "sheensay_post_type"); funktion sheensay_post_type() (register_post_type("sheensay_product", array("labels" => array("name" => "Produkter", "singular_name" => "Produkter",), "public" => sand, // type poster er åbne for søgning og lignende "has_archive" => true, // Aktiver arkivsider "supports" => array("title", "editor", "thumbnail", "comments"), // Aktiver support for titel, editor, thumbnails, kommentarer)); )
Her er sheensay_product navnet på den nye posttype. Det bør ikke være i konflikt med andre i systemet; mere om dette nedenfor.
Også i denne udførelsesform tjener den som en genvej til denne type indlæg, det vil sige, at den er til stede i URL'en. Hvis du f.eks. vil angive en anden genvej Produkter, gør som i eksemplet nedenfor
Add_action("init", "sheensay_post_type"); funktion sheensay_post_type() (register_post_type("sheensay_product", array("labels" => array("name" => "Produkter", "singular_name" => "Produkter",), "public" => sand, "omskriv" => array("slug" => "produkter"), // Etiketten Custom Post Type "has_archive" => true, "supports" => array("title", "editor", "thumbnail")),) ) ;)
Sådan vælger du det rigtige navn til en ny posttype
Følgende navne er reserveret i WordPress og kan ikke bruges som navn på en ny posttype:
- vedhæftet fil
- revision
- nav_menu_item
- handling
- tema
- bestille
Du bør også undgå at bruge wp_-præfikset i begyndelsen af navnet, da dette kan forårsage konflikter med fremtidige versioner af WordPress-kernen.
Det er bedst, hvis du præfikser navne med vilkårlige præfikser relateret til navnet på dit websted, produkt eller brand, for eksempel sheensay_product, så er du garanteret at undgå potentielle konflikter
Sådan laver du en brugerdefineret taksonomi
Tilpassede indlægstyper kan bruge taksonomier fra indlæg, for eksempel kategorier (kategorier) eller tags (tags), men du kan have dine egne taksonomier.
Add_action("init", "sheensay_post_type"); funktion sheensay_post_type() ( // Registrer taksonomien register_taxonomi("sheensay_product_type", "sheensay_product", array("label" => "Typer", "hierarchical" => sand, // Hvis SAND, vil taksonomien være analog med overskrifter (kategorier). Hvis FALSE (standard), bliver taksonomien en analog af etiketter (tags): "rewrite" => array("slug" => "produkttype")),)); // Registrer en brugerdefineret post type (Custom Post Type) register_post_type ("sheensay_product", array("labels" => array("name" => "Products", "singular_name" => "Products", "public" => true, " rewrite" => array("slug " => "produkter"), // CPT-etiketten er defineret her "has_archive" => true, "supports" => array("title", "editor", "thumbnail") , // Aktiver understøttelse af titel, editor, thumbnail )); )
Skabeloner til brugerdefinerede indlægstyper
Det hele afhænger af, hvilken slags information der vises. Der kan være 3 muligheder: en specifik postskabelon, en postarkivskabelon og en taksonomiskabelon
Skabelon til indlægsside
Opført i prioriteret rækkefølge
- enkelt-(post_type).php
- enkelt.php
- index.php
Postarkiv skabelon
- arkiv-(post_type).php
- archive.php
- index.php
Brugerdefineret taksonomi skabelon
- taksonomi-(taksonomi_navn)-(term_navn).php
- taksonomi-(taksonomi_navn).php
- taksonomi.php
- archive.php
- index.php
Her er taxonomy_name sheensay_product_type, og term_name er etiketten for den taksonomi, som du vil oprette i administratorpanelet.
Sådan får du brugerdefinerede posttypedata (Custom Post Type WordPress) og viser dem på webstedet
Du kan få brugerdefinerede posttypedata i WordPress til visning på dit websted ved hjælp af de samme metoder som almindelige indlæg og sider
$args = array("post_type" => "sheensay_product", // Angiv vores nye posttype "posts_per_page" => 10,); $p = get_posts($args); foreach ($p som $post) ( setup_postdata($post); ?> ">= the_title() ?>
Hvis vi taler om hovedanmodningen, for hvilken data for eksempel er forudindlæst til visning på hovedsiden eller standard arkivsider, så er vilkårlige posttyper deaktiveret der.
Så hvis du ønsker en oprettet posttype skal vises på f.eks. arkivsider sammen med almindelige indlæg, skal du ændre post preload-filteret
// Forbind vores "sheensay_product" til standard "post" og "page" add_action("pre_get_posts", "add_sheensay_product_in_main_query"); funktion add_sheensay_product_in_main_query($query) (if (is_archive() && $query -> is_main_query()) $query -> set("post_type", array("post", "page", "sheensay_product")); returner $query ;)
Færdiglavet klasse til oprettelse af brugerdefinerede indlægstyper med tilpasset taksonomi
Nedenfor er en klasse, som du kan registrere enhver brugerdefineret posttype med sin egen taksonomi, og URL'en vil se ud
http://example.com/products/type/product
For at URL'en kan genereres, skal du gå til permalink-indstillingerne /wp-admin/options-permalink.php og angive alle andre generelle indstillinger end simple
Nedenfor er selve klassekoden. Du behøver ikke at lave nogen ændringer i den, men du kan ændre posttypeetiketten til allersidst i linjen new Sheensay_Product("products");
Selve koden er skrevet i eller i . Den første mulighed er at foretrække, da du i dette tilfælde ikke mister adgangen til indholdet af den nye posttype, når du ændrer det aktive tema.
?p=1713 * */ final class Sheensay_Product { // Ярлык произвольного типа записи по умолчанию private $post_type = "продукция"; function __construct($post_type = "") { // Переопределяем значение ярлыка по умолчанию if ($post_type) $this -> post_type = $post_type; /* * Registrer Custom Post Type */ add_action("init", array($this, "sheensay_cpt_product")); /* * Filtrer URL'en */ add_filter("post_type_link", array($this, "product_permalink_structure"), 10, 2); /* * For at paginering skal fungere */ add_action("generate_rewrite_rules", array($this, "fix_product_category_pagetion")); ) funktion sheensay_cpt_product() ( /* * Registrer en tilpasset taksonomi for en ny posttype */ register_taxonomy("sheensay_product_type", "sheensay_product", array("label" => "Typer", "hierarchical" => true, "query_var " => true, "rewrite" => array("slug" => $this -> post_type),)); /* * Registrer en ny posttype */ $labels = array("name" => "Produkter" , // Hovednavn "singular_name" => "Produkter", // Tilføj "add_new" => "Tilføj ny", // Navn på linket til en ny post i sidebjælken "add_new_item" => "Tilføj nye produkter" , // Titel i editoren, når du tilføjer en ny post); $args = array("labels" => $labels, "public" => true, "publicly_queryable" => true, "show_ui" => true, "query_var " => sand, "capability_type" => "indlæg", "hierarkisk" => falsk, "menu_position" => null, "understøtter" => array("titel", "editor", "thumbnail", "uddrag" ), "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")) // Vær forsigtig med denne funktion. Det nulstiller alle URL-registreringsregler. Det er bedre at kommentere det efter alt arbejde er afsluttet flush_rewrite_rules(); ) function product_permalink_structure($post_link, $post) (if (FALSK !== 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; ) funktion fix_product_category_pagination($wp_rewrite) ( unset($wp_rewrite -> regler[ $this_ > post_type . "/([^/]+)/page/?((1,))/?$"]); $wp_rewrite -> rules = array($this -> post_type . "/?$" => $wp_rewrite -> indeks . "?post_type=sheensay_product", $this -> post_type . "/page/?((1,))/?$" => $wp_rewrite -> indeks . "?post_type=sheensay_product&paged=" . $wp_rewrite -> preg_index(1), $this -> post_type. "/([^/]+)/page/?((1,))/?$" => $wp_rewrite -> indeks . "?sheensay_product_type= ". $wp_rewrite -> preg_index(1) . "&paged=" . $wp_rewrite -> preg_index(2),) + $wp_rewrite -> regler; ) ) /* * Kør klassen * I parentes kan du definere navnet på posttypeetiketten */ new Sheensay_Product("products");
Nu i admin panelet kan du registrere nye produkter og deres typer
en! Indholds styrelses system WordPress opnået anerkendelse i flere år, men det virkelige gennembrud var implementeringen af evnen til at adskille poster i typer. I denne lektion vil vi se nærmere på brugerdefinerede indlægstyper, deres oprettelse og brug.
Lidt historie
I praksis dukkede brugerdefinerede indlægstyper op for ganske lang tid siden, nærmere bestemt siden 17. februar 2005, hvor WordPress 1.5 understøttelse af brugerdefinerede typer er tilføjet til statiske sider, via post_type-feltet i databasen. Funktionen Wp_insert_post() har eksisteret siden WordPress 1.0 så da post_type-feltet blev implementeret i 1.5, var det ret nemt at udfylde det ved hjælp af denne funktion.
Og kun i version 2.8 dukkede funktionen register_post_type() op til oprettelse af brugerdefinerede typer, og nogle andre nyttige ting var tilgængelige i "natlige builds", og allerede fra 2.9 blev funktionerne tilgængelige for alle.
Hvad nu?!
En tilpasset posttype er intet mere end et almindeligt indlæg (artikel) med en specifik post_type feltværdi i databasen. I et almindeligt indlæg har post_type-feltet værdien stolpe, siden betyder noget side og så videre. Men vi kan nu oprette vores egne typer for at specificere det specifikke indhold, der er indeholdt i et indlæg. Du kan oprette brugerdefinerede indlægstyper til bøger, film, vittigheder, produkter og alt muligt andet.
Hvis det gøres korrekt, kan du opnå følgende resultater med blot et par linjer kode:
- Placer en brugerdefineret type på hovedpanelet i administrationsområdet med undermenupunkter: en liste over alle poster med denne type, og opret også en ny post med denne type;
- Opret et arkiv af indlæg af denne type, det vil sige, gør noget, der ligner hovedsiden for en tilpasset type;
- Opret kategorier og tags, der kan tilgås af brugerdefinerede indlægstyper, såvel som tilpassede taksonomier.
Forskellige typer indhold har forskellige datakrav. For almindelige indlæg skal du inkludere forfatter, kategori og dato. Mens jeg for en ordens skyld har typen "bog", vil jeg gerne være i stand til at angive bogens forfatter, antal sider, genre, udgiver og andre specifikke data. Dette kan nemt opnås ved at bruge brugerdefinerede (metabokse) områder til dataindtastning.
— områder til indtastning af yderligere data direkte på siden for oprettelse af post. Disse områder gør det nemmere at arbejde med tilpassede indlægstyper.
Arbejde med brugerdefinerede posttyper
For effektivt at oprette og bruge tilpassede indlægstyper, bør du være bekendt med følgende:
- Oprettelse af brugerdefinerede indlægstyper;
- Oprettelse af en brugerdefineret taksonomi;
- Oprettelse af brugerdefinerede dataområder.
Oprettelse af brugerdefinerede indlægstyper
Den første ting du skal gøre er at oprette selve den tilpassede posttype. Ideelt set vil du oprette et plugin til at håndtere brugerdefinerede indlægstyper, men du kan også bruge dit temas functions.php-fil.
1 |
|
Dette er den enkleste form for at skabe en type, der praktisk talt ikke har nogen indstillinger. For at udvikle vores nye posttype bruger vi nogle af de mest brugte muligheder og tilføjer dem til det tidligere tomme $args-array.
1 | function my_custom_post_product() ( |
- etiketter— denne række af etiketter bruges til at beskrive den tilpassede posttype, der oprettes i emnet./li>
- beskrivelse- en oversigt over den tilpassede posttype, der oprettes, hvad den gør, og hvorfor vi bruger den.
- offentlig— om den brugerdefinerede type skal bruges offentligt, og om den skal vises i det administrative område. I dette tilfælde er sandheden fastslået.
- menu_position— placeringen af menupunktet af vores type på hovedadminpanelet. En værdi på 5 betyder, at punktet vil blive installeret umiddelbart efter menupunktet "Records", hvis 10 betyder efter punktet "Mediefiler" osv.
- bakker op— denne indstilling indeholder et array, der beskriver de felter, som vi kan redigere på siden for oprettelse af post. Det vil sige, at titel - et felt til indtastning af navnet på indlægget vises, editor - et tekstområde vil blive vist til indtastning af teksten på indlægget osv. Den brugerdefinerede taksonomi, produktkategori , er også angivet.
- har_arkiv- hvis den er sat til sand, vil der blive oprettet en omskrivningsregel, så du kan få en liste over poster af vores type på http://mysite.com/product/
Efter at have installeret denne kode i din function.php fil, bør du se en menu for den brugerdefinerede posttype. Det er nu muligt at tilføje en post og se listen over poster.
Dette er dog ikke alle mulighederne for en række argumenter; du vil finde en komplet liste over muligheder og alle mulighederne for brugerdefinerede typer.
Interaktive advarsler
WordPress genererer nogle beskeder udløst af brugerhandlinger. Vi kan også oprette lignende beskeder for at give brugeren besked, når der arbejdes med typer. Dette gøres ved post_updated_messages.
1 | function my_updated_messages( $messages ) ( |
Bemærk, at du kan indstille advarsler for alle brugerdefinerede indlægstyper ved hjælp af denne ene funktion. Hvis du ikke angiver et typenavn, vil advarsler blive brugt for alle brugerdefinerede typer.
Kontekstuelle ledetråde implementeres og bruges sjældent. Som bruger har jeg aldrig brugt denne funktion, men jeg er sikker på, at nogen stadig bruger dem. Så lad os skabe sådan kontekstuel hjælp.
Kontekstuelle tip er placeret i øverste højre hjørne nær fanen skærmindstillinger.
1 | function my_contextual_help( $contextual_help , $screen_id , $screen ) ( $contextual_help = " Denne side indeholder en liste over alle produkter, der sælges på siden. Indtastningerne er i omvendt kronologisk rækkefølge, hvor de sidst anførte elementer er de elementer, vi tilføjede først. Du kan se/redigere detaljer for hvert produkt ved at klikke på dets navn, eller du kan udføre massehandlinger ved at bruge rullemenuen ved at vælge flere elementer. ) elseif ( "produkt" == $skærm -> id ) ( $contextual_help = " Denne side giver dig mulighed for at oprette et produkt eller redigere eksisterende data om det. Sørg for at udfylde de ekstra felter. }
|
For at kunne vise et sådant værktøjstip skal vi kende skærm-id'et. Hvis du under oprettelsen har brug for at finde ud af skærm-id'et, skal du blot gøre dette:
echo $skærm -> id ; |
Brugerdefineret taksonomi
For en almindelig blog er kategorier og tags nok til at skabe en organisationsstruktur. Selvom det ikke altid er nok for brugerdefinerede indlægstyper. En tilpasset taksonomi kan løse dette problem. I vores tilfælde en taksonomi kaldet "Produktkategorier", som kun bruges til indlæg med en brugerdefineret type "Produkter".
Processen med at oprette en brugerdefineret taksonomi er næsten identisk med at oprette brugerdefinerede indlægstyper. Lad os se på vores eksempel:
1 | funktion mit_taksonomier_produkt() ( |
Som ved oprettelse af en brugerdefineret type, dannede vi en etiket-array og angav, at den hierarkiske struktur er relevant for den oprettede taksonomi (dvs. der kan være overordnede og underordnede elementer) - dette er typisk for kategorier i almindelige indlæg. Ellers, hvis strukturen ikke er hierarkisk, oprettes almindelige tags. Du kan læse mere om taksonomi.
Yderligere dataområder
Du kan se yderligere områder eller blokke til dataindtastning (metabokse) på postredigeringssiden. Alle kender standarderne, såsom at vælge en kategori eller tags. Også i nogle emner er der muligheder, der giver dig mulighed for at vedhæfte et billede til et opslag mv.
Da vi opretter en brugerdefineret type "Produkter", har vi naturligvis brug for prisen på produktet, lad os se på processen med at skabe brugerdefinerede.
Oprettelsesprocessen kan opdeles i 3 faser:
- Definition af selve blokken;
- Definere indholdet (hvilke felter er til stede i blokken);
- Beskrivelse af algoritmer til behandling af indtastede data.
Definition af metabokse
1 | add_action( "add_meta_boxes" , "product_price_box" ); |
Ovenstående kode opretter en blok med følgende parametre:
- produkt_pris_kasse— en unik identifikator for metaboksen (den behøver ikke at matche funktionsnavnet);
- Produktpris— navnet på den metaboks, som administratoren ser på siden;
- produkt_pris_kasse_indhold— en funktion, der viser indholdet af vinduet;
- produkt— navnet på den brugerdefinerede posttype, som metaboksene tilhører;
- side— blokkens placering på siden (side, normal eller avanceret — som standard);
- høj— prioritet af metabokse (i dette tilfælde "høj", blokken er placeret helt i toppen af sidebjælken. Valgmuligheder: høj, kerne, lav eller standard - som standard).
Indholdsdefinition
1 | function product_price_box_content( $post ) ( |
Vi tilføjer kun ét felt for at indtaste prisen på produktet. Bemærk, at navnet på funktionen matcher værdien af den tredje parameter, når den erklæres (kode ovenfor).
Behandling af indtastede data
Det sidste trin er at gemme den indtastede produktpris i databasen.
1 | add_action( "save_post" , "product_price_box_save" ); if (defineret("DOING_AUTOSAVE") && DOING_AUTOSAVE) if ( ! wp_verify_nonce( $_POST [ "product_price_box_content_nonce"] , plugin_basename( __FILE__ ) ) ) if ( "page" == $_POST [ "post_type" ] ) ( |
Det meste af funktionen er checks. Først og fremmest er autolagring afkrydset; prisen gemmes ikke, før der trykkes på gem eller opdater knappen. Derefter kontrolleres adgangsrettighederne til at redigere dataene i dette indlæg, og først derefter, ved hjælp af update_post_meta-funktionen, indtastes prisen i databasen.
Viser indlæg af den oprettede type på bloggen
Vi har gennemgået alle stadier af oprettelse af en brugerdefineret posttype, alt, der er tilbage, er at drage fordel af frugterne af vores arbejde og skabe en visning af indlæg på bloggen i overensstemmelse med den taksonomi, vi har etableret.
Da vi under oprettelsen af den tilpassede type angav sand for parameteren has_archive, er listen over registreringer af produkttypen tilgængelig på http://mysite.com/product/ .
archive-.php-filen (i vores tilfælde archive-product.php) bruges til visning, hvis den findes. Ellers vil archive.php blive brugt til visning, og hvis en sådan fil ikke er i temaet, vil den bruge )
)
;
$products = new WP_Query( $args ) ;
if ( $produkter -> have_posts () ) (
while ( $products -> have_posts () ) (
$products -> the_post () ;
?>
<
h1>
h1>
<
div class
=
"content"
>
div>
}
}
andet(
ekko "Åh nej, ingen mad fundet!";
}
?>
Prisvisning
De yderligere indtastede data, i vores tilfælde prisen på produktet, kan hentes ved hjælp af funktionen get_post_meta(). Da vi desuden bruger feltet produktpris, for at få prisværdien:
Plugin til oprettelse af brugerdefinerede indlægstyper
Hvis du ikke er sikker på dine programmeringsevner, kan du altid finde en færdiglavet løsning (plugin) og bruge den. Brugerdefinerede typer er ingen undtagelse. Plugin WCK Custom Post Type Creator giver dig mulighed for nemt at oprette brugerdefinerede indlægstyper til WordPress uden kodningsviden.
Standardkategorierne bruges kun til indlæg. Men i nogle scenarier vil du måske bruge dem med en brugerdefineret posttype. I denne artikel vil vi fortælle dig, hvordan du gør dette.
Plugin metode
For nybegyndere anbefaler vi at bruge Custom Post Type UI-plugin til at oprette en brugerdefineret posttype. Ved at bruge dette plugin har du mulighed for at knytte en brugerdefineret posttype til enhver indbygget eller brugerdefineret taksonomi, inklusive kategorier. Når du har installeret pluginnet, skal du gå til CPT UI » Tilføj/rediger indlægstyper for at oprette en ny brugerdefineret indlægstype eller redigere en eksisterende.
Rul ned til Avancerede indstillinger, og der vil du se indstillingen Indbyggede skattenomier. Marker afkrydsningsfeltet ud for kategorier, og gem din posttype.
Manuel tilføjelse af kategorier for en tilpasset posttype
Hvis du oprettede en brugerdefineret posttype ved at tilføje kode i din functions.php-fil, så bliver du nødt til at ændre denne kode for at tilføje kategorien som en understøttet taksonomi. Alt du skal gøre er at tilføje denne linje til dine brugerdefinerede indlægstype-argumenter:
'taksonomier' => array('kategori'),
Det er muligt, at du allerede har denne linje i din kode med en anden tilpasset taksonomi. Hvis ja, så skal du blot tilføje et komma efter det og tilføje en kategori:
'taksonomier' => array('emner', 'kategori'),
Her er et eksempel på hele koden, hvor vi oprettede en brugerdefineret posttype kaldet "film" med understøttelse af alle de indbyggede kategorier.
Funktion custom_post_type() ( // Indstil brugergrænsefladeetiketter for Custom Post Type $labels = array("name" => _x("Film", "Post Type General Name", "twentythirteen"), "singular_name" => _x(" Film", "Post Type Singular Name", "twentythirteen"), "menu_name" => __("Film", "twentythirteen"), "parent_item_colon" => __("Forældrefilm", "twentythirteen"), "all_items" " => __("Alle film", "twentythirteen"), "view_item" => __("Se film", "twentythirteen"), "add_new_item" => __("Tilføj ny film", "twentythirteen"), "add_new" => __("Tilføj ny", "twentythirteen"), "edit_item" => __("Rediger film", "twentythirteen"), "update_item" => __("Opdater film", "twentythirteen") , "search_items" => __("Søg efter film", "twentythirteen"), "not_found" => __("Ikke fundet", "twentythirteen"), "not_found_in_trash" => __("Ikke fundet i papirkurven", " twentythirteen")),); // Indstil andre muligheder for Custom Post Type $args = array("label" => __("movies", "twentythirteen"), "description" => __("Filmnyheder og anmeldelser", "twentythirteen"), "labels" => $labels, "supports" => array("titel", "editor", "uddrag", "forfatter", "thumbnail", "kommentarer", "revisioner", "custom -fields",), "hierarchical" => falsk, "offentlig" => sand, "show_ui" => sand, "show_in_menu" => sand, "show_in_nav_menus" => sand, "show_in_admin_bar" => sand, "menu_position " => 5, "can_export" => sand, "has_archive" => sand, "exclude_from_search" => falsk, "publicly_queryable" => sand, "capability_type" => "side", // Det er her vi tilføjer taksonomier til vores CPT "taksonomier" => array("kategori"),); // Registrering af din brugerdefinerede posttype register_post_type("movies", $args); ) /* Tilslut "init"-handlingen, så funktionen * Indeholder vores posttyperegistrering ikke * unødvendigt udføres. */ add_action("init", "custom_post_type", 0);
Visning af flere indlægstyper på en kategoriside
Som standard viser kategorisider på et WordPress-websted standardposttypen. Hvis du ønsker, at din posttype skal vises på den samme kategoriside som standardindlæg, skal du tilføje følgende kode til din functions.php-fil:
Add_filter("pre_get_posts", "query_post_type"); funktion query_post_type($query) ( if(is_category()) ( $post_type = get_query_var("post_type"); if($post_type) $post_type = $post_type; ellers $post_type = array("nav_menu_item", "post", " film"); // glem ikke nav_menu_item for at tillade menuer at arbejde! $query->set("post_type",$post_type); return $query; ) )
Glem ikke at ændre film til navnet på din tilpassede posttype.
Vores speciale er udvikling og support af WordPress-sider. Kontakter for gratis konsultation - ,