Foreach loop
Ik ben bezig met een webshop, dit doe ik met Wordpress en WooCommerce.
Bij onze korte beschrijving (post_excerpt) willen we een list hebben.
Al onze producten (ca 3500) staan in een csv bestand waarbij de list items ook vermeld staan.
In de csv staan de items gescheiden met een komma, het idee is om die string te pakken en bij elke komma een nieuwe li te maken.
Ik dacht dat een foreach loop daar goed bij zou passen maar helaas werkt de code die ik heb niet. Deze heb ik na wat zoekwerk gevonden. Hieronder de code zoals die nu is.
Is er iemand die weet wat ik fout doe of die een betere oplossing heeft voor onze wens?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
global $post;
$short_description = apply_filters( 'woocommerce_short_description', $post->post_excerpt );
if ( ! $short_description ) {
return;
}
?>
<?php $words = str_getcsv(',', $short_description); ?>
<div class="woocommerce-product-details__short-description">
<?php
if(!empty($words)){
echo '<ul>';
foreach($words as $word){
echo '<li>'.htmlspecialcharacters($word).'</li>';
}
echo '</ul>';
}
?>
</div>
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
global $post;
$short_description = apply_filters( 'woocommerce_short_description', $post->post_excerpt );
if ( ! $short_description ) {
return;
}
?>
<?php $words = str_getcsv(',', $short_description); ?>
<div class="woocommerce-product-details__short-description">
<?php
if(!empty($words)){
echo '<ul>';
foreach($words as $word){
echo '<li>'.htmlspecialcharacters($word).'</li>';
}
echo '</ul>';
}
?>
</div>
Gewijzigd op 04/05/2021 15:59:43 door - Ariën -
Je roept volgens mij nergens je csv-bestand aan?
Ik dacht dat die nu de short description leest, maar dat is dan mogelijk ook niet zo.
$words = str_getcsv(',', $short_description);
plaats eens
var_dump($words);
Zie je dan de inhoud van die csv?
Dan krijg ik dit te zien: array(1) { [0]=> string(1) "," }
var_dump($short_description);
string(61) "
elektrische gitaarversterker, 10W, 6,5? speaker
"
dit
$words = explode(',', $short_description);
elektrische gitaarversterker" [1]=> string(4) " 10W" [2]=> string(2) " 6" [3]=> string(21) "5? speaker
" }
Dit is wat er dan uit komt, wel met de var_dump. Zonder dat laat die nog niets zien.
Waarschijnlijk omdat de functie 'htmlspecialcharacters' niet bestaat. Probeers eens 'htmlspecialchars'.
-<p>gitaar ukelele met gitaarmechanieken
-blauw</p>
Dit is wat ik nu zie.
Wellicht voegt WordPress die toe.
Die staat niet in het csv bestand, WordPress of WooCommerce voegt deze inderdaad toe maar ik kan hem niet vinden in de code.
ZIe je wel de <ul> en </ul> staan?
Ja die zie ik staan, als ik het via element inspecteren bekijk zie ik keurig een div, ul li staan. Alleen in die li voegt die letterlijk de p tag toe.
En als je htmlspecialchars weghaalt?
Dit doet die wel op een gekke manier, bij het geval van 3 punten komt dit in de code:
Als er 2 li's zijn krijg ik dit:
Gewijzigd op 04/05/2021 15:59:09 door - Ariën -
echo '<li>'.trim($word).'</li>';
Dat heeft niets veranderd helaas.
Plaats nog eens een keer het hele stukje code.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
global $post;
$short_description = apply_filters( 'woocommerce_short_description', $post->post_excerpt );
if ( ! $short_description ) {
return;
}
?>
<?php
$words = explode(',', $short_description);
// var_dump($words);
?>
<div class="woocommerce-product-details__short-description">
<?php
if(!empty($words)){
echo '<ul>';
foreach($words as $word){
echo '<li>'.trim($word).'</li>';
}
echo '</ul>';
}
?>
</div>
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
global $post;
$short_description = apply_filters( 'woocommerce_short_description', $post->post_excerpt );
if ( ! $short_description ) {
return;
}
?>
<?php
$words = explode(',', $short_description);
// var_dump($words);
?>
<div class="woocommerce-product-details__short-description">
<?php
if(!empty($words)){
echo '<ul>';
foreach($words as $word){
echo '<li>'.trim($word).'</li>';
}
echo '</ul>';
}
?>
</div>
Moderatie-edit:
Ik heb [code]-tags geplaatst voor betere leesbaarheid van het script.
Gelieve deze te gebruiken in het vervolg. Zie ook dit overzicht met alle beschikbare UBB-codes.
Gelieve deze te gebruiken in het vervolg. Zie ook dit overzicht met alle beschikbare UBB-codes.
Toevoeging op 04/05/2021 16:10:08:
Ik heb nu op elk element een p toegevoegd, en met css de margin van de p op 0 gezet zodat het er wel uit komt te zien zoals we willen.
Misschien is er nog wel een betere manier maar voor nu lijkt me dit ook goed.
Bedankt voor de hulp!
Gewijzigd op 04/05/2021 15:58:37 door - Ariën -