WordPress: Een volledig praktisch handboek over het maken en publiceren van aangepaste artikeltypes

3 minuten leestijd
2026-03-17
2026-06-04
2,411
Ik verdien commissies wanneer je via de onderstaande links winkelt, zonder dat dit extra kosten voor jou met zich meebrengt.

Wat zijn custom artikeltypes in WordPress?

WordPress biedt standaard twee soorten inhoud aan: “Artikelen” en “Pagina’s”. Voor het bouwen van complexe websites zijn deze echter vaak onvoldoende. Hierdoor wordt het gebruik van aangepaste artikeltypes (Custom Post Types) handig. CPTDit is een kernfunctie van WordPress en biedt ontwikkelaars de mogelijkheid om nieuwe soorten content te creeren met een eigen datagestructuur en een achtergrondbeheerinterface. Je kunt dit zien als een soort “contenttemplate” voor het beheer van specifieke soorten informatie.

Als voorbeeld: een filmrecensiewebsite kan de standaardartikeltype gebruiken voor het schrijven van nieuws, en tegelijkertijd een aangepaste artikeltype genaamd “Film” maken om filmartikelen te beheren. Elke filmartikel kan dan specifieke gegevens bevatten zoals de regisseur, de hoofdacteurs en de beoordelingen. Een e-commercewebsite kan een “Product”-type maken, en een schoolwebsite kan een “Kursus”-of “Leraar”-type maken. Door deze aangepaste artikeltypen te gebruiken, kan de website de inhoud beter organiseren en beheren. CPTDe verschillende soorten content zijn duidelijk van elkaar gescheiden, waardoor de dataverwerking efficiënter wordt. Dit vormt ook een solide basis voor het later aanpassen van templates en het uitbreiden van functies.

Hoe maak je een aangepaste artikeltype?

Er zijn twee principale manieren om in WordPress een aangepaste artikeltype te creeren: door code te gebruiken of door plugins te installeren. Voor ontwikkelaars is het heel belangrijk om de methode van code-registratie onder de knie te hebben, omdat dit de hoogste flexibiliteit en controle biedt, en het gemakkelijk maakt om versies te beheren in thema's of aangepaste plugins.

Aanbevolen leesmateriaal Volledig in de kunst van custom artikeltypes in WordPress: van het maken tot geavanceerde toepassingen

Een aangepaste artikeltyp registreren met code

De meest standaardiseerde en aan te raden manier is om dit te doen in het thema… functions.php In een bestand of als een aparte functionaliteitsplug-in te gebruiken. register_post_type De functie wordt geregistreerd. De functie accepteert twee parameters: een identificator (slug) voor de aangepaste artikeltype en een array met alle vereiste parameters.

UltaHost WordPress-hosting
30-daagse garantie voor het terugbetalen van het geld, onbeperkt bandbreedte- en databestand, gratis DDoS-beveiliging, en een prijsvoordeel van 50% bij een aankoop van 3 jaar.

Hieronder staat een basisvoorbeeld van een aangepaste artikeltyp genaamd “Film”:

function create_movie_post_type() {
    $labels = array(
        'name'               => '电影',
        'singular_name'      => '电影',
        'menu_name'          => '电影管理',
        'add_new_item'       => '添加新电影',
        'edit_item'          => '编辑电影',
        'view_item'          => '查看电影',
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'movie' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-video-alt',
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    );
    register_post_type( 'movie', $args );
}
add_action( 'init', 'create_movie_post_type' );

Deze code doet dit door add_action De hook wordt uitgevoerd tijdens het initialiseren van WordPress. create_movie_post_type Een functie. Binnen de functie zijn labels gedefinieerd die worden weergegeven. $labels En de kernparameters $argsDe belangrijkste parameters zijn:public Beheer of de inhoud wordt weergegeven in de achtergrond of op het scherm.rewrite Definieer regels voor het herschrijven van URL's; wanneer men hier een link naar een specifieke film opent, zal de link worden omgezet in… yoursite.com/movie/some-moviehas_archive Beslissen of er een archiveringspagina moet worden gemaakt (bijvoorbeeld)... yoursite.com/movie/);supports Het array bepaalt de functies die deze contenttype ondersteunt, zoals titels, editors, prominente afbeeldingen, en meer.

Een custom artikeltype maken met een plugin

Voor gebruikers die weinig kennis hebben van code, zijn plugins een uitstekende optie om snel te kunnen starten. Custom Post Type UI en Toolset Types zijn twee zeer populaire plugins. Ze bieden een intuïtieve gebruikersomgeving, waardoor je gemakkelijk nieuwe posttypen kunt definiëren door velden aan te vinken en formulieren in te vullen. CPT De verschillende eigenschappen, zoals tags, beschikbaarheid voor het publiek, en ondersteunde functies.

Het creeren van functies met plugins is simpel en snel, maar dit kan meestal tot extra database-verzoeken leidden. Bovendien is de configuratie afhankelijk van de plugin zelf. Wanneer je een website verhuist naar een andere host of een grote update uitvoert, kan het nodig zijn om extra stappen te ondernemen om te zorgen dat de instellingen van de aangepaste artikeltypes worden behouden. Voor productieomgevingen of projecten die op de lange termijn worden onderhouden, is het gebruik van code-based oplossingen dus vaak de betere keuze.

Aanbevolen leesmateriaal WordPress-themaontwikkelingsgids: van nul een high-performance, maatgeschreven thema bouwen

Een custom veld toevoegen aan een zelfgemaakte artikeltype

Een zelfgemaakte artikeltyp biedt alleen een structuurraamwerk aan. Om unieke informatie (zoals de “release-date” of de “regisseur” van een film) daadwerkelijk op te slaan, zijn custom fields of krachtigere meta boxes nodig. WordPress beschikt over een ingebouwd paneel voor custom fields, maar het heeft een simpel ontwerp en beperkte mogelijkheden, waardoor het niet ideaal is voor contenteditors.

Het gebruik van de plugin voor geavanceerde, aangepaste velden

Het Advanced Custom Fields (ACC)-plugin is de standaard in de branche voor het beheer van aangepaste velden. Het biedt je de mogelijkheid om aangepaste velden via een grafische interface toe te voegen aan verschillende soorten artikelen (inclusief die van jouw eigen website). CPTJe kunt verschillende soorten groepen velden maken, zoals tekstvelden, afbeeldingen, keuzelijsten en relatiegegevens.

Als je bijvoorbeeld “film” hebt…” CPT Maak een groep velden met de onderdelen “regisseur”, “hoofdrolspeler” en “uitgiftsjaar”. Na het installeren en activeren van het ACF-plugin, ga je naar de instellingen van het plugin en maak je een nieuwe groep velden. Stel de regel voor de positie van deze groep in op “Artikeltype = Film”. Vervolgens voeg je één voor één de velden “Regisseur” (een tekstveld), “Hoofdrolspeler” (een tekstgebiedsveld) en “Uitgiftsjaar” (een cijferveld) toe. Na het opslaan zie je deze invoervelden tijdens het bewerken van filminformatie in de backend.

hosting.com gedeelde hosting
Hoge prestaties met AMD EPYC CPU's, NVMe SSD opslag en LiteSpeed, 24/7 deskundige interne ondersteuning, geavanceerde beveiligingsmaatregelen waaronder SSL, bescherming tegen brute kracht, malware en DDoS, besparingen tot 73%

Een custom meta-box creëren met code:

Als je het volledig met code wilt regelen, kun je dit voor je… CPT Een persoonlijke meta-box ontwikkelen betekent dat je de WordPress Meta-Box API en de opslagfuncties gebruikt. Hoewel de hoeveelheid code aanzienlijk kan zijn, biedt dit de volledige vrijheid om het te customizen naar wens.

Hier is een versimpeld voorbeeld dat laat zien hoe je een veld voor de “regisseur” kunt toevoegen aan een “film”:

// 1. 添加元框
function add_movie_director_meta_box() {
    add_meta_box(
        'movie_director_meta_box', // 元框ID
        '导演信息', // 元框标题
        'render_movie_director_meta_box', // 回调函数,用于输出HTML
        'movie', // 目标文章类型
        'side', // 位置
        'default' // 优先级
    );
}
add_action( 'add_meta_boxes', 'add_movie_director_meta_box' );

// 2. 渲染元框内容
function render_movie_director_meta_box( $post ) {
    // 获取已保存的值
    $director = get_post_meta( $post->ID, '_movie_director', true );
    // 添加安全字段
    wp_nonce_field( 'movie_director_nonce_action', 'movie_director_nonce' );
    // 输出HTML
    echo '<label for="movie_director">导演姓名:</label>';
    echo '<input type="text" id="movie_director" name="movie_director" value="' . esc_attr( $director ) . '" style="width:100%;" />';
}

// 3. 保存元框数据
function save_movie_director_meta_data( $post_id ) {
    // 检查nonce、权限、自动保存等
    if ( ! isset( $_POST['movie_director_nonce'] ) || ! wp_verify_nonce( $_POST['movie_director_nonce'], 'movie_director_nonce_action' ) ) {
        return;
    }
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }
    // 保存数据
    if ( isset( $_POST['movie_director'] ) ) {
        update_post_meta( $post_id, '_movie_director', sanitize_text_field( $_POST['movie_director'] ) );
    }
}
add_action( 'save_post', 'save_movie_director_meta_data' );

Deze code maakt een meta-box die zich bevindt in de sidebar, waarin een veld staat voor het invoeren van de naam van de regisseur. Het is opgemerkt dat bij het opslaan van de gegevens de standaardbeveiligingscontroles van WordPress worden gebruikt. nonce Verificatie, toegangscontrole en voorkomen van dubbele verwerking bij automatische opslag. De opgeslagen gegevens worden vervolgens... update_post_meta De functies zijn opgeslagen in… wp_postmeta In de tabel.

Aanbevolen leesmateriaal WooCommerce-pluginhandleiding: Een volledig handboek van installatie en configuratie tot het beheren van je webwinkel

Een templatefile voor een aangepaste artikeltype maken

Gecreëerd. CPT Nadat de inhoud is ingevuld, moet er een template worden beschikbaar gesteld voor de weergave op de front-end. WordPress gebruikt een systeem met verschillende niveaus van templates, waardoor het automatisch de juiste templatefile vindt om de inhoud te weergeven.

Template voor één soort artikel

Als een gebruiker de inhoud van een enkele film bezoekt (bijvoorbeeld...) yoursite.com/movie/inceptionWanneer je een template gebruikt in WordPress, zal WordPress de templatebestanden opvolgens de volgende volgorde opzoeken:
1. single-movie.php (Uiterst specifiek)
2. single.php
3. singular.php
4. index.php

InterServer gedeelde hosting
Shared hosting $2.50 USD per maand, eerste maand $0.1 USD promo code tryinterserver, 461 cloud apps scripts, een klik te installeren.

Dus, de beste praktijk is om in je themapagina een map te maken met de naam single-movie.php Deze bestand. In deze bestand kun je de weergave van de film volledig personaliseren en de eerder gecreëerde custom fields gebruiken.

<?php get_header(); ?>
<article id="post-<?php the_ID(); ?>" no numeric noise key 1008>
    <header class="entry-header">
        <h1 class="entry-title"><p><strong>Hallo wereld!</strong></p></h1>
        <div class="entry-meta">
            <span>导演:</span>
        </div>
    </header>
    <div class="entry-content">
        
        <!-- 显示其他自定义字段,如主演、上映年份 -->
        <p><strong>Hoofdrolspelers:</strong><?php the_field( 'lead_actor' ); ?></p>
        <p><strong>Releasejaar:</strong><?php the_field( 'release_year' ); ?></p>
    </div>
</article>
<?php get_footer(); ?>

Als je het ACF-plugin gebruikt, kun je de mogelijkheden die het biedt inzetten. the_field() De functie biedt een gemakkelijke manier om de waarden van velden uit te geven. Als de velden zijn opgeslagen met aangepaste code, wordt deze code gebruikt. get_post_meta() Functie.

Archiveringspagina-template

Als een gebruiker de pagina met de filmlijst bezoekt (bijvoorbeeld...) yoursite.com/movie/Wanneer je dit doet, zal WordPress op zoek gaan naar:
1. archive-movie.php
2. archive.php
3. index.php

Creeren archive-movie.php In deze bestand kunt u WordPress-cycli gebruiken om alle films op te lijsten, en u kunt de zoekopdracht aanpassen of paginering toevoegen.

<?php get_header(); ?>
<h1>Filmcollectie</h1>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <article>
        <h2><a href="/nl/</?php the_permalink(); ?>"><p><strong>Hallo wereld!</strong></p></a></h2>
        <?php the_post_thumbnail( 'medium' ); ?>
        <p>导演:</p>
        <p><strong>Het volledige artikel is hier te lezen.</strong></p>
    </article>
<?php endwhile; the_posts_navigation(); else : ?>
    <p>Er zijn geen films beschikbaar.</p>

Samenvatting

Het beheersen van aangepaste artikeltypes in WordPress is een belangrijke stap om te komen van een simpel blog naar een moderne website met veel functies en een duidelijke structuur. register_post_type De registratie van de code door de functie begint, gevolgd door het toevoegen van speciale velden via het ACF-plugin of door het gebruiken van aangepaste meta-velden. Daarna worden, volgens de structuur van het template, unieke elementen gecreëerd. single-{cpt}.phparchive-{cpt}.php De templatebestanden vormen samen met het hele proces een geheel. CPT Ontwikkelen van een werkstroom (development workflow).

Door middel van praktische ervaring hebben we een contenttype voor “films” gecreëerd, met een eigen backend-menu, specifieke datavelden en een aangepaste frontend-weergave. Deze methodologie kan eenvoudig worden toegepast op andere contenttypen zoals “producten”, “portfolio’s” of “evenementen”. Het begrijpen en toepassen van deze kennis zal je als WordPress-developer aanzienlijk versterken, zodat je gebruikers een echt maatgesneden digitaal ervaring kunt bieden.

Veelgestelde vragen (FAQ)

Wat is het verschil tussen een aangepaste artikeltype en een aangepaste categorie?

Een aangepaste artikeltyp wordt gebruikt om een nieuwe soort inhoud te definiëren, zoals een “film” of een “product”. Aangepaste classificaties (zoals tags of uitbreidingen van categorieën) worden gebruikt om de inhoud te ordenen en te organiseren. Een aangepaste artikeltyp kan worden gekoppeld aan meerdere aangepaste classificaties. Bijvoorbeeld, de artikeltyp “Film” kan worden geassocieerd met verschillende classificaties zoals ‘Genre’, ‘Regisseur’ of ‘Jaar van uitkomst’. CPT Het is mogelijk om de twee zelfgemaakte categorieën “Type” (actie, komedie) en “Regio” (Chinees, Hollywood) met elkaar te verbinden.

Moet ik de CPT registreren in het functions.php-bestand van het thema of in een aparte plugin?

Dat hangt af van de complexiteit van het project en de vereisten met betrekking tot de portabiliteit. Voor projecten die sterk gebonden zijn aan een specifiek onderwerp en niet herbruikbaar zijn... CPTHet kan worden geplaatst in het onderwerp. functions.php Ja. Maar de beste praktijk is om een aparte functionaliteitsplug-in te maken waarin alle registratiecodes voor custom artikeltypes en categorieën worden opgeslagen. Op deze manier blijven deze artikeltypes en hun gegevens behouden wanneer je het thema vervangt, waardoor er een betere scheiding wordt gemaakt tussen de “functionaliteiten” en het “uiterlijk” van de website.

Hoe wijzig je de vaste linkstructuur van een bestaande aangepaste artikeltype?

Je kunt je registreren op... CPT Tijdens het proces... rewrite De parameterinstellingen kunnen ook worden gebruikt nadat je je hebt geregistreerd. register_post_type_args De filter moet worden gewijzigd. Na de wijziging moet u naar de WordPress-beheerpanelen gaan, naar “Instellingen” → “Permanente links”, en simpelweg op “Wijzigingen opslaan” klikken. Hierdoor worden de nieuwe regels voor het opnieuw opmaken van links geïmplementeerd. Anders werken de nieuwe linkstructuren mogelijk niet.

Waarom zie ik de door mij gecreëerde custom-artikeltypen niet in het front-end?

Dit gebeurt meestal door onjuiste instellingen van de registratieparameters. Controleer eerst de registratiefunctie. $args In het array 'public''publicly_queryable' Zijn alle parameters al ingesteld? trueTen tweede: zorg ervoor dat... 'show_ui''show_in_nav_menus' En ook voor... trueTen slotte moet je de templatebestanden controleren.single-{cpt}.phparchive-{cpt}.phpIs het correct gecreëerd en bevindt het zich in de rootdirectory van het thema van de activiteit?