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 шт):
Можно буферизировать результат работы цикла в строку и потом вставить необходимое значение. Остается вопрос, в цикле вероятнее всего будет множество 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 она работает дольше, чем просто вывод через запятую