web-dev-qa-db-ja.com

Do_shortcodeのIFステートメント

Do_shortcodeでif文を実行することは可能ですか?

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

それは私に予期しないT_IFを与えます。

編集:そしてIFステートメントなしでそれはショートコードの外のポストを与えます。

1
Disgeae

いいえ。echo do_shortcode()は関数呼び出しです。関数の 引数として条件文を渡すことはできません 。あなたがする必要があるのは、関数の引数としてあなたの問い合わせの返された結果を渡すことです。

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

注意:

上の例では、コンテンツがすぐにエコーされないようにするためには、コンテンツをすぐにエコーするget_the_content()ではなく、その値をthe_content() which returnsにする必要があります。そのため、引数として誤った条件文を渡さずに実行した場合、コンテンツがショートコードの外側に表示されます。

拡張回答:

あなたの追加のコメントと拡張された質問に照らして、ある "もの"の存在をチェックするため、あるいはある "もの"が特定の条件を満たすことをチェックするため上でやった。

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