En komplett guide til tilpassede innleggstyper i WordPress. Egendefinert posttype i WordPress - register_post_types, register_taxonomy I hvilke tilfeller bør du opprette en egendefinert posttype?

$post_type ( linje) hva du vil kalle posttypen din, vil dette navnet bli brukt i parametrene til mange funksjoner i fremtiden, husk dette. I tillegg kan følgende ord reservert av WordPress ikke brukes som titler:

  • vedlegg
  • revisjon
  • nav_menu_item
  • custom_css
  • customize_changeset
  • handling
  • rekkefølge
  • tema
  • forfatter
$args ( array) inkluderer følgende parametere: etiketter ( array) lar deg signere grensesnittelementer av en gitt posttype. Flere detaljer i eksempelet på slutten av innlegget. beskrivelse( linje) beskrivelse av posttypen som registreres. Så vidt jeg vet, brukes ikke denne innstillingen noe sted i WordPress-motoren eller i standard plugins og temaer. Men det kan godt brukes i tredjeparts plugins eller temaer. offentlig( logisk) generaliserer de neste parametrene ved å sette dem til deres respektive standardverdier publicly_queryable ( logisk) om elementer av denne typen innlegg må gjøres tilgjengelig på nettstedet. Les mer om formålet med denne parameteren.
Standard: offentlig argumentverdi. ekskluder_fra_søk( logisk)
  • sant – ekskluder poster av denne typen fra søkeresultatene på nettstedet,
  • usant - ikke ekskluder.

Standard: motsatte verdier av den offentlige parameteren. show_in_nav_menus( logisk) om elementer av denne typen innlegg bør gjøres tilgjengelige for å legges til i sidemenyen.
Standard: offentlig argumentverdi. show_ui( logisk) om det er nødvendig å legge til et standardgrensesnitt i administrasjonspanelet for å redigere og legge til poster av denne typen.
Standard: offentlig argumentverdi.

Vis_i_menyen ( logisk|linje) om det er nødvendig å legge til elementer i admin-menyen.

Standard: verdien av show_ui-argumentet. show_in_admin_bar ( logisk) om det er nødvendig å legge til en lenke for å opprette en ny post av denne typen i administrasjonspanelet.

Standard: verdien av argumentet show_in_menu. menu_position( heltall) rekkefølge på arrangement i menyen i administrasjonspanelet.

menu_icon( linje) absolutt URL til ikonet for menyen. Den optimale bildeoppløsningen er 16x16 piksler.

I tillegg introduserte WordPress 3.8 en innebygd ikonpakke - du kan bruke hvilke som helst av disse ikonene ved å spesifisere navnet som en parameterverdi, for eksempel dashcons-cart.

Som standard brukes ikonet for vanlige innlegg. slett_med_bruker( logisk) når du sletter en bruker på en blogg, bør alle oppføringer av denne typen som han publiserte automatisk slettes.
Standard: usant. hierarkisk ( logisk) om denne typen innlegg bør ha et hierarki.
Standard: usant. har_arkiv( logisk|linje) om denne typen innlegg bør ha sin egen arkivside. Du kan angi en snarvei til arkivsiden som parameterverdi.
Standard: usant. omskrive( array|logisk) setter regler for permalinker i URL-er. Hvis du angir false som verdien for denne parameteren, vil ikke regler for permalinks bli opprettet.

Mordersnegle ( linje) etikett brukt for innlegg av denne typen (standard er navnet på innleggstypen) with_front ( logisk) om du skal legge til verdien $wp_rewite->front til permalinks (standard - sann) feeds ( logisk) om det er nødvendig å opprette en RSS-feed for denne typen innlegg (som standard - verdien av parameteren has_archive) ( logisk) bør paginering tillates i innlegg av registrert type ved bruk av taggen(standard er sant) støtter ( array) hvilke som må legges til på sidene for å redigere poster av denne typen.

  • tittel - felt for å legge inn tittelen på innlegget
  • redaktør - tekstredigerer
  • utdrag - "Sitat" metaboks
  • forfatter - "Forfatter"-metaboks
  • thumbnail - "Post Thumbnail"-metaboks (i tillegg må temaet ditt støtte dem)
  • kommentarer - "Kommentarer"-metaboks (hvis det er spesifisert, er kommentarer på innlegg av den registrerte typen tillatt)
  • trackbacks - metaboks "Send tilbakekoblinger"
  • egendefinerte felter - "Egendefinerte felt"-metaboks (egendefinerte felt støttes uansett)
  • revisjoner - "Revisjoner" metaboks (hvis spesifisert, vil revisjoner av innlegg av denne typen bli opprettet i databasen)
  • sideattributter - "Sideattributter" metaboks med muligheten til å velge et overordnet element og angi rekkefølgen menu_order
  • post-formater - "Format" metaboks, les mer om postformater.
  • taksonomier ( array) en rekke taksonomier, for eksempel kategori eller post_tag , som skal brukes for denne posttypen. Du kan også tilordne taksonomier ved hjelp av funksjonen.

    Eksempel på registrering av posttype

    Hvis du ikke vet hvor du skal sette inn koden, lim den inn i functions.php for ditt nåværende tema.

    add_action ( "init" , "true_register_products" ); // Bruk funksjonen kun inne i init-kroken function true_register_products() ( $labels = array ( "name" => "Produkter" , "singular_name" => "Produkt" , // admin panel Add->Function"add_new" => "Legg til produkt" , "add_new_item" => "Legg til nytt produkt", // tag tittel </span>"edit_item" => <span>"Rediger produkt"</span>, "new_item" => "Nytt produkt" , "all_items" => "Alle produkter" , "view_item" => <span>"Se produkter på nettstedet"</span>, "search_items" => "Søk etter produkter" , "not_found" => <span>"Ingen produkter funnet."</span>, "not_found_in_trash" => <span>"Det er ingen varer i vognen."</span>, "menu_name" => "Produkter" <span>// lenke i menyen i administrasjonspanelet</span>) ; $args = array ( "labels" => $labels , "public" => sant , <span>// Takket være dette kan noen parametere hoppes over</span>"menu_icon" => "dashicons-cart" , <span>// handlevogn-ikon</span>"menu_position" => 5 , "has_archive" => true , "supports" => array ( "title" , "editor" , "excerpt" , "thumbnail" , "comments") , "taksonomies" => array ( " post_tag" ) ); register_post_type("produkt" ,$args ) ; )</td> </tr></table><p><span class="koXPsjWcBis"></span></p></ul> <p>Opprett en egendefinert posttype <b>Artikler</b> med egendefinerte kategorier (egendefinert taksonomi) <b>Artikler Kategori</b>.</p><p>I mitt tilfelle er alle standardposter produkter, så vi vil vise artikler gjennom tilpassede poster.</p><p>I funksjonsfilen functions.php registrerer vi en tilpasset posttype Artikler:</p><p>Funksjon wptp_create_post_type() ( $labels = array("name" => __("Artikler"), "singular_name" => __("Artikler"), "add_new" => __("Ny artikkel"), "add_new_item" => __("Legg til ny artikkel"), "edit_item" => __("Rediger artikkel"), "new_item" => __("Ny artikkel"), "view_item" => __("Se artikkel"), "search_items" => __("Søkeartikler"), "not_found" => __("Ingen artikler funnet"), "not_found_in_trash" => __("Ingen artikler funnet i papirkurven")),); $args = array( "labels" => $labels, "has_archive" => sant, "public" => sant, "hierarchical" => usant, "menu_position" => 5, "støtter" => array("tittel", "editor" , "utdrag", "egendefinerte felt", "miniatyrbilde")); register_post_type("artikler", $args); ) add_action("init", "wptp_create_post_type");</p><p>Hvis du vil at standardkategorier skal vises i egendefinerte innlegg, kobler du dem til kategorier-taksonomien:</p><p>"taksonomier" => array("kategori"),</p><p>Hvis du også oppretter tilpassede taksonomier for tilpassede innlegg, må du koble dem til de opprettede taksonomiene; hvis vi tar eksemplet nedenfor, vil disse være articles_category</p><p>"taksonomier" => array("articles_category"),</p><p>Deretter registrerer vi «Artikkelkategori»-taksonomiene for den egendefinerte artikkelposttypen slik at forskjellige innlegg kan tilhøre forskjellige kategorier.</p><p>Funksjon wptp_register_taxonomy() ( register_taxonomy("articles_category", "articles", array("labels" => array("name" => "Artikkelkategorier", "singular_name" => "Artikkelkategori", "search_items" => " Søk i artikkelkategorier", "all_items" => "Alle artikkelkategorier", "edit_item" => "Rediger artikkelkategorier", "update_item" => "Oppdater artikkelkategori", "add_new_item" => "Legg til ny artikkelkategori", "new_item_name" => "Nytt artikkelkategorinavn", "menu_name" => "Artikkelkategori", "hierarchical" => true, "sort" => sant, "args" => array("orderby" => "term_order"), "show_admin_column" => true)); ) add_action("init", "wptp_register_taksonomi");</p><p>For en tilpasset taksonomi kan du endre sneglen til en vakrere slik at den ikke er articles_category , men du må sørge for at slike snegler ikke lenger finnes på andre sider eller innlegg, ellers vil det oppstå problemer:</p><p>"rewrite" => array("slug" => "blogg"),</p><p>Når du endrer snegler, må du oppdatere "Permanente lenker"-innstillingene i administrasjonspanelet, ellers vil du motta en 404-feil i stedet for ønsket side.</p><p>Flere eksempler finner du her. Men det hjalp å sette all denne koden i orden, noe jeg er veldig takknemlig overfor forfatteren.</p><p>Filen single.php er ansvarlig for utseendet til et tilpasset innlegg, men for å endre utseendet til et tilpasset innlegg kan du lage en fil single-(post_type).php – i mitt tilfelle vil det være single-articles.php med sitt eget innhold.</p><p>Nå må du vise tilpassede innlegg på siden. Som standard er index.php-filen ansvarlig for å vise arkivet med tilpassede innlegg. Men du kan opprette en fil som vil være ansvarlig for å vise egendefinerte oppføringer i taksonomien din. <br></p><h2>Alternativ 1 er det mest korrekte. Vi viser oppføringer i taksonomien på samme måte som i en vanlig kategori.</h2><p>For å gjøre dette, lag en fil taxonomy-(taksonomy).php - i mitt tilfelle vil det være taxonomy-articles_category.php og i den viser vi den vanlige syklusen, som for standardoppføringer 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 dataene vi trenger for å hente fra hvert innlegg, for eksempel tittel, postlink, miniatyrbilde og utdrag.</p><p>I pagination.php-filen viser vi pagineringen i dette formatet.</p><p>Syklusen kan ikke endres, paginering fungerer utmerket. Dette er det beste alternativet for å vise tilpassede taksonomier. <br></p><h2>Alternativ 2 – hvis det ikke er egendefinerte taksonomier, kan du ganske enkelt få alle tilpassede innlegg i form av et arkiv</h2><p>For å gjøre dette, i malen lager vi en fil archive-(post_type).php - i mitt tilfelle vil det være archive-articles.php , der vi, akkurat som i taksonomien, viser en vanlig løkke, bare i stedet for Taksonomi tittel vi viser navnet på den tilpassede posttypen<?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 dette alternativet, hvis det ikke er opprettet en arkivside for et tilpasset innlegg, kan du få en liste over alle tilpassede innlegg ved å bruke direktelenken BLOG_URL?post_type=(post_type) eller i mitt tilfelle http://site.com/ artikler/ . <br></p><h2>Alternativ 3. Vis ganske enkelt alle egendefinerte artikler på en side med en gitt mal</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/skattepost"); endwhile; ?> <p>get_template_part("inkluder/skattepost"); – i tax-item.php-filen viser jeg innleggsinnholdet som jeg trenger for å vise innlegg inne i loopen (tittel, miniatyrbilde, dato, sitat osv.)</p><p>Dette alternativet viser alle artikler på siden, uavhengig av taksonomier (kategorier).</p><p>Og hvis vi trenger å vise hver kategori separat med sine egne nyheter, bruker vi det første alternativet beskrevet ovenfor.</p><p>Når det er sagt, hvis du bruker Yoast SEO-plugin og bruker brødsmulene:</p><p> <?php if (function_exists("yoast_breadcrumb")) { yoast_breadcrumb(" "); } ?> </p><p>Deretter, når du velger taksonomien "Artikkelkategori" i plugin-innstillingene i "Taxonomi skal vises i brødsmuler for innleggstyper", vil du i brødsmuler motta en lenke til kategorien som Nyhetene tilhører; med andre alternativer for å vise tilpassede innlegg , dette kunne ikke gjøres.</p> <p>Om tilpassede innleggstyper i WordPress (CPT, tilpassede innleggstyper i WordPress), hvordan du oppretter og konfigurerer, legger til kategorier og tagger, hvordan du lager nestede nettadresser /posttype/kategori/post eller http://example.com/post_type/ kategori/ innlegg/ . <br>Den beskriver også hvordan du kan utvide standardfunksjonaliteten til WordPress ved å lage nye typer innlegg som kan brukes til ulike formål: legge til din egen portefølje, en film- og musikkindeks, en produktkatalog, en eventkalender, til og med lage din egen lille online butikk (fordi stor er bedre å bruke ferdige løsninger som WooCommerce) eller et sosialt nettverk, og mye mer i denne ånden. <br>Først generell informasjon, så spesifikk.</p> <h2>Om innlegg i WordPress: hvor de er lagret i databasen og hvordan du får tak i dem</h2> <p>Absolutt alle innlegg i WordPress, som diskuteres nedenfor, er lagret i én tabell: wp_posts. Postmetadata, for eksempel data fra metabokser, lagres i wp_postmeta-tabellen.</p> <p>Jeg skal gi et eksempel på hvordan du får 10 innlegg av typen post (standard <b>Innlegg</b> i administrasjonspanelet). <br>Generelt sett er det ikke nødvendig å spesifikt be om data. I maler er de allerede forhåndsinstallert, for eksempel i single.php, er postdata allerede tilgjengelig for behandling i en loop</p><p>If (have_poster()) ( while (have_poster()) ( the_post(); // Her bruker vi data fra loopen, som for eksempel the_title() etc. ) )</p><p>Hvis data må hentes et sted utenfor loopen eller malen, brukes WP_Query-spørringen</p><p>$args = array("post_type" => "innlegg", // Innleggstype: side, vedlegg, ... "posts_per_page" => 10, // 10 innlegg om gangen); $p = get_posts($args); // Data kan utvides i en sløyfe hvis (!empty($p)) ( foreach ($p som $post) ( setup_postdata($post); ?> "><?= the_title() ?> <?php } wp_reset_postdata(); } </p><p>Data kan hentes ved hjelp av en SQL-spørring:</p><p>Global$wpdb; $query = "VELG * FRA ($wpdb -> innlegg) WHERE post_type = "post" LIMIT 10"; $p = $wpdb -> get_results($query); exit(print_r($p)); // $p inneholder nå en matrise med postdata</p><p>Alle de tre metodene ovenfor vil gi samme resultat. <br></p> <h2>Forhåndsinnstilte innleggstyper i WordPress: innlegg, side, vedlegg, revisjon, nav_menu_item</h2> <h3>Innlegg eller innlegg (innlegg)</h3> <p>Den mest brukte enheten av alle typer som er i WordPress er Posts (aka posts). Brukes som blogginnlegg og lignende. Den har 2 forhåndsinnstilte taksonomier: overskrifter, også kjent som kategorier (kategori) og koder, også kjent som koder (post_tag). <br>Taksonomier brukes til å sortere og organisere innlegg. <br>Kategorier skiller seg fra tagger ved at de har en trestruktur (de kan være nestet inne i hverandre). <br>Etiketter er enheter uavhengige av hverandre og på denne måten ligner de litt på Records. <br>Som standard genereres RSS-feeden til et WordPress-nettsted fra oppføringer.</p> <p>Følgende malfiler brukes for poster (i prioritert rekkefølge):</p> <ol><li>enkeltpost.php</li> <li>singel.php</li> <li>entall.php</li> <li>index.php</li> </ol><blockquote class="note"><p>Malfiler søkes fra topp til bunn i prioritert rekkefølge. Finnes en malfil i temaet, brukes den og søket stoppes.</p> </blockquote> <h3>Sider</h3> <p>Sidene brukes hovedsakelig som tjenestesider, landingssider, landingssider, leksikonsamlinger og lignende. De har et trelignende hierarki, det vil si at de kan nestes i hverandre, noe som gjenspeiles i adressen til den siste siden (overordnede snarveier vil være til stede i URL-kjeden), og i denne rollen er det mulig å gi dem prioritet i sorteringen. <br>For å opprette en landingsside kan du gå på to måter: <br></p> <h4>Lag en spesiell sidemal</h4> <p>Et sted inne i temaet i roten eller underkatalogen, lag en fil med et vilkårlig navn og php-utvidelse, for eksempel landing.php. Inne kan du plassere absolutt hvilken som helst mal, som kan være helt forskjellig fra andre sider på nettstedet. Men det viktigste er å plassere denne koden i begynnelsen av filen:</p><p> <?php /* Template Name: Наш уникальный лендинг */ </p><p>Malnavn er en spesiell etikett som forteller WordPress at denne filen er en spesiell mal. <br>Nå, når du oppretter og redigerer en side, se i blokken til høyre som heter Sideattributter, i den, i mal-delen, kan du velge vår unike landingsside.</p> <p>For Pages brukes følgende malhierarki. Som med Records, angir jeg i prioritert rekkefølge:</p> <ol><li>(mal).php</li> <li>side-(side_etikett).php</li> <li>side-(side_ID)</li> <li>side.php</li> <li>entall.php</li> <li>index.php</li> </ol><h3>Vedlegg, vedlegg eller vedlegg</h3> <p>En verktøytype designet for å lagre informasjon om filer (bilder, lyd, video og lignende) som ble lastet opp gjennom opplasteren i standard WordPress-redigeringsprogram når du redigerer et innlegg, side eller lignende: størrelse, vekt, beskrivelse, hvilket innlegg eller side de er knyttet til, og slike ting.</p> <p>Du kan få vedlegg for påfølgende manipulering med dem ved å bruke følgende kode:</p><p>$args = array("post_type" => "vedlegg", // Innleggstype: vedlegg "post_status" => "arv", // Standard er "publiser", og med det kan du ikke motta vedlegg, så vi indikerer en spesiell vedleggsstatus "arve"); $p = get_posts($args); exit(print_r($p)); // Ved utgangen vil vi ha en matrise med vedlegg</p><p>Hierarki av maler for vedlegg:</p> <ol><li>(mime-type).php</li> <li>(mime-undertype).php</li> <li>(mime-type-undertype).php</li> <li>vedlegg.php</li> <li>singel.php</li> <li>entall.php</li> <li>index.php</li> </ol><h3>Revisjoner, utkast eller revisjoner</h3> <p>Revisjoner, også kjent som revisjoner, er versjoner av utkast til innlegg som opprettes automatisk mens du skriver en artikkel i WordPress-administrasjonspanelet eller lagrer en artikkel uten faktisk å publisere den. <br>Under skriveprosessen, for hver artikkel, lagres hver versjon av utkastet som standard. Du kan sammenligne to forskjellige versjoner, og du kan rulle tilbake til den du trenger. <br>Å lagre mange versjoner av samme artikkel er ganske dyrt og ofte meningsløst (selv om det sannsynligvis ville vært mer riktig å la alt stå som standard, regelmessig rydde opp i gamle revisjoner ved hjelp av en plugin, for eksempel WP Optimize), så antall lagrede versjoner av revisjoner kan endres med 2 alternativer:</p> <ol><li>Bruk filteret wp_revisions_to_keep</li> <li>Registrer deg i wp-config.php //Deaktiver revisjoner til minimum mulig verdi define("WP_POST_REVISIONS", 0); <p>Mulige verdier:</p> <ul><li>true eller -1: Lagrer hver versjon av utkastet. Standardalternativ</li> <li>usant eller 0: deaktiverer lagring av utkast, bortsett fra 1 autolagring</li> <li>Heltall større enn null: det angitte antallet utkastversjoner lagres + 1 autolagring. Gamle versjoner som ikke passer innenfor det angitte antallet blir automatisk slettet</li> </ul></li> </ol><h3>Navigasjonsmenyelementer (nav_menu_item)</h3> <p>En navigasjonsmeny (nav_menu_item) er en posttype som lagrer informasjon om et navigasjonselement i WordPress. Den første, og så langt den eneste typen post som ikke brukes som andre typer poster, dataene for drift og visning på nettstedet får sine egne separate funksjoner. <br>Navigasjonsmenyer er heller ikke aktivert som standard. For å aktivere dem, må du erklære deres støtte i:</p> <ol><li>Skriv add_theme_support("menyer");</li> <li>Eller registrer en menyplass ved å bruke register_nav_menu() , så vil menystøtte bli aktivert automatisk</li> </ol><p>Bruk wp_nav_menu() for å få dataene fordi WP_Query ikke vil fungere, og det er en funksjon av posttypen nav_menu_item</p><p>// Denne koden vil fungere wp_nav_menu(); // Viser den første registrerte ikke-tomme menyen // Men koden nedenfor vil ikke fungere $args = array("post_type" => "nav_menu_item", // Innleggstype: side, vedlegg, ...); $p = get_posts($args); exit(print_r($p)); // Utdataene vil være en tom matrise</p><h2>Egendefinert innleggstype (CPT WordPress)</h2> <p>Nå kommer vi til det viktigste - verktøyet som lar deg utvide standard WordPress blogging funksjonalitet til uendelige muligheter: en tilpasset tilpasset posttype. <br>Det enkleste eksemplet på hvordan du kan registrere vår nye posttype sheensay_product</p><p>Add_action("init", "sheensay_post_type"); function sheensay_post_type() ( register_post_type("sheensay_product", array("labels" => array("name" => "Produkter", "singular_name" => "Produkter",), "public" => true, // type poster er åpne for søk og lignende "has_archive" => true, // Aktiver arkivsider "supports" => array("tittel", "editor", "thumbnail", "comments"), // Aktiver støtte for tittel, redaktør , miniatyrbilder, kommentarer)); )</p><p>Her er sheensay_product navnet på den nye posttypen. Det skal ikke komme i konflikt med andre i systemet, mer om dette nedenfor. <br>I denne utførelsesformen fungerer den også som en snarvei til denne typen innlegg, det vil si at den er til stede i URL-en. Hvis du vil spesifisere en annen snarvei, for eksempel <b>Produkter</b>, gjør som i eksemplet nedenfor</p><p>Add_action("init", "sheensay_post_type"); funksjon sheensay_post_type() ( register_post_type("sheensay_product", array("labels" => array("name" => "Produkter", "singular_name" => "Produkter",), "public" => true, "rewrite" => array("slug" => "produkter"), // Etiketten Custom Post Type "has_archive" => true, "supports" => array("tittel", "editor", "thumbnail"),) ) ;)</p><h3>Hvordan velge riktig navn for en ny posttype</h3> <blockquote class="attention"><p>Følgende navn er reservert i WordPress og kan ikke brukes som navn på en ny posttype:</p> <ul><li>vedlegg</li> <li>revisjon</li> <li>nav_menu_item</li> <li>handling</li> <li>tema</li> <li>rekkefølge</li> </ul><p>Du bør også unngå å bruke wp_-prefikset i begynnelsen av navnet, da dette kan føre til konflikter med fremtidige versjoner av WordPress-kjerne. <br>Det er best hvis du prefikser navn med vilkårlige prefikser relatert til navnet på nettstedet ditt, produktet eller merkevaren din, for eksempel sheensay_product, da vil du garantert unngå potensielle konflikter</p> </blockquote> <h3>Hvordan lage en tilpasset taksonomi</h3> <p>Tilpassede innleggstyper kan bruke taksonomier fra innlegg, for eksempel kategorier (kategorier) eller tagger (tagger), men du kan ha dine egne taksonomier.</p><p>Add_action("init", "sheensay_post_type"); function sheensay_post_type() ( // Registrer taksonomien register_taxonomy("sheensay_product_type", "sheensay_product", array("label" => "Typer", "hierarchical" => true, // Hvis TRUE, vil taksonomien være analog med overskrifter (kategorier). Hvis FALSE (standard), vil taksonomien bli en analog av etiketter (tags): "rewrite" => array("slug" => "product-type")),)); // Registrer en tilpasset 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 definert her "has_archive" => true, "supports" => array("tittel", "editor", "thumbnail") , // Aktiver støtte for tittel, editor, thumbnail )); )</p><h3>Maler for tilpassede innleggstyper</h3> <p>Alt avhenger av hva slags informasjon som vises. Det kan være 3 alternativer: en spesifikk postmal, en postarkivmal og en taksonomimal <br></p> <h4>Innleggssidemal</h4> <p>Oppført i prioritert rekkefølge</p> <ol><li>enkelt-(post_type).php</li> <li>singel.php</li> <li>index.php</li> </ol><h4>Postarkivmal</h4> <ol><li>arkiv-(post_type).php</li> <li>archive.php</li> <li>index.php</li> </ol><h4>Tilpasset taksonomimal</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 taksonomien som du vil opprette i administrasjonspanelet.</p> <h3>Hvordan få tilpassede posttypedata (Custom Post Type WordPress) og vise dem på nettstedet</h3> <p>Du kan få tilpassede posttypedata i WordPress for visning på nettstedet ditt ved å bruke de samme metodene som vanlige innlegg og sider</p><p>$args = array("post_type" => "sheensay_product", // Spesifiser vår 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 snakker om hovedforespørselen, for hvilken data for eksempel er forhåndslastet for visning på hovedsiden eller standard arkivsider, er vilkårlige innleggstyper deaktivert der. <br>Så hvis du vil at en opprettet innleggstype skal vises på for eksempel arkivsider sammen med vanlige innlegg, må du endre filteret for forhåndsinnlasting av innlegg</p><p>// Koble vårt "sheensay_product" til standard "post" og "page" add_action("pre_get_posts", "add_sheensay_product_in_main_query"); funksjon add_sheensay_product_in_main_query($query) ( if (is_archive() && $query -> is_main_query()) $query -> set("post_type", array("post", "page", "sheensay_product")); return $query ;)</p><h3>Ferdiglaget klasse for å lage tilpassede innleggstyper med tilpasset taksonomi</h3> <p>Nedenfor er en klasse som du kan registrere hvilken som helst egendefinert posttype med sin egen taksonomi, og URL-en vil se slik ut <br>http://example.com/products/type/product</p> <blockquote class="note"><p>For at URL-en skal genereres, må du gå til permalink-innstillingene /wp-admin/options-permalink.php og angi alle typer generelle innstillinger enn enkle</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 trenger ikke å gjøre noen endringer i den, men du kan endre posttypeetiketten helt til slutt i linjen new Sheensay_Product("products"); <br>Selve koden er skrevet i eller i . Det første alternativet er å foretrekke, siden du i dette tilfellet ikke vil miste tilgangen til innholdet i den nye posttypen når du endrer det aktive temaet.</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 */ 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")); ) function 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", // Legg til "add_new" => "Legg til ny", // Navn på lenken til en ny oppføring i sidefeltet "add_new_item" => "Legg til nye produkter" , // Tittel i editoren når du legger til en ny oppføring); $args = array("labels" => $labels, "public" => true, "publicly_queryable" => true, "show_ui" => true, "query_var " => true, "capability_type" => "innlegg", "hierarchical" => usant, "menu_position" => null, "supports" => array("tittel", "editor", "thumbnail", "excerpt" ), "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 forsiktig med denne funksjonen. Den tilbakestiller alle URL-deteksjonsregler. Det er bedre å kommentere det etter at alt arbeidet er fullført flush_rewrite_rules(); ) function product_permalink_structure($post_link, $post) (if (FALSE !== strpos($post_link, "%sheensay_product_type%")) ( $product_type_term = get_the_terms($post -> ID, "sheensay_product_type"); if (!empty ($product_type_term)) $post_link = str_replace("%sheensay_product_type%", $product_type_term -> slug, $post_link); ) return $post_link; ) function fix_product_category_pagetion($wp_rewrite) (unset($wp_rewrite -> regler[$this_rewrite) > 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; ) ) /* * Kjør klassen * I parentes kan du definere navnet på posttypeetiketten */ new Sheensay_Product("products");</p><p>Nå i administrasjonspanelet kan du registrere nye produkter og deres typer</p> <p>en! System for innholdshåndtering <b>WordPress</b> fikk anerkjennelse i flere år, men det virkelige gjennombruddet var implementeringen av muligheten til å skille poster i typer. I denne leksjonen skal vi se nærmere på tilpassede innleggstyper, deres opprettelse og bruk.</p> <h3>Litt historie</h3> <p>I praksis dukket det opp egendefinerte innleggstyper for ganske lenge siden, nærmere bestemt siden 17. februar 2005, da <b>WordPress 1.5</b> støtte for egendefinerte typer er lagt til for statiske sider, via post_type-feltet i databasen. Wp_insert_post()-funksjonen har eksistert siden <b>WordPress 1.0</b> så da post_type-feltet ble implementert i 1.5, var det ganske enkelt å fylle det ut med denne funksjonen.</p> <p>Og bare i versjon 2.8 dukket register_post_type()-funksjonen for å lage tilpassede typer opp, og noen andre nyttige ting var tilgjengelige i "nightly builds", og allerede fra 2.9 ble funksjonene tilgjengelige for alle.</p> <h3>Hva nå?!</h3> <p>En tilpasset posttype er ikke noe mer enn et vanlig innlegg (artikkel) med en spesifikk post_type-feltverdi i databasen. I et vanlig innlegg har post_type-feltet verdien <b>post</b>, siden er viktig <b>side</b> og så videre. Imidlertid kan vi nå lage våre egne typer for å spesifisere detaljene for innholdet i et innlegg. Du kan lage egendefinerte innleggstyper for bøker, filmer, vitser, produkter og alt annet. <br>Hvis det gjøres riktig, kan du oppnå følgende resultater med bare noen få linjer med kode:</p> <ul><li>Plasser en egendefinert type på hovedpanelet i admin-området med undermenyelementer: en liste over alle oppføringer med denne typen, og opprett også en ny oppføring med denne typen;</li> <li>Lag et arkiv med innlegg av denne typen, det vil si gjør noe som ligner på hovedsiden for en tilpasset type;</li> <li>Lag kategorier og tagger som kan nås av egendefinerte innleggstyper, samt tilpassede taksonomier.</li> </ul><p>Ulike typer innhold har ulike datakrav. For vanlige innlegg vil du inkludere forfatter, kategori og dato. Mens for en ordens skyld med "bok"-typen, vil jeg gjerne kunne spesifisere forfatteren av boken, antall sider, sjanger, utgiver og andre spesifikke data. Dette kan enkelt oppnås ved å bruke tilpassede (metabokser) områder for dataregistrering.</p> <p>— områder for å legge inn tilleggsdata direkte på siden for opprettelse av post. Disse områdene gjør det enklere å jobbe med tilpassede innleggstyper.</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>Arbeide med tilpassede innleggstyper</h3> <p>For å effektivt opprette og bruke tilpassede innleggstyper, bør du være kjent med følgende:</p> <ul><li>Opprette egendefinerte innleggstyper;</li> <li>Opprette en tilpasset taksonomi;</li> <li>Opprette tilpassede dataområder.</li> </ul><h4>Opprette egendefinerte innleggstyper</h4> <p>Det første du må gjøre er å lage selve den egendefinerte posttypen. Ideelt sett vil du lage en plugin for å håndtere tilpassede innleggstyper, men du kan også bruke temaets 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 = array (); <br>} <br></p> </td> </tr></tbody></table><p>Dette er den enkleste formen for å lage en type som har praktisk talt ingen innstillinger. For å utvikle den nye posttypen vår, bruker vi noen av de mest brukte alternativene og legger dem til den tidligere tomme $args-matrisen.</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 = array ( <br>"name" => _x( "Produkter", "innleggstype generelt navn") , <br>"singular_name" => _x( "Produkt" , "innleggstype singular name") , <br>"add_new" => _x( "Legg til nytt" , "produkt") , <br>"add_new_item" => __( <span>"Legg til nytt produkt"</span> ) , <br>"edit_item" => __( <span>"Rediger produkt"</span> ) , <br>"new_item" => __( "Nytt produkt") , <br>"all_items" => __( "Alle produkter") , <br>"view_item" => __( <span>"Se produkt"</span> ) , <br>"search_items" => __( "Finn et produkt") , <br>"ikke_funnet" => __( <span>"Ingen produkter funnet"</span> ) , <br>"not_found_in_trash" => __( <span>"Ingen produkter fjernet"</span> ) , <br>"parent_item_colon" => "" , <br>"menu_name" => "Produkter" <br>) ; <br>$args = array ( <br>"etiketter" => $etiketter , <br>"beskrivelse" => <span>"Egendefinert produktposttype"</span>, <br>"public" => sant , <br>"menu_posisjon" => 5 , <br>"supports" => array ("tittel", "editor", "thumbnail", "utdrag", "kommentarer", "product_category") , <br>"has_archive" => sant , <br>) ; <br>register_post_type( "produkt" , $args ); <br>} <br>add_action( "init" , "mitt_tilpasset_postprodukt" );</p> </td> </tr></tbody></table> <ul><li><b>etiketter</b>— denne serien med etiketter brukes til å beskrive den tilpassede posttypen som opprettes i emnet./li></li><li><b>beskrivelse</b>- et sammendrag av den tilpassede posttypen som opprettes, hva den gjør og hvorfor vi bruker den.</li> <li><b>offentlig</b>— om den tilpassede typen skal brukes offentlig og om den skal vises i det administrative området. I dette tilfellet er sannheten fastslått.</li> <li><b>menu_posisjon</b>— plasseringen av menyelementet av vår type på hovedadminpanelet. En verdi på 5 betyr at elementet vil bli installert umiddelbart etter "Records"-menyelementet, hvis 10 betyr etter "Mediafiler"-elementet, osv.</li> <li><b>støtter</b>— dette alternativet inneholder en matrise som beskriver feltene som vi kan redigere på siden for oppretting av post. Det vil si at tittel - et felt for å skrive inn navnet på innlegget vil vises, editor - et tekstområde vises for å skrive inn teksten til innlegget osv. Den tilpassede taksonomien som brukes, produktkategori , er også angitt.</li> <li><b>har_arkiv</b>- hvis satt til true, vil en omskrivingsregel bli opprettet, slik at du kan få en liste over poster av vår 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>Etter å ha installert denne koden i function.php-filen din, bør du se en meny for den tilpassede posttypen. Det er nå mulig å legge til en post og se listen over poster.</p> <p>Dette er imidlertid ikke alle alternativene for en rekke argumenter; du vil finne en komplett liste over alternativer og alle egenskapene til tilpassede typer.</p> <h4>Interaktive varsler</h4> <p>WordPress genererer noen meldinger utløst av brukerhandlinger. Vi kan også lage lignende meldinger for å varsle brukeren når han jobber med typer. Dette gjøres av 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["product"] = array( <br>0 => "" , <br>1 => sprintf ( __( <span>"Produkt oppdatert. Vis"</span><br>2 => __() , <br>3 => __(<span>"Egendefinerte felter oppdatert."</span>) , <br>4 => __(<span>"Produkt oppdatert."</span>) , <br>5 => isset ($_GET ["revisjon"]) ? sprintf ( __( <span>"Produktet gjenopprettet til revisjon fra %s"</span>) , wp_post_revision_title( (int) $_GET [ "revisjon" ] , falsk ) ): falsk , <br>6 => sprintf ( __( <span>"Produkt publisert. Vis"</span>) , esc_url( get_permalink($post_ID ) ) ), <br>7 => __(<span>"Produkt lagret."</span>) , <br>8 => sprintf ( __( <span>"Produktet er sendt. Se"</span><br>9 => sprintf ( __( <span>"Produktet er planlagt for: <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>"Produktutkast oppdatert. Vis"</span>), esc_url( add_query_arg( "forhåndsvisning" , "true" , ​​​​get_permalink($post_ID ) ) ), <br>) ; <br>returner $meldinger ; <br>} <br>add_filter( "post_updated_messages" , "my_updated_messages" );</p> </td> </tr></tbody></table><p>Merk at du kan angi varsler for alle tilpassede innleggstyper ved å bruke denne ene funksjonen. Hvis du ikke angir et typenavn, vil varsler bli brukt for alle tilpassede 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åder blir sjelden implementert og brukt. Som bruker har jeg aldri brukt denne funksjonen, men jeg er sikker på at noen fortsatt bruker dem. Så la oss lage slik kontekstuell hjelp. <br>Kontekstuelle hint er plassert i øvre høyre hjørne, nær fanen for skjerminnstillinger.</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 ( "edit-product" == $skjerm -> id ) (</p><p>$contextual_help = <span>"<h2>Produkter</h2><br> <p>Denne siden inneholder en liste over alle produkter som selges på siden. Oppføringene er i omvendt kronologisk rekkefølge, der de siste elementene som er oppført er elementene vi la til først.</p> <br> <p>Du kan se/redigere detaljer om hvert produkt ved å klikke på navnet, eller du kan utføre massehandlinger ved å bruke rullegardinmenyen ved å velge flere elementer.</p>" </span>; </p><p>) elseif ( "produkt" == $skjerm -> id ) (</p><p>$contextual_help = <span>"<h2>Opprette/redigere et produkt</h2><br> <p>Denne siden lar deg opprette et produkt eller redigere eksisterende data om det. Sørg for å fylle ut tilleggsfeltene.</p>" </span>; </p><p>} <br>returner $contextual_help ; <br>} <br>add_action( "kontekstuell_hjelp" , "min_kontekstuell_hjelp" , 10 , 3 );</p> </td> </tr></tbody></table><p>For å vise et slikt verktøytips må vi kjenne skjerm-ID. Hvis du under opprettelsen trenger å finne ut skjerm-IDen, gjør du bare dette:</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"> </td><td><p>echo $skjerm -> 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>Tilpasset taksonomi</h3> <p>For en vanlig blogg er kategorier og tagger nok til å skape en organisasjonsstruktur. Mens for tilpassede innleggstyper er dette ikke alltid nok. En tilpasset taksonomi kan løse dette problemet. I vårt tilfelle, en taksonomi kalt "Produktkategorier", som bare brukes for innlegg med en tilpasset type "Produkter".</p> <p>Prosessen med å lage en tilpasset taksonomi er nesten identisk med å lage tilpassede innleggstyper. La oss se på vårt 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>function my_taxonomies_product() ( <br>$labels = array ( <br>"navn" => _x( <span>"Produkt kategorier"</span>, "taksonomi generelt navn") , <br>"singular_name" => _x( <span>"Produktkategori"</span>, "taksonomi entallsnavn") , <br>"search_items" => __( <span>"Finn 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>"Oppdater produktkategori"</span> ) , <br>"add_new_item" => __( <span>"Legg til en ny produktkategori"</span> ) , <br>"new_item_name" => __( <span>"Ny produktkategori"</span> ) , <br>"menu_name" => __( <span>"Produkt kategorier"</span> ) , <br>) ; <br>$args = array ( <br>"etiketter" => $etiketter , <br>"hierarchical" => sant , <br>) ; <br>register_taksonomi( "produktkategori" , "produkt" , $args ) ; <br>} <br>add_action( "init" , "my_taxonomies_product" , 0 );</p> </td> </tr></tbody></table><p>Som når vi opprettet en egendefinert type, dannet vi en etikettmatrise, og indikerte at den hierarkiske strukturen er relevant for den opprettede taksonomien (det vil si at det kan være overordnede og underordnede elementer) - dette er typisk for kategorier i vanlige innlegg. Ellers, hvis strukturen ikke er hierarkisk, opprettes vanlige tagger. Du kan lese mer 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>Ytterligere dataområder</h3> <p>Du kan ha sett flere områder eller blokker for dataregistrering (metabokser) på siden for innleggsredigering. Alle kjenner standardene, for eksempel å velge en kategori eller tagger. Også i noen emner er det alternativer som lar deg legge ved et bilde til et innlegg, etc.</p> <p>Siden vi lager en tilpasset type "Produkter", vil vi åpenbart trenge prisen på produktet, la oss se på prosessen med å lage tilpassede.</p> <p>Opprettingsprosessen kan deles inn i 3 stadier:</p> <ul><li>Definisjon av selve blokken;</li> <li>Definere innholdet (hvilke felter som finnes i blokken);</li> <li>Beskrivelse av algoritmer for behandling av innlagte data.</li> </ul><h4>Definisjon av metabokser</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>"produktprisboks" , <br>__( "Produktpris", "myplugin_textdomain" ), <br>"product_price_box_content" , <br>"produkt" <br>"side" <br>"høy" <br>) ; <br>} </p> </td> </tr></tbody></table><p>Koden ovenfor oppretter en blokk med følgende parametere:</p> <ul><li><b>produktprisboks</b>— en unik identifikator for metaboksen (den trenger ikke samsvare med funksjonsnavnet);</li> <li><b>Produktpris</b>— navnet på metaboksen som administratoren ser på siden;</li> <li><b>product_price_box_content</b>— en funksjon som viser innholdet i vinduet;</li> <li><b>produkt</b>— navnet på den tilpassede posttypen som metaboksene tilhører;</li> <li><b>side</b>— plassering av blokken på siden (side, normal eller avansert — som standard);</li> <li><b>høy</b>— prioritet til metabokser (i dette tilfellet "høy", blokken er plassert helt øverst i sidefeltet. Alternativer: høy, kjerne, lav eller standard - som standard).</li> </ul><h4>Innholdsdefinisjon</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="angi pris">" </span>; <br>} </p> </td> </tr></tbody></table><p>Vi legger bare til ett felt for å angi prisen på produktet. Merk at navnet på funksjonen samsvarer med verdien til den tredje parameteren når den er deklarert (koden ovenfor).</p> <h4>Behandling av innlagte data</h4> <p>Det siste trinnet er å lagre den angitte produktprisen 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 (definert("DOING_AUTOSAVE") && DOING_AUTOSAVE) <br>komme tilbake ;</p><p>if ( ! wp_verify_nonce( $_POST [ <span>"product_price_box_content_nonce"</span>] , plugin_basename( __FILE__ ) ) ) <br>komme tilbake ;</p><p>if ( "page" == $_POST [ "post_type" ] ) ( <br>if ( ! current_user_can( "edit_page" , $post_id ) ) <br>komme tilbake ; <br>) annet ( <br>if ( ! current_user_can( "edit_post" , $post_id ) ) <br>komme tilbake ; <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 av funksjonen er sjekker. Først av alt er autolagring merket av, prisen vil ikke lagres før lagre eller oppdater-knappen trykkes. Deretter kontrolleres tilgangsrettighetene til å redigere dataene til dette innlegget, og først etter det, ved å bruke update_post_meta-funksjonen, legges prisen inn i databasen.</p> <h3>Viser innlegg av den opprettede typen på bloggen</h3> <p>Vi har gått gjennom alle stadier av å lage en egendefinert posttype, alt som gjenstår er å dra nytte av fruktene av arbeidet vårt og lage en visning av innlegg på bloggen i samsvar med taksonomien vi har etablert.</p> <p>Siden vi under opprettelsen av den tilpassede typen spesifiserte true for has_archive-parameteren, er listen over oppføringer for produkttypen tilgjengelig på http://mysite.com/product/ .</p> <p>Arkiv-.php-filen (i vårt tilfelle archive-product.php) brukes til visning hvis den finnes. Ellers vil archive.php bli brukt for visning, og hvis en slik fil ikke er i temaet, vil den bruke ) <br>) ; <br>$products = new WP_Query( $args ) ; <br>if ( $products -> 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>ellers( <br>ekko <span>"Å nei, ingen mat funnet!"</span>; <br>} <br>?> </p> <h4>Prisvisning</h4> <p>Tilleggsdataene som legges inn, i vårt tilfelle prisen på produktet, kan hentes ved hjelp av get_post_meta()-funksjonen. Siden vi i tillegg bruker feltet product_price, for å få prisverdien:</p> <h3>Plugin for å lage tilpassede innleggstyper</h3> <p>Hvis du ikke er trygg på dine programmeringsevner, kan du alltid finne en ferdig løsning (plugin) og bruke den. Tilpassede typer er intet unntak. Plugg inn <b>WCK Custom Post Type Creator</b> lar deg enkelt lage tilpassede innleggstyper for WordPress uten kodekunnskap.</p> <p>Standardkategoriene brukes kun for innlegg. I noen scenarier kan det imidlertid være lurt å bruke dem med en tilpasset posttype. I denne artikkelen vil vi fortelle deg hvordan du gjør dette.</p> <h4>Plugin-metode</h4> <p>For nybegynnere anbefaler vi å bruke Custom Post Type UI-plugin for å lage en egendefinert posttype. Ved å bruke denne plugin-modulen har du muligheten til å knytte en tilpasset posttype til en hvilken som helst innebygd eller tilpasset taksonomi, inkludert kategorier. Etter å ha installert plugin, gå til CPT UI » Legg til/rediger innleggstyper for å opprette en ny tilpasset posttype eller redigere en eksisterende.</p> <p>Rull ned til Avanserte alternativer, og der vil du se alternativet Innebygd taxnomies. Merk av i boksen ved siden av kategorier og lagre innleggstypen din.</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>Legge til kategorier manuelt for en tilpasset innleggstype</h4> <p>Hvis du opprettet en egendefinert posttype ved å legge til kode i functions.php-filen din, må du endre den koden for å legge til kategorien som en støttet taksonomi. Alt du trenger å gjøre er å legge til denne linjen i dine egendefinerte innleggstypeargumenter:</p> <p><i>'taksonomier' => array('kategori'),</i></p> <p>Det er mulig at du allerede har denne linjen i koden din med en annen tilpasset taksonomi. I så fall trenger du bare å legge til et komma etter det og legge til en kategori:</p> <p><i>'taksonomier' => array('emner', 'kategori'),</i></p> <p>Her er et eksempel på hele koden der vi laget en egendefinert posttype kalt "filmer" med støtte for alle de innebygde kategoriene.</p><p>Funksjon custom_post_type() ( // Sett UI-etiketter for Custom Post Type $labels = array("name" => _x("Filmer", "Innleggstype generelt navn", "twentythirteen"), "singular_name" => _x(" Movie", "Post Type Singular Name", "twentythirteen"), "menu_name" => __("Movies", "twentythirteen"), "parent_item_colon" => __("Overordnet film", "twentythirteen"), "all_items" " => __("Alle filmer", "twentythirteen"), "view_item" => __("Se film", "twentythirteen"), "add_new_item" => __("Legg til ny film", "twentythirteen"), "add_new" => __("Legg til ny", "twentythirteen"), "edit_item" => __("Rediger film", "twentythirteen"), "update_item" => __("Oppdater film", "twentythirteen") , "search_items" => __("Søk etter film", "twentythirteen"), "not_found" => __("Ikke funnet", "twentythirteen"), "not_found_in_trash" => __("Ikke funnet i papirkurven", " twentythirteen")),); // Angi andre alternativer for Custom Post Type $args = array("label" => __("filmer", "twentythirteen"), "description" => __("Filmnyheter og anmeldelser", "twentythirteen"), "labels" => $labels, "supports" => array("tittel", "editor", "utdrag", "author", "thumbnail", "comments", "revisions", "custom" -fields",), "hierarchical" => usant, "public" => sant, "show_ui" => sant, "show_in_menu" => sant, "show_in_nav_menus" => sant, "show_in_admin_bar" => sant, "menu_position " => 5, "can_export" => sant, "has_archive" => sant, "exclude_from_search" => usant, "publicly_queryable" => sant, "capability_type" => "side", // Det er her vi legger til taksonomier til vår CPT "taksonomier" => array("kategori"),); // Registrere din egendefinerte posttype register_post_type("movies", $args); ) /* Koble til "init"-handlingen slik at funksjonen * Inneholder vår posttyperegistrering ikke * blir unødvendig utført. */ add_action("init", "custom_post_type", 0);</p><h4>Viser flere innleggstyper på en kategoriside</h4> <p>Som standard viser kategorisider på et WordPress-nettsted standard posttype. Hvis du vil at innleggstypen din skal vises på samme kategoriside som standardinnlegg, må du legge til følgende kode i functions.php-filen din:</p><p>Add_filter("pre_get_posts", "query_post_type"); funksjon query_post_type($query) ( if(is_category()) ( $post_type = get_query_var("post_type"); if($post_type) $post_type = $post_type; else $post_type = array("nav_menu_item", "post", " filmer"); // ikke glem nav_menu_item for å la menyer fungere! $query->set("post_type",$post_type); return $query; ) )</p><p>Ikke glem å endre filmer til navnet på din egendefinerte posttype.</p> <p><i>Vår spesialitet er utvikling og støtte for WordPress-sider. Kontakter for gratis konsultasjon - ,</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>Mer informasjon 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/ebe5b7cf62ddb7529304c174faee11a6.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Ytelsestesting" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/no/testirovanie-proizvoditelnosti-grand-theft-auto-v-grafika/">Ytelsestesting</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/2bbd0911f42638a456fe6422669f89a1.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Registrere en personlig side på det sosiale nettverket Facebook" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/no/kak-sdelat-novuyu-registraciyu-v-feisbuk-registraciya-lichnoi/">Registrere en personlig side på det sosiale nettverket Facebook</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/6511d5da665afbd94f5985e4502b1150.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Jeg kan ikke registrere meg på Facebook - hva er årsaken?" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/no/mozhno-li-voiti-v-feisbuk-bez-registracii-ne-poluchaetsya-zaregistrirovatsya-v/">Jeg kan ikke registrere meg på Facebook - hva er årsaken?</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/70832c410f6bed31d79150308d0f5920.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Kjøretøy og teksturer for Grand Theft Auto San Andreas" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/no/mashiny-dlya-gta-samp-transportnye-sredstva-i-tekstury-dlya-grand-theft-auto/">Kjøretøy og teksturer for Grand Theft Auto San Andreas</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/07978dd6719c877fd55dbb1502287170.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Last ned autoklikker for minecraft med mus" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/no/skachat-avtokliker-dlya-minecraft-myshkoi-avtokliker-dlya-myshi-avtokliker/">Last ned autoklikker for minecraft med mus</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/bd003dc68f273f30f542bb856c7ebaff.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Vurdering av smarttelefoner med et godt kamera Kjennetegn på alle fire sensorene" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/no/reiting-smartfonov-s-horoshei-kameroi-reiting-smartfonov-s-horoshei/">Vurdering av smarttelefoner med et godt kamera Kjennetegn på alle fire sensorene</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/4c8e795d0523c87ff2a50a2508ac2797.jpg" width="65" height="65" title="Hvordan aktivere eller deaktivere den andre linjen?" alt="Hvordan aktivere eller deaktivere den andre linjen?" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/no/kak-podklyuchit-vtoruyu-liniyu-na-tele2-kak-vklyuchit-otklyuchit-vtoruyu-liniyu/" class=""><br>Hvordan aktivere eller deaktivere den andre linjen?</a></li> <li> <div class="replacemy"><img src="/uploads/2cde06f59bd19ef62c37b42fa5d5d507.jpg" width="65" height="65" title="Barnespill Spill om emnet multiplikasjonstabeller" alt="Barnespill Spill om emnet multiplikasjonstabeller" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/no/detskie-igry-detskie-igry-igra-na-temu-tablica-umnozheniya/" class=""><br>Barnespill Spill om emnet multiplikasjonstabeller</a></li> <li> <div class="replacemy"><img src="/uploads/4d239e8eec8de6606db685170dbe84bd.jpg" width="65" height="65" title="Hvordan stille inn sidenummerering i Word?" alt="Hvordan stille inn sidenummerering i Word?" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/no/kak-legko-postavit-numeraciyu-stranic-v-vorde-kak-postavit-numeraciyu-stranic-v/" class=""><br>Hvordan stille inn sidenummerering i Word?</a></li> <li> <div class="replacemy"><img src="/uploads/e9a0947b5b58eff6527cc4ca282f2e69.jpg" width="65" height="65" title="Få rotrettigheter til HTC Desire V" alt="Få rotrettigheter til HTC Desire V" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/no/root-desire-v-poluchenie-root-prav-na-htc-desire-v-poluchenie-root-rut-prav-na-htc-desire/" class=""><br>Få rotrettigheter til HTC Desire V</a></li> <li> <div class="replacemy"><img src="/uploads/e54918d5526e10b8fb87d3451e710cd6.jpg" width="65" height="65" title="Firmware for vega explay Hvordan flashe vega explay på Android 5" alt="Firmware for vega explay Hvordan flashe vega explay på Android 5" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/no/proshivka-dlya-vega-explay-proshivka-dlya-vega-explay-kak-proshit-eksplei-vega-na/" class=""><br>Firmware for vega explay Hvordan flashe vega explay på Android 5</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. Feil. Spill. Sammenbrudd. Teknikk. Internett <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/no/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/no/feedback/">Tilbakemelding</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 av 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>