Help me bij het implementeren van een aangepaste berichttype voor mijn WordPress-website
description
Door een aangepaste berichttype te maken, kan ik mijn inhoud beter organiseren, de gebruikerservaring verbeteren en de functionaliteit van mijn site versterken om aan specifieke behoeften te voldoen.
prompt
try_prompt
Ik wil een aangepaste berichttype maken op mijn WordPress-website om specifieke inhoud efficiënter te beheren. Beschrijf het type inhoud dat ik wil beheren: {{inhoudstype}}. Mijn huidig ... more
generate_helper
...
ai_answers
provider: openai
model: gpt-4.1-nano
Om een aangepast berichttype (custom post type) genaamd "Portfolio" te maken op je WordPress-site met versie 5.8, kun je gebruik maken van de functie register_post_type() in je functions.php-bestand van je thema of via een aangepaste plugin. Hier zijn aanbevelingen en een voorbeeldcode voor een goede implementatie:
**1. Doel van het "Portfolio" berichttype:**
Het "Portfolio" berichttype is bedoeld om specifieke projecten, werken of voorbeelden te tonen die je wilt presenteren, gescheiden van reguliere blogposts.
**2. Best practices:**
- Voeg het codeblok toe in je functions.php of in een custom plugin.
- Gebruik _labels_ voor betere gebruikersinterface.
- Stel _supports_ in op wat je nodig hebt (bijvoorbeeld 'title', 'editor', 'thumbnail', etc.).
- Zorg voor goede _rewrite_ regels voor mooie permalinks.
- Voeg een menu-icoon toe voor gebruiksgemak.
**3. Voorbeeldcode:**
```php
// Voeg deze code toe aan je functions.php of een custom plugin
function register_portfolio_post_type() {
$labels = array(
'name' => 'Portfolio',
'singular_name' => 'Portfolio-item',
'add_new' => 'Nieuw Portfolio-item',
'add_new_item' => 'Nieuw Portfolio-item toevoegen',
'edit_item' => 'Portfolio-item bewerken',
'new_item' => 'Nieuw Portfolio-item',
'view_item' => 'Bekijk Portfolio-item',
'search_items' => 'Zoek Portfolio-items',
'not_found' => 'Geen Portfolio-items gevonden',
'not_found_in_trash' => 'Geen Portfolio-items in de prullenbak gevonden',
'all_items' => 'Alle Portfolio-items',
'menu_name' => 'Portfolio',
'name_admin_bar' => 'Portfolio',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'portfolio'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'show_in_rest' => true, // Voor Gutenberg-blokken
'menu_icon' => 'dashicons-portfolio', // Icoon in admin menu
);
register_post_type('portfolio', $args);
}
add_action('init', 'register_portfolio_post_type');
```
**4. Extra tips:**
- **Custom velden:** Gebruik eventueel Advanced Custom Fields (ACF) plugin voor meer gestructureerde data.
- **Categorieën en tags:** Voeg taxonomieën toe als je categorisering wenst.
- **Weergave:** Maak een eigen sjabloon (single-portfolio.php en archive-portfolio.php) voor het tonen van je portfolio-items.
- **Permalinks:** Na registratie is het verstandig de permalinks te flushen via Instellingen > Permalinks.
**5. Samenvatting:**
Met bovenstaande code creëer je een overzichtelijk en goed geïntegreerd "Portfolio" berichttype dat je inhoud beter structureert en beheer eenvoudiger maakt.
Wil je nog verdere hulp bij het opzetten van templates of het toevoegen van taxonomieën, laat het gerust weten!
provider: deepseek
model: deepseek-chat
Hier is een complete handleiding voor het implementeren van een aangepast berichttype "Portfolio" in WordPress 5.8:
## Methode 1: Via functions.php (Aanbevolen voor beginners)
Voeg deze code toe aan je theme's `functions.php` bestand:
```php
function portfolio_post_type() {
$labels = array(
'name' => _x('Portfolio', 'Post Type Algemeen', 'text_domain'),
'singular_name' => _x('Portfolio Item', 'Post Type Enkelvoud', 'text_domain'),
'menu_name' => __('Portfolio', 'text_domain'),
'name_admin_bar' => __('Portfolio Item', 'text_domain'),
'archives' => __('Portfolio Archief', 'text_domain'),
'attributes' => __('Portfolio Attributen', 'text_domain'),
'parent_item_colon' => __('Hoofd Portfolio Item:', 'text_domain'),
'all_items' => __('Alle Portfolio Items', 'text_domain'),
'add_new_item' => __('Nieuw Portfolio Item Toevoegen', 'text_domain'),
'add_new' => __('Nieuw Item', 'text_domain'),
'new_item' => __('Nieuw Portfolio Item', 'text_domain'),
'edit_item' => __('Bewerk Portfolio Item', 'text_domain'),
'update_item' => __('Update Portfolio Item', 'text_domain'),
'view_item' => __('Bekijk Portfolio Item', 'text_domain'),
'view_items' => __('Bekijk Portfolio Items', 'text_domain'),
'search_items' => __('Zoek Portfolio Items', 'text_domain'),
'not_found' => __('Niet gevonden', 'text_domain'),
'not_found_in_trash' => __('Niet gevonden in prullenbak', 'text_domain'),
'featured_image' => __('Uitgelichte Afbeelding', 'text_domain'),
'set_featured_image' => __('Stel uitgelichte afbeelding in', 'text_domain'),
'remove_featured_image' => __('Verwijder uitgelichte afbeelding', 'text_domain'),
'use_featured_image' => __('Gebruik als uitgelichte afbeelding', 'text_domain'),
'insert_into_item' => __('Invoegen in portfolio item', 'text_domain'),
'uploaded_to_this_item' => __('Geüpload naar dit portfolio item', 'text_domain'),
'items_list' => __('Portfolio items lijst', 'text_domain'),
'items_list_navigation' => __('Portfolio items navigatie', 'text_domain'),
'filter_items_list' => __('Filter portfolio items', 'text_domain'),
);
$args = array(
'label' => __('Portfolio', 'text_domain'),
'description' => __('Portfolio items voor je website', 'text_domain'),
'labels' => $labels,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'taxonomies' => array('category', 'post_tag'),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-portfolio',
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
'show_in_rest' => true,
'rewrite' => array('slug' => 'portfolio'),
);
register_post_type('portfolio', $args);
}
add_action('init', 'portfolio_post_type', 0);
```
## Methode 2: Via een Custom Plugin (Aanbevolen voor productie)
Maak een nieuwe plugin-bestand `portfolio-post-type.php`:
```php
<?php
/**
* Plugin Name: Portfolio Post Type
* Description: Voegt een aangepast portfolio berichttype toe
* Version: 1.0
* Author: Je Naam
*/
// Voorkom directe toegang
if (!defined('ABSPATH')) {
exit;
}
class PortfolioPostType {
public function __construct() {
add_action('init', array($this, 'register_portfolio_post_type'));
add_action('init', array($this, 'register_portfolio_taxonomy'));
add_filter('template_include', array($this, 'portfolio_template'));
}
public function register_portfolio_post_type() {
$labels = array(
'name' => 'Portfolio',
'singular_name' => 'Portfolio Item',
'menu_name' => 'Portfolio',
'add_new' => 'Nieuw Item',
'add_new_item' => 'Nieuw Portfolio Item',
'edit_item' => 'Bewerk Portfolio Item',
'new_item' => 'Nieuw Portfolio Item',
'view_item' => 'Bekijk Portfolio Item',
'search_items' => 'Zoek Portfolio Items',
'not_found' => 'Geen portfolio items gevonden',
'not_found_in_trash' => 'Geen portfolio items in prullenbak'
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-portfolio',
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'show_in_rest' => true,
'rewrite' => array('slug' => 'portfolio'),
);
register_post_type('portfolio', $args);
}
public function register_portfolio_taxonomy() {
register_taxonomy(
'portfolio_categorie',
'portfolio',
array(
'label' => 'Portfolio Categorieën',
'rewrite' => array('slug' => 'portfolio-categorie'),
'hierarchical' => true,
'show_in_rest' => true,
)
);
}
public function portfolio_template($template) {
if (is_post_type_archive('portfolio')) {
$theme_files = array('archive-portfolio.php', 'portfolio/archive-portfolio.php');
$exists_in_theme = locate_template($theme_files, false);
if ($exists_in_theme != '') {
return $exists_in_theme;
} else {
return plugin_dir_path(__FILE__) . 'templates/archive-portfolio.php';
}
}
return $template;
}
}
new PortfolioPostType();
```
## Aangepaste Taxonomie voor Portfolio Categorieën
```php
function portfolio_taxonomies() {
register_taxonomy(
'portfolio_categorie',
'portfolio',
array(
'labels' => array(
'name' => 'Portfolio Categorieën',
'singular_name' => 'Portfolio Categorie',
'search_items' => 'Zoek Portfolio Categorieën',
'all_items' => 'Alle Portfolio Categorieën',
'parent_item' => 'Hoofd Categorie',
'parent_item_colon' => 'Hoofd Categorie:',
'edit_item' => 'Bewerk Categorie',
'update_item' => 'Update Categorie',
'add_new_item' => 'Nieuwe Portfolio Categorie',
'new_item_name' => 'Nieuwe Categorie Naam',
'menu_name' => 'Categorieën',
),
'hierarchical' => true,
'sort' => true,
'args' => array('orderby' => 'term_order'),
'rewrite' => array('slug' => 'portfolio-categorie'),
'show_admin_column' => true,
'show_in_rest' => true
)
);
}
add_action('init', 'portfolio_taxonomies');
```
## Best Practices en Aanbevelingen
### 1. **Permalinks Resetten**
Na het toevoegen van het custom post type, ga naar:
- Instellingen → Permalinks → Klik "Wijzigingen opslaan"
### 2. **Template Bestanden**
Maak deze template bestanden in je theme:
- `single-portfolio.php` - Voor individuele portfolio items
- `archive-portfolio.php` - Voor portfolio archief
- `taxonomy-portfolio_categorie.php` - Voor categorie pagina's
### 3. **Basis Template Voorbeeld**
`archive-portfolio.php`:
```php
<?php get_header(); ?>
<div class="portfolio-archive">
<h1><?php post_type_archive_title(); ?></h1>
<?php if (have_posts()) : ?>
<div class="portfolio-grid">
<?php while (have_posts()) : the_post(); ?>
<article class="portfolio-item">
<a href="<?php the_permalink(); ?>">
<?php if (has_post_thumbnail()) : ?>
<?php the_post_thumbnail('medium'); ?>
<?php endif; ?>
<h2><?php the_title(); ?></h2>
</a>
<div class="portfolio-excerpt">
<?php the_excerpt(); ?>
</div>
</article>
<?php endwhile; ?>
</div>
<?php the_posts_pagination(); ?>
<?php else : ?>
<p>Geen portfolio items gevonden.</p>
<?php endif; ?>
</div>
<?php get_footer(); ?>
```
### 4. **Beveiliging**
- Gebruik altijd `esc_html()` en `esc_attr()` voor output
- Valideer en sanitize gebruikersinvoer
- Gebruik nonces voor form submissions
### 5. **Prestaties**
- Gebruik transients voor vaak opgevraagde portfolio queries
- Implementeer lazy loading voor afbeeldingen
- Gebruik paginering voor grote portfolio collecties
### 6. **Advanced Custom Fields (Optioneel)**
Voor extra velden zoals:
- Klantnaam
- Projectdatum
- Project URL
- Technologieën gebruikt
Dit geeft je een solide basis voor een professioneel portfolio systeem in WordPress!

