Skip to content

Alt om WordPress, webutvikling — og mer til

💡 Hvordan lage en egendefinert innholdstype i WordPress: kode og plugin

💡 Hvordan lage en egendefinert innholdstype i WordPress: kode og plugin

Standard Posts and Pages dekker de fleste oppgaver for et typisk nettsted. Men når en produktkatalog, eiendomsdatabase eller prosjektportefølje kommer inn i bildet, er ikke disse to innholdstypene lenger nok. Å blande produkter med bloggutkast er upraktisk, og å overlesse sider med egendefinerte felt er en vei til kaos i administrasjonspanelet.

WordPress løser dette problemet gjennom Custom Post Types, Custom Post Types (CPT). Du oppretter en egen seksjon i sidemenyen med egne felt, kategorier og visningsmaler. Produkter lever adskilt fra artikler. Arrangementer blandes ikke med sider. Data forblir der de hører hjemme.

Nedenfor finner du to testede metoder: via kode med register_post_type() (fleksibelt, null ekstra plugins) og via den gratis plugin-en CPT UI (ingen PHP nødvendig). Begge fungerer på WordPress 6.7+ og har blitt testet på produksjonsnettsteder.

💡 Rask oversikt:

  • Registrer en ny posttype gjennom kjernefunksjonen register_post_type(), uten plugins, med full kontroll over parametere.
  • Kodefri alternativ: Custom Post Type UI-pluginen gir et visuelt grensesnitt, senker inngangsterskelen og eliminerer syntaksfeil.
  • Etter registrering vises typen i sidemenyen. Siste finpuss: taksonomier, felt og oppfriskning av permalenker.

Hva er en custom post type

Alt innhold i WordPress er en post med et post_type-felt i wp_posts-tabellen. For blogginnlegg er det post. For sider er det page. For vedlegg er det attachment. En egendefinert type legger til en annen verdi: product for produkter, event for arrangementer, portfolio for prosjekter. Det som passer ditt nettsteds behov.

Hver CPT får sitt eget menyelement i administrasjonspanelet, en URL-struktur (/events/webinar-2026/), sine egne taksonomier og støtte for redigeringsblokkene du trenger: utvalgte bilder, utdrag, editor, kommentarer. Alt dette aktiveres gjennom avkrysningsbokser i supports-arrayet, ingen magi involvert.

Den største fordelen er organisering. Produkter flyter ikke rundt i bloggstrømmen. Arrangementer trenger ikke å filtreres ut fra en generell haug. Administrasjon går raskere, og nettsidens søk fungerer mer presist.

Metode 1: registrering via kode, register_post_type()

Den grunnleggende metoden som har fungert siden WordPress 3.0. Ingen tredjeparts plugins nødvendig. Koden plasseres i barnetemaets functions.php eller, tryggere, via Code Snippets-pluginen: en kodefeil vil ikke krasje nettstedet, men vil ganske enkelt deaktivere den spesifikke snippeten.

Steg 1: funksjon på init-hooken

Funksjonen hektes på init. Tidligere vil ikke fungere fordi kjernen ikke er klar til å akseptere registreringer ennå. Senere betyr at typen ikke vil bli plukket opp før neste forespørsel. Her er en minimal fungerende mal:

1/**
2 * Registers a custom post type 'Books'.
3 * Place in functions.php of the child theme or via Code Snippets.
4 */
5function myprefix_register_book_post_type() {
6 register_post_type( 'book', array(
7 'labels' => array(
8 'name' => 'Books',
9 'singular_name' => 'Book',
10 'add_new_item' => 'Add New Book',
11 'edit_item' => 'Edit Book',
12 'view_item' => 'View Book',
13 'search_items' => 'Search Books',
14 'not_found' => 'No books found',
15 ),
16 'public' => true,
17 'has_archive' => true,
18 'rewrite' => array( 'slug' => 'books' ),
19 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
20 'show_in_rest' => true,
21 'menu_icon' => 'dashicons-book-alt',
22 ) );
23}
24add_action( 'init', 'myprefix_register_book_post_type' );

Etter at koden er satt inn, vises en "Bøker"-seksjon i administrasjonspanelet. Post-URL-er blir site.ru/books/book-name/. Det fungerer umiddelbart.

Steg 2: nøkkelparametere

Funksjonen tar to argumenter: en typenøkkelstreng (opptil 20 tegn, latinske bokstaver og bindestreker) og et innstillingsarray. Her er parameterne det er verdt å konfigurere bevisst:

Parameter

Hva den gjør

Anbefaling

public

Synlighet i admin og frontend

true for de fleste tilfeller

has_archive

Arkivside for alle poster av denne typen

true for kataloger og samlinger

rewrite

URL-struktur (slug)

Angi eksplisitt, uten spesialtegn

supports

Redigeringsblokker

Minimum: title editor thumbnail

show_in_rest

Tilgjengelighet i blokkredigereren

true er obligatorisk, ellers åpnes ikke Gutenberg

menu_icon

Ikon i sidemenyen

Velg fra Dashicons

Steg 3: taksonomier

Innleggskategorier og -tagger er ikke knyttet til din CPT som standard. Opprett dine egne:

1function myprefix_register_book_taxonomies() {
2 register_taxonomy( 'genre', 'book', array(
3 'label' => 'Genres',
4 'rewrite' => array( 'slug' => 'genre' ),
5 'hierarchical' => true,
6 'show_in_rest' => true,
7 ) );
8
9 register_taxonomy( 'book_tag', 'book', array(
10 'label' => 'Book Tags',
11 'rewrite' => array( 'slug' => 'book-tag' ),
12 'hierarchical' => false,
13 'show_in_rest' => true,
14 ) );
15}
16add_action( 'init', 'myprefix_register_book_taxonomies' );

Taksonomier registreres gjennom register_taxonomy() med en eksplisitt binding til post_type som den andre parameteren. hierarchical => true gir en trestruktur som kategorier. false gir en flat liste som tagger.

Steg 4: oppfrisk permalenker

Etter registrering, gå til Innstillinger → Permalenker og klikk "Lagre endringer", selv om du ikke har endret noe. WordPress vil bygge om rutingsreglene. Uten dette steget vil URL-er som /books/ returnere 404.

Når kode er nok

Denne metoden fungerer godt for én eller to egendefinerte typer når strukturen ikke endres ofte. Pluss: null ekstra plugins og full kontroll over hver parameter. Minus: for komplekse relasjoner mellom flere CPT-er og frontend-innsendingsskjemaer vokser koden raskt.

Metode 2: uten kode, Custom Post Type UI-plugin

Hvis du ikke vil røre functions.php, installer Custom Post Type UI. En gratis plugin fra WebDevStudios: én million aktive installasjoner, 4,6 i vurdering på WordPress.org. Oppdatert i mai 2026, testet opp til WP 7.0.

Grensesnitt for å legge til en egendefinert innholdstype i CPT UI-utvidelsen

Hvordan opprette en CPT gjennom grensesnittet

  • Installer pluginen: Plugins → Legg til ny → "Custom Post Type UI" → Installer → Aktiver.
  • Gå til CPT UI → Legg til/Rediger posttyper.
  • Fyll ut feltene: Post Type Slug (latinske bokstaver, for eksempel event), Plural Label ("Arrangementer"), Singular Label ("Arrangement").
  • I Innstillinger-blokken, kryss av for: Public (True), Has Archive (True), Show in REST API (True).
  • I Supports-blokken, kryss av for minimum: Title, Editor, Thumbnail, Excerpt.
  • Klikk Legg til posttype.

Taksonomier opprettes på samme sted, under fanen Legg til/Rediger taksonomier. Spesifiser bindingen til din posttype, og kategorier vil vises i sidemenyen.

Styrker

Rask registrering uten risiko for syntaksfeil: pluginen setter sammen et korrekt $args-array på egen hånd. Verktøy-fanen muliggjør type-migrering mellom nettsteder gjennom kodeeksport og -import. CPT UI Pro legger til blokker for frontend-visning og dra-og-slipp-kolonner i administrasjonspanelet, men gratisversjonen dekker fullt ut registreringsoppgaven.

Merk at pluginen kun registrerer typer og taksonomier. For frontend-visning trenger du enten temamaler, CPT UI Pro, eller en kombinasjon med Advanced Custom Fields eller Elementor.

Sammenligning: kode versus plugin

Kriterium

Kode (register_post_type)

Plugin (CPT UI)

Inngangsterskel

Krever forståelse av PHP-arrays

Grensesnitt ligner standard WP-innstillinger

Antall CPT-er

Ubegrenset

Ubegrenset

Overføring mellom nettsteder

Kopier koden

Eksport/import via Verktøy

Ekstra kode på nettstedet

Ingen

Pluss én plugin

Plugin-avhengighet

Ingen

Ja, CPT UI må være aktiv

Dokumentasjon

developer.wordpress.org

docs.pluginize.com

I praksis brukes ofte en kombinasjon: registrer typer gjennom CPT UI for hastighet, og legg til felt gjennom Advanced Custom Fields. Dette gir deg et visuelt konfigurasjonsgrensesnitt uten en eneste linje PHP.

⁉️🤔 Ofte stilte spørsmål

Må jeg oppfriske permalenker etter å ha opprettet en CPT?

Ja, alltid. Gå til Innstillinger → Permalenker og klikk "Lagre." WordPress vil bygge om rutingsreglene. Uten dette vil nye URL-er som /books/ returnere 404.

Hvordan skiller CPT UI seg fra ACF i type-registrering?

CPT UI registrerer kun posttyper og taksonomier. ACF, fra og med versjon 6.1, kan også registrere CPT-er, men dens hovedstyrke er egendefinerte felt. CPT UI + ACF-kombinasjonen gir deg et grensesnitt for typer og fleksible felt. Du er ikke låst til én enkelt leverandør.

Kan jeg gi nytt navn til en eksisterende posttype?

Det finnes ingen direkte mekanisme. Når du endrer post_type i databasen, forsvinner gamle poster fra administrasjonspanelet. Den riktige tilnærmingen: opprett en ny type med ønsket navn, migrer poster med en SQL-spørring UPDATE wp_posts SET post_type = 'new_type' WHERE post_type = 'old_type', og fjern først deretter den gamle registreringen. En full databasebackup før migrering er obligatorisk.

Vil egendefinerte typer forsvinne når man bytter tema?

Hvis typer er registrert i temaets functions.php, ja, når du bytter tema vil de forsvinne fra administrasjonspanelet. Postene vil forbli i databasen, men vil ikke være synlige. Registrer CPT-er i en separat plugin eller gjennom Code Snippets, så vil typene overleve ethvert temabytte.

Hvordan viser jeg CPT på forsiden i den generelle strømmen?

Legg til et filter i Code Snippets: add_filter( 'pre_get_posts', function( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } );. Bytt ut din post_type i arrayet, så vil postene vises i strømmen sammen med vanlige innlegg.

Hvilken metode du bør velge: endelig oppsummering

Begge metodene fører til samme resultat: en ny seksjon vises i sidemenyen, klar til å fylles med innhold. Forskjellen ligger kun i verktøyet.

Hvis du jobber praktisk med nettstedet og ikke er redd for functions.php, bruk kode. Én register_post_type()-funksjon, null ekstra plugins. Egnet for landingssider, små kataloger og prosjekter med utviklerstøtte.

Hvis du overleverer nettstedet til en kunde eller bygger et innholdsprosjekt med et dusin typer, installer CPT UI. Det visuelle grensesnittet senker inngangsterskelen, og konfigurasjonseksport sparer timer ved migrering mellom plattformer.

I alle tilfeller, etter registrering, sett opp visningen: single- og archive-maler i temaet eller visuell layout gjennom CPT UI Pro / Elementor Pro. Uten dette steget vil innholdet forbli kun i administrasjonspanelet.