Încerc să creez un array cu o buclă foreach, dar array-ul salvează doar ultimul element
Codul meu este:
<?php
//Obține postările după argumentele salvate în array-ul $args
$vendor_postlist = get_posts( $args );
// Parcurge lista de postări obținute și pentru fiecare postare extrage categoria produsului și o salvează într-un array
foreach ( $vendor_postlist as $post ){
$terms = get_the_terms( $post->ID, 'product_cat' );
$categories = array();
foreach ( $terms as $term ) {
$categories[] = $term->name;
echo $term->name;
}
unset( $term );
}
unset( $post );
print_r($categories);
?>
Câteva informații de context: Încerc să creez un shortcode care va afișa o listă de produse (WooCommerce) într-un tabel. Astfel, $args stochează argumentele precum autorul postării, tipul postării etc, unele dintre ele fiind extrase din atributele shortcode-ului.
Problema pare să fie în a doua buclă foreach:
foreach ( $terms as $term ) {
$categories[] = $term->name;
echo $term->name;
}
Echo-ul este doar pentru a verifica dacă afișează corect termenii pe care ar trebui să îi afișeze în acest punct. Și într-adevăr, lista de termeni afișată este corectă.
Exemplu: Fructe, Legume, Flori
Dar când folosesc print_r($categories) - care ar fi trebuit să afișeze un array cu cele trei categorii - doar ultima categorie pare să fi fost stocată în array: Array ( [0] => Flori)
Am nevoie să generez un tabel pentru fiecare categorie, de aceea încerc să creez array-ul de categorii, dar m-am blocat în acest punct, neavând idee ce ar putea fi greșit.
Dacă cineva știe, vă rog să-mi spuneți. Aș fi foarte fericit să rezolv această problemă. Mulțumesc!

Încearcă acest cod. Este necesar să anulezi acele array-uri în foreach? Anularea în interiorul buclei va elimina valorile anterioare ale array-ului.
<?php
// Obține postările folosind argumentele salvate în array-ul $args
$vendor_postlist = get_posts( $args );
$categories = array();
// Parcurge lista de postări obtinută.....
foreach ( $vendor_postlist as $post ){
$terms = get_the_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) {
$categories[] = $term->name;
echo $term->name;
}
}
print_r($categories);
?>

Mulțumesc, Abdul! Ai dreptate! Mutând linia: $categories = array(); înainte de prima buclă rezolvă problema! Acum array-ul stochează toate cele 3 elemente. Arată cât de inexperimentat sunt în codare.
