In dit artikel leer je hoe je een shortcode toevoegt aan WooCommerce waarmee je eenvoudig een meta-waarde van een product kunt weergeven. Deze shortcode werkt op alle pagina’s, inclusief categoriepagina’s en subpagina’s.
Functionaliteit van de shortcode
Met de shortcode [plus_product_show_meta] kun je een specifieke meta-key van een product ophalen en weergeven in een door jou gekozen HTML-element (bijvoorbeeld div, p of span). Daarnaast kun je een CSS-klasse toevoegen aan het wrapper-element voor extra styling.
Gebruik van de shortcode
[plus_product_show_meta meta_key="jouw_meta_key" wrapper="div" class="mijn-css-klasse"]
Beschikbare parameters
| Parameter | Beschrijving | Standaardwaarde |
|---|---|---|
meta_key
|
De meta-key die je wilt tonen | (verplicht) |
wrapper
|
HTML-element waarin de waarde wordt weergegeven (p, div, span)
|
span
|
class
|
CSS-klasse die wordt toegevoegd aan het wrapper-element | (leeg) |
PHP-code voor de shortcode
Om deze functionaliteit toe te voegen, plaats je de volgende code in het functions.php-bestand van je thema of in een maatwerk plugin:
function plus_product_show_meta_shortcode($atts) {
// Shortcode attributen met standaardwaarden
$atts = shortcode_atts([
'meta_key' => '',
'wrapper' => 'span', // Standaard wrapper-element
'class' => '' // Optionele CSS-klasse
], $atts, 'plus_product_show_meta');
// Stop als er geen meta_key is opgegeven
if (empty($atts['meta_key'])) {
return '';
}
global $post;
// Bepaal het product-ID
$product_id = false;
if (function_exists('is_product') && is_product()) {
// Op een productpagina: gebruik het huidige product
$product_id = get_the_ID();
} elseif (!empty($post->ID)) {
// Op andere pagina's: controleer of het een product is
if ('product' === get_post_type($post->ID)) {
$product_id = $post->ID;
}
}
// Stop als er geen product-ID is gevonden
if (!$product_id) {
return '';
}
// Haal de meta-waarde op
$meta_value = get_post_meta($product_id, $atts['meta_key'], true);
// Als er geen waarde is, toon niets
if (empty($meta_value)) {
return '';
}
// Manipuleren van de meta-waarde via een filter mogelijk maken.
$meta_value = apply_filters('plus_product_show_meta_value', $meta_value, $product_id );
// Beveilig het wrapper-element: alleen toegestane HTML-tags
$allowed_wrappers = ['p', 'div', 'span'];
$wrapper = in_array(strtolower($atts['wrapper']), $allowed_wrappers) ? $atts['wrapper'] : 'span';
// HTML-output genereren
return sprintf('<%1$s class="%2$s">%3$s%1$s>', esc_html($wrapper), esc_attr($atts['class']), esc_html($meta_value));
}
// Shortcode registreren
add_shortcode('plus_product_show_meta', 'plus_product_show_meta_shortcode');
Hoe werkt deze code?
-
De shortcode accepteert drie parameters:
meta_key,wrapperenclass. -
De code controleert of het een WooCommerce-productpagina is en haalt het juiste product-ID op.
-
De meta-waarde wordt opgehaald met
get_post_meta(). -
De waarde wordt alleen weergegeven als deze bestaat.
-
Het wrapper-element is beperkt tot
p,divofspanom XSS-risico’s te minimaliseren. -
esc_html()enesc_attr()worden gebruikt om invoer op te schonen.
Voorbeeldgebruik
Stel dat je een aangepaste meta-key custom_sku hebt opgeslagen bij een product. Je kunt deze tonen in een div met een CSS-klasse sku-display als volgt:
[plus_product_show_meta meta_key="custom_sku" wrapper="div" class="sku-display"]
Dit genereert bijvoorbeeld de volgende HTML-uitvoer:
12345-ABC
Je kunt het filter plus_product_show_meta_value gebruiken om de opgehaalde waarde te manipuleren voordat deze wordt weergegeven. Bijvoorbeeld, als je ‘N/A’ wilt tonen als er geen waarde is ingesteld:
/**
* Meta-value manipuleren voordat deze wordt weergegeven.
*
* @param mixed $value De waarde van de opgegeven meta-key
* @param int $product_id Het ID van het WooCommerce plus_product_show_meta_value
* @return mixed De weer te geven waarde
*/
add_filter('plus_product_show_meta_value', function($value, $product_id) {
return empty($value) ? 'N/A' : $value;
}, 10, 2);
Dit zorgt ervoor dat als de meta-waarde leeg is, er ‘N/A’ wordt weergegeven in plaats van niets.