First of all, you can do foreach
inside foreach
. In fact, you can nest loops to much higher level based on your server configuration.
If you are going to use only one term in that field, make sure you select Field Type as Radio or Select and Return Value as Term Object. In that case, your code should look like this:
<?php
if( get_terms('shows') ) {
foreach( get_terms('shows') as $term ) {
$topic_term = get_field('podcast_topic', $term); // This should be a Term Object
// Optional: you can use $topic_term to get ACF data from that selected term
$topic_custom_thumb = get_field('podcast_topic_thumb', $topic_term);
echo '<div class="item ' . esc_attr( $topic_term->slug ) . ' col-4 col-md-3 col-lg-2">';
echo '<a href="' . get_term_link( $term ) . '">'; // You were making the term link in wrong way
echo wp_get_attachment_image( get_field('podcast_category_thumb', $term), 'thumbnail', false);
echo '</a></div>';
}
}
?>
If you are expecting multiple terms to be selected as podcast topic field, then Field Type should be Multi Select or Checkbox. In that case, you'll get array as value when you use get_field()
. Then your code should be something like this:
<?php
if( get_terms('shows') ) {
foreach( get_terms('shows') as $term ) {
$topic_terms = get_field('podcast_topic', $term); // This should be an array of Term Objects
$classes = []; // Let's store slugs of each term here
foreach( $topic_terms as $topic_term ) {
$classes[] = $topic_term->slug;
}
echo '<div class="item ' . esc_attr( implode( ' ', $classes ) ) . ' col-4 col-md-3 col-lg-2">';
echo '<a href="' . get_term_link( $term ) . '">'; // You were making the term link in wrong way
echo wp_get_attachment_image( get_field('podcast_category_thumb', $term), 'thumbnail', false);
echo '</a></div>';
}
}
?>
Remember, when you are getting Term Object from get_field()
, you can also use that object to get ACF data from that term. Example in first code block.