it-swarm.com.de

IF-Anweisung in einem do_shortcode

Ist es möglich, eine if-Anweisung in einem do_shortcode auszuführen?

<?php 
    echo do_shortcode("[table width='500'] " . 
        if ( have_posts() ) : 
            while ( have_posts() ) : 
                the_post(); 
                the_content(); 
            endwhile; 
        endif; . 
    "[/table]"); 
?>

Es gibt mir eine unerwartete T_IF.

EDIT: Und ohne die IF-Anweisung gibt es die Post außerhalb des Shortcodes.

1
Disgeae

Nein. echo do_shortcode() ist ein Funktionsaufruf. Sie können eine bedingte Anweisung nicht als Argument einer Funktion übergeben. Sie müssen lediglich das zurückgegebene Ergebnis Ihrer Abfrage als Argument der Funktion übergeben.

//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;

Hinweis:

Um zu verhindern, dass Ihr Inhalt sofort wiedergegeben wird, müssen Sie im obigen Beispiel get_the_content() aufrufen, die returns und nicht the_content(), die den Inhalt sofort wiedergibt. Aus diesem Grund wird Ihr Inhalt außerhalb des Shortcodes angezeigt, wenn er ohne die als Argument übergebene falsche bedingte Anweisung ausgeführt wird.

Erweiterte Antwort:

In Anbetracht Ihres zusätzlichen Kommentars und Ihrer erweiterten Frage würden Sie Ihre Tests außerhalb des Funktionsaufrufs für Ihren Shortcode auf die gleiche Weise wie wir durchführen, um zu überprüfen, ob ein "Ding" oder ein "Ding" eine bestimmte Bedingung erfüllt habe oben getan;

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