web-dev-qa-db-fra.com

Instruction IF dans un do_shortcode

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.

1
Disgeae

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.

Réponse étendue:

À 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;
2
userabuser