En komplet guide til brugerdefinerede indlægstyper i WordPress. Brugerdefineret posttype i WordPress - register_post_types, register_taxonomi I hvilke tilfælde skal du oprette en brugerdefineret posttype?

$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
$args ( array) inkluderer følgende parametre: labels ( array) giver dig mulighed for at signere grænsefladeelementer af en given posttype. Flere detaljer i eksemplet i slutningen af ​​indlægget. beskrivelse( linje) beskrivelse af den posttype, der registreres. Mig bekendt bruges denne indstilling ikke nogen steder i WordPress-motoren eller i standard plugins og temaer. Men det kan godt bruges i tredjeparts plugins eller temaer. offentlig( logisk) generaliserer de næste par parametre ved at sætte dem til deres respektive standardværdier publicly_queryable ( logisk) om elementer af denne type indlæg skal gøres tilgængelige på webstedet. Læs mere om formålet med denne parameter.
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 </span>"edit_item" => <span>"Rediger produkt"</span>, "new_item" => "Nyt produkt" , "all_items" => "Alle produkter" , "view_item" => <span>"Se produkter på siden"</span>, "search_items" => "Søg efter produkter" , "not_found" => <span>"Ingen produkter fundet."</span>, "not_found_in_trash" => <span>"Der er ingen varer i vognen."</span>, "menu_name" => "Produkter" <span>// link i menuen i admin panelet</span>); $args = array ( "labels" => $labels , "public" => sand , <span>// Takket være dette kan nogle parametre springes over</span>"menu_icon" => "dashicons-vogn" , <span>// kurv ikon</span>"menu_position" => 5 , "has_archive" => sand , "understøtter" => array ( "title" , "editor" , "uddrag", "thumbnail", "kommentarer") , "taksonomier" => array ( " post_tag" ) ); register_post_type("produkt" ,$args ) ; )</td> </tr></table><p><span class="koXPsjWcBis"></span></p></ul> <p>Opret en brugerdefineret posttype <b>Artikler</b> med tilpassede kategorier (tilpasset taksonomi) <b>Artikler Kategori</b>.</p><p>I mit tilfælde er alle standardregistreringer produkter, så vi vil vise artikler gennem brugerdefinerede poster.</p><p>I funktionsfilen functions.php registrerer vi en tilpasset posttype Artikler:</p><p>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");</p><p>Hvis du ønsker, at standardkategorier skal vises i brugerdefinerede indlæg, skal du linke dem til kategoriens taksonomi:</p><p>"taksonomier" => array("kategori"),</p><p>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</p><p>"taksonomier" => array("articles_category"),</p><p>Derefter registrerer vi 'Artikelkategori'-taksonomierne for den tilpassede artikelposttype, så forskellige indlæg kan tilhøre forskellige kategorier.</p><p>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");</p><p>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:</p><p>"rewrite" => array("slug" => "blog"),</p><p>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.</p><p>Flere eksempler kan findes her. Men det hjalp at bringe al denne kode i orden, hvilket jeg er forfatteren meget taknemmelig for.</p><p>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.</p><p>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. <br></p><h2>Mulighed 1 er den mest korrekte. Vi viser poster i taksonomien på samme måde som i en almindelig kategori.</h2><p>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:</p><p> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="cat-title"><?php single_cat_title(); ?></div> <div class="tax-wrap"> <?php if (have_posts()) : while (have_posts()) : the_post(); get_template_part("include/tax-item"); endwhile; get_template_part("include/pagination"); endif; ?> </div><!-- /tax-wrap --> </div><!-- /col-md-12 --> </div><!-- /row --> </div><!-- /container --> </p><p>I tax-item.php-filen viser vi de data, vi skal have fra hvert indlæg, for eksempel titel, postlink, thumbnail og uddrag.</p><p>I pagination.php-filen viser vi pagineringen i dette format.</p><p>Cyklusen kan ikke ændres, paginering fungerer godt. Dette er den bedste mulighed for at vise brugerdefinerede taksonomier. <br></p><h2>Mulighed 2 – hvis der ikke er nogen brugerdefinerede taksonomier, så kan du simpelthen få alle brugerdefinerede indlæg i form af et arkiv</h2><p>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<?php post_type_archive_title(); ??> :</p><p> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="cat-title"><?php post_type_archive_title(); ?></div> <div class="tax-wrap"> <?php if (have_posts()) : while (have_posts()) : the_post(); get_template_part("include/tax-item"); endwhile; get_template_part("include/pagination"); endif; ?> </div><!-- /tax-wrap --> </div><!-- /col-md-12 --> </div><!-- /row --> </div><!-- /container --> </p><p>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/ . <br></p><h2>Mulighed 3. Du skal blot vise alle brugerdefinerede artikler på en side med en given skabelon</h2> <?php $args = array("post_type" =>"artikler", "posts_per_page" => -1); $loop = new WP_Query($args); while ($loop->have_posts()): $loop->the_post(); get_template_part("inkluder/skattevare"); endwhile; ?> <p>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.)</p><p>Denne indstilling viser alle artikler på siden, uanset taksonomier (kategorier).</p><p>Og hvis vi skal vise hver kategori separat med sine egne nyheder, så bruger vi den første mulighed beskrevet ovenfor.</p><p>Når det er sagt, hvis du bruger Yoast SEO plugin og bruger dets brødkrummer:</p><p> <?php if (function_exists("yoast_breadcrumb")) { yoast_breadcrumb(" "); } ?> </p><p>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.</p> <p>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/ . <br>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. <br>Først generel information, derefter detaljer.</p> <h2>Om indlæg i WordPress: hvor de er gemt i databasen og hvordan man får dem</h2> <p>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.</p> <p>Jeg vil give et eksempel på, hvordan man får 10 indlæg af typen post (standard <b>Indlæg</b> i administratorpanelet). <br>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</p><p>If (have_posts()) ( while (have_posts()) ( the_post(); // Her bruger vi data fra loopet, såsom the_title() osv. ) )</p><p>Hvis data skal hentes et sted uden for løkken eller skabelonen, bruges WP_Query-forespørgslen</p><p>$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() ?> <?php } wp_reset_postdata(); } </p><p>Data kan hentes ved hjælp af en SQL-forespørgsel:</p><p>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</p><p>Alle tre metoder ovenfor vil give det samme outputresultat. <br></p> <h2>Forudindstillede indlægstyper i WordPress: indlæg, side, vedhæftet fil, revision, nav_menu_item</h2> <h3>Indlæg eller indlæg (indlæg)</h3> <p>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). <br>Taksonomier bruges til at sortere og organisere indlæg. <br>Kategorier adskiller sig fra tags ved, at de har en træstruktur (de kan indlejres inde i hinanden). <br>Etiketter er enheder uafhængige af hinanden og på denne måde minder de lidt om Records. <br>Som standard genereres RSS-feedet på et WordPress-websted også fra indgange.</p> <p>Følgende skabelonfiler bruges til Records (i prioriteret rækkefølge):</p> <ol><li>enkelt-post.php</li> <li>enkelt.php</li> <li>ental.php</li> <li>index.php</li> </ol><blockquote class="note"><p>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.</p> </blockquote> <h3>sider</h3> <p>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. <br>For at oprette en landingsside kan du gå på to måder: <br></p> <h4>Opret en speciel sideskabelon</h4> <p>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:</p><p> <?php /* Template Name: Наш уникальный лендинг */ </p><p>Skabelonnavn er en speciel etiket, der fortæller WordPress, at denne fil er en speciel skabelon. <br>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.</p> <p>For Pages bruges følgende skabelonhierarki. Som med Records angiver jeg i prioriteret rækkefølge:</p> <ol><li>(skabelon).php</li> <li>side-(side_label).php</li> <li>side-(side_ID)</li> <li>side.php</li> <li>ental.php</li> <li>index.php</li> </ol><h3>Vedhæftede filer, vedhæftede filer eller vedhæftede filer</h3> <p>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.</p> <p>Du kan få vedhæftede filer til efterfølgende manipulation med dem ved hjælp af følgende kode:</p><p>$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</p><p>Hierarki af skabeloner til vedhæftede filer:</p> <ol><li>(mime-type).php</li> <li>(mime-undertype).php</li> <li>(mime-type-undertype).php</li> <li>vedhæftet fil.php</li> <li>enkelt.php</li> <li>ental.php</li> <li>index.php</li> </ol><h3>Revisioner, udkast eller revisioner</h3> <p>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. <br>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. <br>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:</p> <ol><li>Brug filteret wp_revisions_to_keep</li> <li>Registrer i wp-config.php //Deaktiver revisioner til den mindst mulige værdi define("WP_POST_REVISIONS", 0); <p>Mulige værdier:</p> <ul><li>sand eller -1: Gemmer hver version af kladden. Standardindstilling</li> <li>falsk eller 0: deaktiverer lagring af kladder, undtagen 1 automatisk lagring</li> <li>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</li> </ul></li> </ol><h3>Navigationsmenupunkter (nav_menu_item)</h3> <p>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. <br>Desuden er navigationsmenuer ikke aktiveret som standard. For at aktivere dem skal du erklære deres støtte i:</p> <ol><li>Skriv add_theme_support("menuer");</li> <li>Eller registrer et menurum ved hjælp af register_nav_menu() , så aktiveres menuunderstøttelse automatisk</li> </ol><p>Brug wp_nav_menu() til at hente dataene, fordi WP_Query ikke virker, og det er en funktion af posttypen nav_menu_item</p><p>// 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</p><h2>Custom Post Type (CPT WordPress)</h2> <p>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. <br>Det enkleste eksempel på, hvordan du kan registrere vores nye posttype sheensay_product</p><p>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)); )</p><p>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. <br>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 <b>Produkter</b>, gør som i eksemplet nedenfor</p><p>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")),) ) ;)</p><h3>Sådan vælger du det rigtige navn til en ny posttype</h3> <blockquote class="attention"><p>Følgende navne er reserveret i WordPress og kan ikke bruges som navn på en ny posttype:</p> <ul><li>vedhæftet fil</li> <li>revision</li> <li>nav_menu_item</li> <li>handling</li> <li>tema</li> <li>bestille</li> </ul><p>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. <br>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</p> </blockquote> <h3>Sådan laver du en brugerdefineret taksonomi</h3> <p>Tilpassede indlægstyper kan bruge taksonomier fra indlæg, for eksempel kategorier (kategorier) eller tags (tags), men du kan have dine egne taksonomier.</p><p>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 )); )</p><h3>Skabeloner til brugerdefinerede indlægstyper</h3> <p>Det hele afhænger af, hvilken slags information der vises. Der kan være 3 muligheder: en specifik postskabelon, en postarkivskabelon og en taksonomiskabelon <br></p> <h4>Skabelon til indlægsside</h4> <p>Opført i prioriteret rækkefølge</p> <ol><li>enkelt-(post_type).php</li> <li>enkelt.php</li> <li>index.php</li> </ol><h4>Postarkiv skabelon</h4> <ol><li>arkiv-(post_type).php</li> <li>archive.php</li> <li>index.php</li> </ol><h4>Brugerdefineret taksonomi skabelon</h4> <ol><li>taksonomi-(taksonomi_navn)-(term_navn).php</li> <li>taksonomi-(taksonomi_navn).php</li> <li>taksonomi.php</li> <li>archive.php</li> <li>index.php</li> </ol><p>Her er taxonomy_name sheensay_product_type, og term_name er etiketten for den taksonomi, som du vil oprette i administratorpanelet.</p> <h3>Sådan får du brugerdefinerede posttypedata (Custom Post Type WordPress) og viser dem på webstedet</h3> <p>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</p><p>$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() ?><br /> <?php } wp_reset_postdata(); ?> </p><p>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. <br>Så hvis du ønsker en oprettet posttype skal vises på f.eks. arkivsider sammen med almindelige indlæg, skal du ændre post preload-filteret</p><p>// 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 ;)</p><h3>Færdiglavet klasse til oprettelse af brugerdefinerede indlægstyper med tilpasset taksonomi</h3> <p>Nedenfor er en klasse, som du kan registrere enhver brugerdefineret posttype med sin egen taksonomi, og URL'en vil se ud <br>http://example.com/products/type/product</p> <blockquote class="note"><p>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</p> <p><img src='https://i0.wp.com/sheensay.ru/wp-content/uploads/2016/08/options-permalink.png' width="100%" loading=lazy loading=lazy></p> </blockquote> <p>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"); <br>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><p> <??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");</p><p>Nu i admin panelet kan du registrere nye produkter og deres typer</p> <p>en! Indholds styrelses system <b>WordPress</b> 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.</p> <h3>Lidt historie</h3> <p>I praksis dukkede brugerdefinerede indlægstyper op for ganske lang tid siden, nærmere bestemt siden 17. februar 2005, hvor <b>WordPress 1.5</b> understøttelse af brugerdefinerede typer er tilføjet til statiske sider, via post_type-feltet i databasen. Funktionen Wp_insert_post() har eksisteret siden <b>WordPress 1.0</b> så da post_type-feltet blev implementeret i 1.5, var det ret nemt at udfylde det ved hjælp af denne funktion.</p> <p>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.</p> <h3>Hvad nu?!</h3> <p>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 <b>stolpe</b>, siden betyder noget <b>side</b> 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. <br>Hvis det gøres korrekt, kan du opnå følgende resultater med blot et par linjer kode:</p> <ul><li>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;</li> <li>Opret et arkiv af indlæg af denne type, det vil sige, gør noget, der ligner hovedsiden for en tilpasset type;</li> <li>Opret kategorier og tags, der kan tilgås af brugerdefinerede indlægstyper, såvel som tilpassede taksonomier.</li> </ul><p>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.</p> <p>— 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.</p><p><img src='https://i0.wp.com/xozblog.ru/wp-content/uploads/2012/11/meta-boxes.jpg' align="center" height="202" width="299" loading=lazy loading=lazy><br></p> <h3>Arbejde med brugerdefinerede posttyper</h3> <p>For effektivt at oprette og bruge tilpassede indlægstyper, bør du være bekendt med følgende:</p> <ul><li>Oprettelse af brugerdefinerede indlægstyper;</li> <li>Oprettelse af en brugerdefineret taksonomi;</li> <li>Oprettelse af brugerdefinerede dataområder.</li> </ul><h4>Oprettelse af brugerdefinerede indlægstyper</h4> <p>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.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br></p> </td><td><p><br>$args = matrix (); <br>} <br></p> </td> </tr></tbody></table><p>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.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br></p> </td><td><p>function my_custom_post_product() ( <br>$labels = matrix ( <br>"name" => _x( "Produkter", "indlægstype generelt navn") , <br>"singular_name" => _x( "Produkt" , "indlægstype entalsnavn") , <br>"add_new" => _x( "Tilføj nyt" , "produkt") , <br>"add_new_item" => __( <span>"Tilføj nyt produkt"</span> ) , <br>"edit_item" => __( <span>"Rediger produkt"</span> ) , <br>"new_item" => __( "Nyt produkt") , <br>"all_items" => __( "Alle produkter") , <br>"view_item" => __( <span>"Se produkt"</span> ) , <br>"search_items" => __( "Find et produkt") , <br>"ikke_fundet" => __( <span>"Ingen produkter fundet"</span> ) , <br>"not_found_in_trash" => __( <span>"Ingen produkter fjernet"</span> ) , <br>"parent_item_colon" => "" , <br>"menu_name" => "Produkter" <br>) ; <br>$args = matrix ( <br>"labels" => $labels , <br>"beskrivelse" => <span>"Tilpasset produktregistreringstype"</span>, <br>"offentlig" => sand , <br>"menu_position" => 5 , <br>"supports" => array ("titel", "editor", "thumbnail", "uddrag", "kommentarer", "product_category" ), <br>"has_archive" => sandt , <br>) ; <br>register_post_type( "produkt" , $args ); <br>} <br>add_action( "init", "mit_tilpassede_postprodukt" );</p> </td> </tr></tbody></table> <ul><li><b>etiketter</b>— denne række af etiketter bruges til at beskrive den tilpassede posttype, der oprettes i emnet./li></li><li><b>beskrivelse</b>- en oversigt over den tilpassede posttype, der oprettes, hvad den gør, og hvorfor vi bruger den.</li> <li><b>offentlig</b>— 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.</li> <li><b>menu_position</b>— 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.</li> <li><b>bakker op</b>— 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.</li> <li><b>har_arkiv</b>- 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/</li> </ul><p><br><img src='https://i0.wp.com/xozblog.ru/wp-content/uploads/2012/11/custom-post-types-1.png' align="center" width="100%" loading=lazy loading=lazy><br></p> <p>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.</p> <p>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.</p> <h4>Interaktive advarsler</h4> <p>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.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br></p> </td><td><p>function my_updated_messages( $messages ) ( <br>global $post , $post_ID ; <br>$messages["produkt"] = array( <br>0 => "" , <br>1 => sprintf ( __( <span>"Produkt opdateret. Vis"</span><br>2 => __() , <br>3 => __(<span>"Tilpassede felter er opdateret."</span>) , <br>4 => __(<span>"Produkt opdateret."</span>) , <br>5 => isset ($_GET ["revision"]) ? sprintf ( __( <span>"Produkt gendannet til revision fra %s"</span>), wp_post_revision_title( (int) $_GET [ "revision" ] , false ) ): falsk , <br>6 => sprintf ( __( <span>"Produkt offentliggjort. Se"</span>), esc_url( get_permalink($post_ID ) ) ), <br>7 => __(<span>"Produktet er gemt."</span>) , <br>8 => sprintf ( __( <span>"Produkt afsendt. Se"</span><br>9 => sprintf ( __( <span>"Produktet er planlagt til: <strong>%1$s</strong>. Se"</span>), date_i18n( __( "M j, Y @ G:i") , strtotime ( $post -> post_date ) ), esc_url( get_permalink($post_ID ) ), <br>10 => sprintf ( __( <span>"Produktkladde opdateret. Se"</span>), esc_url( add_query_arg( "preview" , "true" , ​​​​get_permalink($post_ID ) ) ), <br>) ; <br>returnere $beskeder ; <br>} <br>add_filter( "post_updated_messages", "my_updated_messages" );</p> </td> </tr></tbody></table><p>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.</p><p><img src='https://i2.wp.com/xozblog.ru/wp-content/uploads/2012/11/custom-post-types-2.png' align="center" width="100%" loading=lazy loading=lazy><br></p> <p>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. <br>Kontekstuelle tip er placeret i øverste højre hjørne nær fanen skærmindstillinger.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br></p> </td><td><p>function my_contextual_help( $contextual_help , $screen_id , $screen ) ( <br>if ( "rediger-produkt" == $skærm -> id ) (</p><p>$contextual_help = <span>"<h2>Produkter</h2><br> <p>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.</p> <br> <p>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.</p>" </span>; </p><p>) elseif ( "produkt" == $skærm -> id ) (</p><p>$contextual_help = <span>"<h2>Oprettelse/redigering af et produkt</h2><br> <p>Denne side giver dig mulighed for at oprette et produkt eller redigere eksisterende data om det. Sørg for at udfylde de ekstra felter.</p>" </span>; </p><p>} <br>returner $contextual_help ; <br>} <br>add_action( "kontekstuel_hjælp" , "min_kontekstuel_hjælp" , 10 , 3 );</p> </td> </tr></tbody></table><p>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:</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"> </td><td><p>echo $skærm -> id ;</p> </td> </tr></tbody></table><p><br><img src='https://i1.wp.com/xozblog.ru/wp-content/uploads/2012/11/custom-post-types-3.png' align="center" width="100%" loading=lazy loading=lazy><br></p> <h3>Brugerdefineret taksonomi</h3> <p>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".</p> <p>Processen med at oprette en brugerdefineret taksonomi er næsten identisk med at oprette brugerdefinerede indlægstyper. Lad os se på vores eksempel:</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br></p> </td><td><p>funktion mit_taksonomier_produkt() ( <br>$labels = matrix ( <br>"navn" => _x( <span>"Produktkategorier"</span>, "taksonomi generelt navn") , <br>"singular_name" => _x( <span>"Produktkategori"</span>, "taksonomi ental navn") , <br>"search_items" => __( <span>"Find produktkategori"</span> ) , <br>"alle_varer" => __( <span>"Alle produktkategorier"</span> ) , <br>"parent_item" => __( <span>"Overordnet produktkategori"</span> ) , <br>"parent_item_colon" => __( <span>"Overordnet produktkategori:"</span> ) , <br>"edit_item" => __( <span>"Rediger produktkategori"</span> ) , <br>"update_item" => __( <span>"Opdater produktkategori"</span> ) , <br>"add_new_item" => __( <span>"Tilføj en ny produktkategori"</span> ) , <br>"new_item_name" => __( <span>"Ny produktkategori"</span> ) , <br>"menu_name" => __( <span>"Produktkategorier"</span> ) , <br>) ; <br>$args = matrix ( <br>"labels" => $labels , <br>"hierarkisk" => sandt , <br>) ; <br>register_taxonomi( "produktkategori" , "produkt" , $args ); <br>} <br>add_action( "init" , "my_taxonomies_product" , 0 );</p> </td> </tr></tbody></table><p>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.</p><p><img src='https://i2.wp.com/xozblog.ru/wp-content/uploads/2012/11/custom-post-types-4.png' align="center" width="100%" loading=lazy loading=lazy><br></p> <h3>Yderligere dataområder</h3> <p>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.</p> <p>Da vi opretter en brugerdefineret type "Produkter", har vi naturligvis brug for prisen på produktet, lad os se på processen med at skabe brugerdefinerede.</p> <p>Oprettelsesprocessen kan opdeles i 3 faser:</p> <ul><li>Definition af selve blokken;</li> <li>Definere indholdet (hvilke felter er til stede i blokken);</li> <li>Beskrivelse af algoritmer til behandling af indtastede data.</li> </ul><h4>Definition af metabokse</h4> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br></p> </td><td><p>add_action( "add_meta_boxes" , "product_price_box" ); <br>function product_price_box() ( <br>add_meta_box( <br>"produkt_pris_kasse" , <br>__( "Produktpris" , "mitplugin_tekstdomæne" ), <br>"product_price_box_content" , <br>"produkt" <br>"side" <br>"høj" <br>) ; <br>} </p> </td> </tr></tbody></table><p>Ovenstående kode opretter en blok med følgende parametre:</p> <ul><li><b>produkt_pris_kasse</b>— en unik identifikator for metaboksen (den behøver ikke at matche funktionsnavnet);</li> <li><b>Produktpris</b>— navnet på den metaboks, som administratoren ser på siden;</li> <li><b>produkt_pris_kasse_indhold</b>— en funktion, der viser indholdet af vinduet;</li> <li><b>produkt</b>— navnet på den brugerdefinerede posttype, som metaboksene tilhører;</li> <li><b>side</b>— blokkens placering på siden (side, normal eller avanceret — som standard);</li> <li><b>høj</b>— 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).</li> </ul><h4>Indholdsdefinition</h4> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br></p> </td><td><p>function product_price_box_content( $post ) ( <br>wp_nonce_field( plugin_basename( __FILE__ ), ) ; <br>ekko <span>"<label for="product_price"></label>" </span>; <br>ekko <span>"<input type="text" id="product_price" name="product_price" placeholder="indtast pris">" </span>; <br>} </p> </td> </tr></tbody></table><p>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).</p> <h4>Behandling af indtastede data</h4> <p>Det sidste trin er at gemme den indtastede produktpris i databasen.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br></p> </td><td><p>add_action( "save_post" , "product_price_box_save" ); <br>function product_price_box_save( $post_id ) (</p><p>if (defineret("DOING_AUTOSAVE") && DOING_AUTOSAVE) <br>Vend tilbage ;</p><p>if ( ! wp_verify_nonce( $_POST [ <span>"product_price_box_content_nonce"</span>] , plugin_basename( __FILE__ ) ) ) <br>Vend tilbage ;</p><p>if ( "page" == $_POST [ "post_type" ] ) ( <br>if ( ! current_user_can( "edit_page" , $post_id ) ) <br>Vend tilbage ; <br>) andet ( <br>if ( ! current_user_can( "edit_post" , $post_id ) ) <br>Vend tilbage ; <br>} <br>$product_price = $_POST [ "product_price" ] ; <br>update_post_meta( $post_id , "product_price" , $product_price ); <br>} </p> </td> </tr></tbody></table><p>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.</p> <h3>Viser indlæg af den oprettede type på bloggen</h3> <p>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.</p> <p>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/ .</p> <p>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 ) <br>) ; <br>$products = new WP_Query( $args ) ; <br>if ( $produkter -> have_posts () ) ( <br>while ( $products -> have_posts () ) ( <br>$products -> the_post () ; <br>?> <br>< h1> <?php the_title() ?> </ h1> <br>< div class = "content" > <br><?php the_content() ?> <br></ div> <br><?php <br>} <br>} <br>andet( <br>ekko <span>"Åh nej, ingen mad fundet!"</span>; <br>} <br>?> </p> <h4>Prisvisning</h4> <p>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:</p> <h3>Plugin til oprettelse af brugerdefinerede indlægstyper</h3> <p>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 <b>WCK Custom Post Type Creator</b> giver dig mulighed for nemt at oprette brugerdefinerede indlægstyper til WordPress uden kodningsviden.</p> <p>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.</p> <h4>Plugin metode</h4> <p>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.</p> <p>Rul ned til Avancerede indstillinger, og der vil du se indstillingen Indbyggede skattenomier. Marker afkrydsningsfeltet ud for kategorier, og gem din posttype.</p> <p><img src='https://i0.wp.com/coma.lv/wp-content/uploads/2016/11/enablecategoriesforcpt.jpg' align="center" width="100%" loading=lazy loading=lazy></p> <h4>Manuel tilføjelse af kategorier for en tilpasset posttype</h4> <p>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:</p> <p><i>'taksonomier' => array('kategori'),</i></p> <p>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:</p> <p><i>'taksonomier' => array('emner', 'kategori'),</i></p> <p>Her er et eksempel på hele koden, hvor vi oprettede en brugerdefineret posttype kaldet "film" med understøttelse af alle de indbyggede kategorier.</p><p>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);</p><h4>Visning af flere indlægstyper på en kategoriside</h4> <p>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:</p><p>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; ) )</p><p>Glem ikke at ændre film til navnet på din tilpassede posttype.</p> <p><i>Vores speciale er udvikling og support af WordPress-sider. Kontakter for gratis konsultation - ,</i></p> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> <div class="clear"></div> </div> </article> <div class='yarpp-related'> <section id="related_posts"> <div class="block-head"> <span>Mere information om emnet</span> <div class="stripe-line"></div> </div> <div class="post-listing"> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/83954945b2ce419a9afd32ea5e6e6238.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Formål og design af autotransformere" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/da/pochemu-avtotransformator-rat-035-ne-ponizhaet-napryazhenie-naznachenie-i/">Formål og design af autotransformere</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/23240cfe762df010b96b406c388e2397.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Kommunikationsudstyr" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/da/ustroistvo-kommutiruyushchee-neskolko-kanalov-svyazei-nazyvaetsya-kommunikacionnoe/">Kommunikationsudstyr</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/177220b656fc83f054a040a016bce904.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Hvilken enhed er beregnet til interaktion mellem en computer og en anden?" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/da/obshchie-svedeniya-ob-evm-kakoe-ustroistvo-prednaznacheno-dlya-vzaimodeistviya/">Hvilken enhed er beregnet til interaktion mellem en computer og en anden?</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/0001621078e22c97f368771b5d398621.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Liste over præferenceprofessioner seneste version Præferentielle erhverv version 3" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/da/programmy-perechen-lgotnyh-professii-poslednyaya-versiya/">Liste over præferenceprofessioner seneste version Præferentielle erhverv version 3</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/0ffa716e0feb16140f33187e727ee3e1.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Mexico. Nyttige små ting. Hvad skal du tage med dig til Mexico Mexicos tidszone" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/da/meksika-poleznye-melochi-chto-vzyat-s-soboi-v-meksiku-chasovoi-poyas/">Mexico. Nyttige små ting. Hvad skal du tage med dig til Mexico Mexicos tidszone</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/25f5bcf6ba308fdac27d1eba5cbb7b9d.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="De bedste farvekombinationer. Farve cirkel. Farvepalet. Hvordan vælger man en farvepalet? Farvepalet" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/da/luchshie-sochetaniya-cvetov-cvetovoi-krug-palitra-cvetov-kak/">De bedste farvekombinationer. Farve cirkel. Farvepalet. Hvordan vælger man en farvepalet? Farvepalet</a></div> </div> </section> </div> <div id="comments"> <ol class="commentlist"> <div class='rreekk' rel='15'> <div id="smartrotator_ad_4" onclick="yaCounter40492595.reachGoal ('tizercommentbefore1'); return true;"></div> </div> </ol> <div class="clear"></div> <div id="respond" class="comment-respond"> </div> </div> </div> <aside id="sidebar"> <div class="theiaStickySidebar"> <div class="execphpwidget"> <div id="text-4" class="widget widget_text"> <div class="widget-top"> <span>Nyttig</span> <div class="stripe-line"></div> </div> <div class="widget-container"> <div class="textwidget"> <style> .wpp-list li img { -webkit-border-radius: 65px; -moz-border-radius: 65px; border-radius: 65px; } .wpp-list li .post-views { display: block; margin-left: 70px; color: #828283; font-size: 12px; } .wpp-list li .post-views i { font-size: 13px; } .wpp-list li { line-height: 22px !important; } .replacemy { cursor: pointer; } } </style> <ul class="wpp-list"> <li> <div class="replacemy"><img src="/uploads/4f3d924912ba2105c2e411a539238cd8.jpg" width="65" height="65" title="Direktøren afslørede hemmeligheden bag Lazarevs nummer for"Евровидения": оптические иллюзии с помощью видеомэппинга" alt="Direktøren afslørede hemmeligheden bag Lazarevs nummer for"Евровидения": оптические иллюзии с помощью видеомэппинга" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/da/nomer-telefona-sergeya-lazareva-nastoyashchii-rezhiss-r-raskryl-sekret/" class=""><br>Instruktøren afslørede hemmeligheden bag Lazarevs Eurovision-forestilling: optiske illusioner ved hjælp af videomapping</a></li> <li> <div class="replacemy"><img src="/uploads/67a346f7bcd713b7898a4ba72daa8bd4.jpg" width="65" height="65" title="Rejser med et særligt barn Men er der vintervejr der?" alt="Rejser med et særligt barn Men er der vintervejr der?" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/da/ya-za-mobilnuyu-zhizn-i-minimalizm-tak-proshche-intervyu-s-olegom/" class=""><br>Rejser med et særligt barn Men er der vintervejr der?</a></li> <li> <div class="replacemy"><img src="/uploads/a507ae5e6b71b32499e0478eb47fb89d.jpg" width="65" height="65" title="At leje eller købe en server, hvad er mere rentabelt?" alt="At leje eller købe en server, hvad er mere rentabelt?" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/da/kak-dat-v-arendu-svoi-server-arenda-ili-pokupka-servera-chto-vygodnei-chto/" class=""><br>At leje eller købe en server, hvad er mere rentabelt?</a></li> <li> <div class="replacemy"><img src="/uploads/2bbdfc607f6f43dadaf24521441197ea.jpg" width="65" height="65" title="Gratis programmer til Windows gratis download Professionelle programmer oversættere fra engelsk til russisk" alt="Gratis programmer til Windows gratis download Professionelle programmer oversættere fra engelsk til russisk" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/da/programmy-pozvolyayushchie-rusificirovat-programmy-besplatnye-programmy/" class=""><br>Gratis programmer til Windows gratis download Professionelle programmer oversættere fra engelsk til russisk</a></li> <li> <div class="replacemy"><img src="/uploads/59e062d1440e06782ab9ff2210831e7c.jpg" width="65" height="65" title="Metaldetektor. Typer og arbejde. Applikation og funktioner. De reagerer ikke kun på metal. Hvordan fungerer metaldetektorer?" alt="Metaldetektor. Typer og arbejde. Applikation og funktioner. De reagerer ikke kun på metal. Hvordan fungerer metaldetektorer?" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/da/metalloiskatel-vidy-i-rabota-primenenie-i-osobennosti/" class=""><br>Metaldetektor. Typer og arbejde. Applikation og funktioner. De reagerer ikke kun på metal. Hvordan fungerer metaldetektorer?</a></li> </ul> </div> </div> </div> </div> </div> <div> </div> </aside> <div class="clear"></div> </div> <footer id="theme-footer"> <div id="footer-widget-area" class="wide-narrow-2c"><div id="footer-first" class="footer-widgets-box"><div id="text-2" class="footer-widget widget_text"><div class="footer-widget-top"></div><div class="footer-widget-container"><div class="textwidget"> <p>Alt om moderne teknologi. Fejl. Spil. Nedbrud. Teknik. Internettet <p></p> </div></div></div></div><div id="footer-second" class="footer-widgets-box"><div id="text-3" class="footer-widget widget_text"> <div class="footer-widget-top"></div> <div class="footer-widget-container"> <div class="textwidget"><a href="https://qzoreteam.ru/da/sitemap.xml">Site Map</a></div> </div> </div><div id="text-7" class="footer-widget widget_text"><div class="footer-widget-top"></div><div class="footer-widget-container"><div class="textwidget"><br> <a href="https://qzoreteam.ru/da/feedback/">Feedback</a> </div></div></div></div></div><div class="clear"></div> </footer> <div class="clear"></div> <div class="footer-bottom"> <div class="container"> <div class="alignright"></div> <div class="alignleft">© Copyright 2017, https://qzoreteam.ru</div> <div class="clear"></div> </div> </div> </div> </div> </div> <div id="topcontrol" class="fa fa-angle-up" title="Gå til toppen af ​​siden"></div> <div id="fb-root"></div> <script type="text/javascript"> jQuery(function($) { $(document).on("click", ".pseudo-link", function() { window.open($(this).data("uri")); }); }); </script> <script type='text/javascript'> /* */ var tocplus = { "smooth_scroll": "1", "visibility_show": "\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c", "visibility_hide": "\u0441\u043a\u0440\u044b\u0442\u044c", "width": "310px" }; /* */ </script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/table-of-contents-plus/front.min.js'></script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/wp-polls/polls-js.js'></script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/wp-postratings/js/postratings-js.js'></script> <script type='text/javascript'> /* */ var tie = { "mobile_menu_active": "true", "mobile_menu_top": "", "lightbox_all": "", "lightbox_gallery": "", "woocommerce_lightbox": "", "lightbox_skin": "dark", "lightbox_thumb": "vertical", "lightbox_arrows": "true", "sticky_sidebar": "", "is_singular": "1", "SmothScroll": "true", "reading_indicator": "", "lang_no_results": "\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c", "lang_results_found": "\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b" }; /* */ </script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/themes/pochk/js/tie-scripts.js'></script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/themes/pochk/js/ilightbox.packed.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js'></script> <script type='text/javascript'> /* */ var gglcptch_pre = { "messages": { "in_progress": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0434\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Google reCAPTCHA.", "timeout": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c Google reCAPTCHA. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0412\u0430\u0448\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0442\u0438 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443." } }; /* */ </script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/google-captcha/js/pre-api-script.js'></script> <script type='text/javascript' data-cfasync="false" async="async" defer="defer" src='https://www.google.com/recaptcha/api.js?onload=gglcptch_onload_callback&render=explicit'></script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/google-captcha/js/script.js'></script> <script type="text/javascript" src="https://qzoreteam.ru/wp-content/themes/pochk/my/my.js"></script> <script type="text/javascript" src="https://qzoreteam.ru/wp-content/themes/pochk/my/etimer.js"></script> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html>