Select внутри цикла foreach

Есть цикл foreach, который отвечает за вывод <option> внутри <select>. Мне нужно разместить $term->term_id в атрибуты <select>-а, но сам тег <select> находятся вне цикла foreach ( $terms as $term ) и не работают. Если помещаю <select> внутрь foreach, то естественно ломается структура html. Есть ли варианты решения данной проблемы?

  <?php if( $terms = get_terms( array( 'taxonomy' => 'services' )) ) :
    echo '<select id="ingredients-' . $term->term_id . '" value="' . $term->term_id . '" name="ingredientfilter[]"><option>Select</option>';
    foreach ( $terms as $term ) :
        echo '<option id="ingredients-' . $term->term_id . '" value="' . $term->term_id . '" name="ingredientfilter[]">' . $term->name . '</option>'; 
    endforeach;
    echo '</select>';
   endif; ?>

Ответы (1 шт):

Автор решения: pgood

Можно буферизировать результат работы цикла в строку и потом вставить необходимое значение. Остается вопрос, в цикле вероятнее всего будет множество term_id, какой вам конкретно нужен? Еще в вашем коде ошибка, в теге select не должно быть атрибута value, выбранное значение задается атрибутом selected в теге option

<?php if( $terms = get_terms( array( 'taxonomy' => 'services' )) ) :
ob_start();
echo '<select id="#ID#" name="ingredientfilter[]"><option>Select</option>';
foreach ( $terms as $term ) :
    $termId = $term->term_id;
    echo '<option',
        ' id="ingredients-', $term->term_id, '"',
        ' value="', $term->term_id, '"',
        ' name="ingredientfilter[]">',
        $term->name,
        '</option>'; 
endforeach;
echo '</select>';
$strHtml = ob_get_clean();
echo str_replace('#ID#',$termId,$strHtml);
endif; ?>

И не используйте конкатенацию в echo она работает дольше, чем просто вывод через запятую

→ Ссылка