I have made a field to add to the WooCommerce attributes. I have added a picture below for more clearance.
I am trying to display the field on the single product page. I have added the following code to the content-single-product.php template file.
$terms = get_the_terms( $product->id, 'pa_merk');
var_dump($terms);
$image = get_field('afbeelding_merk', $terms->taxonomy . '_' . $terms->slug);
// Display the image if it exists
if ($image) {
echo '<img src="' . $image . '" />';
} else {
echo "<p>Foto niet gevonden.</p>";
}
What am I doing wrong?
I tried multiple ways to retrieve the terms taxonomy and slug. But on multiple ways it says NULL. I have tried searching on the internet and asking chatgpt. I have also tried to change the part "$terms->slug" to "$terms->term_id", but that did not help either.
Updated: There are mistakes in your code. Try the following instead:
$product_id = $product->get_id(); // get the product ID
$taxonomy = 'pa_merk';
$terms = wp_get_post_terms( $product_id, $taxonomy ); // get the product terms
if ( ! is_wp_error($terms) && ! empty($terms) ) {
$term = reset($terms); // get the first WP_Term object
$image = get_field('afbeelding_merk', $taxonomy . '_' . $term->term_id);
// Display the image if it exists
if ( ! empty($image) ) {
echo '<img src="'.isset($image['url']) ? $image['url'] : $image.'" />';
} else {
echo "<p>Foto niet gevonden.</p>";
}
} else {
echo "<p>Foto niet gevonden.</p>";
}
Or the shorter WooCommerce version:
$taxonomy = 'pa_merk';
$term_name = $product->get_attribute($taxonomy); // get attribute term name
if ( ! empty($term_name) ) {
$term = get_term_by('name', $term_name, $taxonomy);
$image = get_field('afbeelding_merk', $taxonomy . '_' . $term->term_id);
// Display the image if it exists
if ( ! empty($image) ) {
$image = ;
echo '<img src="'.isset($image['url']) ? $image['url'] : $image.'" />';
} else {
echo "<p>Foto niet gevonden.</p>";
}
} else {
echo "<p>Foto niet gevonden.</p>";
}
Both should work