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 if( is_array($topic_terms) && !empty($topic_terms) ) { 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.