I've looked at other "PHP variable overwritten" answers and still can't figure this out.
I'm using this PHP to get all the product category slugs on a single product page:
global $post;
$terms = get_the_terms( $post->ID, 'product_cat' );
if(is_array($terms)){
foreach ($terms as $term) {
$product_cat_slug = $term->slug;
$product_cat_slugs = ' product_cat-' . $product_cat_slug;
echo $product_cat_slugs;
}
}
The line echo $product_cat_slugs;
outputs product_cat-category1 product_cat-category2
.
The problem is that when I delete the echo $product_cat_slugs;
from the function above and use <?php echo $product_cat_slugs; ?>
elsewhere on the page, all I get for output is the last category slug product_cat-category2
, and not both categories product_cat-category1 product_cat-category2
.
What's wrong? $product_cat_slugs
seems to be overwritten when outside the foreach; how can I prevent that?
How do I output product_cat-category1 product_cat-category2
outside of the loop?
CodePudding user response:
Might I suggest to append the string, such as
global $post;
$terms = get_the_terms( $post->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->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.
}