Переменная PHP перезаписывается в цикле foreach последним элементом

#php #wordpress #woocommerce #foreach

#php #wordpress #woocommerce #инструкция foreach

Вопрос:

Я просмотрел другие ответы «перезаписанная переменная PHP» и все еще не могу понять этого.

Я использую этот PHP, чтобы получить все слизни категории продуктов на одной странице продукта:

 global $post; $terms = get_the_terms( $post-gt;ID, 'product_cat' ); if(is_array($terms)){ foreach ($terms as $term) {  $product_cat_slug = $term-gt;slug;  $product_cat_slugs = ' product_cat-' . $product_cat_slug;  echo $product_cat_slugs; } }  

Линейные echo $product_cat_slugs; выходы product_cat-category1 product_cat-category2 .

Проблема в том, что когда я удаляю функцию из приведенной выше и использую ее в другом месте страницы , все, что я получаю для вывода, — это последняя категория, а не обе категории . echo $product_cat_slugs; lt;?php echo $product_cat_slugs; ?gt; product_cat-category2 product_cat-category1 product_cat-category2

Что случилось? $product_cat_slugs кажется, что он перезаписывается, когда находится за пределами foreach; как я могу это предотвратить?

Как мне вывести product_cat-category1 product_cat-category2 данные за пределы цикла?

Комментарии:

1. Да, вы переписываете его внутри цикла. Как ты думаешь, что еще $product_cat_slugs = ' product_cat-' . $product_cat_slug; можно было сделать? Решите, как вы хотите сохранить все результаты, например, поместить их все в массив или добавить в существующую строку.

2. Я хочу, чтобы все они выводились, как product_cat-category1 product_cat-category2 при использовании эха $product_cat_slugs; вне цикла.

Ответ №1:

Могу ли я предложить добавить строку, например

 global $post; $terms = get_the_terms( $post-gt;ID, 'product_cat' );  if( is_array( $terms ) ) {  $product_cat_slugs = ''; //Define the variable outside of the loop  foreach ( $terms as $term ) {  $product_cat_slugs .= ' product_cat-' . $term-gt;slug; //Append the slug onto the string that already exists  }  echo $product_cat_slugs; //Echo the string outside of the loop so it only occurs once. }  

Комментарии:

1. Спасибо! Это работает. Я вижу, как пуля прикреплена к струне. Во всех других, казалось бы, похожих ответах использовались разные методы.