Hoi,

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?


<?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>
Staat die ook in het csv-bestand?

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.
Maar zet ie dat iedere keer eromheen?

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?
De p tag gaat dan weg uit de tekst, wel blijft die in de code zichtbaar.

Dit doet die wel op een gekke manier, bij het geval van 3 punten komt dit in de code:

<li><p>electric guitar</p></li>
<li>Pirate serie</li>
<li>black<p></p></li>


Als er 2 li's zijn krijg ik dit:

<li><p>electric guitar</p></li>
<li>black<p></p></li>
Misschien, een wilde gok, staan er spaties in de tekst. Probeer dit eens:

echo '<li>'.trim($word).'</li>';
Plaats nog eens een keer het hele stukje code.

<?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>




[size=xsmall]Toevoeging op 04/05/2021 16:10:08:[/size]

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!

Reageren