Est-il possible de faire une instruction if dans un do_shortcode?
<?php
echo do_shortcode("[table width='500'] " .
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
the_content();
endwhile;
endif; .
"[/table]");
?>
Cela me donne un T_IF inattendu.
EDIT: Et sans la déclaration IF, cela donne la poste en dehors du shortcode.
echo do_shortcode()
est un appel de fonction. Vous ne pouvez pas transmettre une instruction conditionnelle en tant qu'argument d'une fonction . Ce que vous devez faire est de transmettre le résultat renvoyé de votre requête en tant qu'argument de la fonction.
//assuming you have taken care of your query prior to this point
if ( have_posts() ) : while ( have_posts() ) : the_post();
$content = get_the_content(); //store content in variable
echo do_shortcode("[table width='500'] ". $content . "[/table]");
endwhile; endif;
Remarque:
Dans l'exemple ci-dessus, pour éviter que votre contenu soit répercuté immédiatement, vous devez appeler get_the_content()
qui returns
sa valeur, par opposition à the_content()
qui répercute immédiatement le contenu. C'est pourquoi votre contenu apparaît en dehors du shortcode lorsqu'il est exécuté sans l'instruction conditionnelle incorrecte transmise en tant qu'argument.
À la lumière de votre commentaire supplémentaire et de votre question élargie, pour vérifier l’existence d’une "chose" ou d'une "chose", vous devez effectuer vos tests en dehors de l'appel de fonction à votre code court, de la même manière que nous ont fait ci-dessus;
//assuming you have taken care of your query prior to this point
if ( have_posts() ) : while ( have_posts() ) : the_post();
$content = get_the_content(); //store content in variable
$thing = get_post_meta( get_the_ID(), 'thing', true );
if ($thing === "yes") {
//assuming you want to concatenate your content with an image
$content = $content . '<br> <img src="path_to_image" />';
}
echo do_shortcode("[table width='500'] ". $content . "[/table]");
endwhile; endif;