2016-12-11 5 views
1

phpコーディングの相対的な初心者として、私は現在、YouTubeのチュートリアルに頼っています。どこに 'endwhile;と 'endif;用語は置かれますか?

私は、ページのコンテンツの下にブログ投稿を挿入するためにphpを使用したいと思っています。 YouTubeチュートリアルの後、私は次のコードを作成しました:

<?php  
    $lastBlog = new WP_Query('type=post&posts_per_page=1&category_name=news'); 

     if ($lastBlog->have_posts()): 
      while($lastBlog->have_posts()): $lastBlog->the_post(); 
    ?> 
     <?php get_template_part('content/content',get_post_format()); 
     ?> 

    <?php 
      endwhile; 
     endif;     
    wp_reset_postdata(); 
    ?> 

上記のコードは正しいですか?私の論理的思考が私に「endwhile;」と言っているので、私は100%ではない。と 'endif;声明は次の間に置く必要があります:

 while($lastBlog->have_posts()): $lastBlog->the_post(); 
    ?> 

誰でもこの問題を明らかにすることができれば非常に役に立ちます。

多くのありがとうございます。

PHPでクレイグ

+0

こんにちはクレイグ、 'endwhile;と 'endif;ステートメントはどこにあるかはまったく問題ありません。 2番目のコードブロックの居場所は、論理的な考え方で、それらを置くことを指示していますか?たぶん、私はあなたがそれが '見えるべきだと思う方法を知っているかどうかを明確にするのを助けることができます。 –

+0

こんにちは@ベンプランマー、応答ありがとう。私は 'if'と 'while'ステートメントが最初のタグの間にあると考えていました。と 'endif;ステートメント。もっと正確に言えば、 'while($ lastBlog-> have_posts()):$ lastBlog-> the_post(); ?> '閉会の前に?'>私はこれを正しく説明したいと思う:-) – Craig

+0

心配はありません。うまくいけばあなたのために物事を明確にする私の答えを参照してください:) –

答えて

1

例えば文の終わりを持っていることのない規則または慣行が存在しません'endwhile;'、 'endif;'同じPHPタグのセット内にあります。

PHPが関連するステートメント内にある場合(if、whileなど)、そのすべてが、例えば 'endwhile'ではなく、1組のPHPタグに配置される可能性があります。と 'endif;ステートメントは別のセットにあります。それはまた、すべてのようにのようなPHPタグの1つのセットで記述することができるようにこの場合は、あなたのコードは、明示的にHTMLまたは任意のマークアップが含まれていません:

<?php  
    $lastBlog = new WP_Query('type=post&posts_per_page=1&category_name=news'); 

    if ($lastBlog->have_posts()) { 
     while($lastBlog->have_posts()) { 

      $lastBlog->the_post(); 

      // Added 'echo' to output the content 
      echo get_template_part('content/content',get_post_format()); 

     } // End of 'while' statement 
    } // End of 'if' statement 

    wp_reset_postdata(); 
?> 

あなたのコードの現在の状態がそのように書くことができますが、それは完全に罰金ですあなたが持っているそれは道であり、現在の構造では、例えばする必要がある場合は、明示的にHTMLを追加することができます:

<?php  
    $lastBlog = new WP_Query('type=post&posts_per_page=1&category_name=news'); 

    if ($lastBlog->have_posts()): 
     while($lastBlog->have_posts()): $lastBlog->the_post(); 
?> 

<?php get_template_part('content/content',get_post_format()); ?> 

<p>HTML EXAMPLE - THIS WOULD APPEAR FOR EACH POST IN THE WHILE LOOP</p> 

<?php 
     endwhile; 
    endif;     
    wp_reset_postdata(); 
?> 

上記の例では、異なる組の間で明示的にHTMLを持つだけのデモですコード内のPHPコードブロック。私はあなたのコード内の 'get_template_part'呼び出しが実際にHTML出力を担当していることを知っています。

あなたのコードとステートメントは、まったく同じです。もしあなたが 'endwhile;と 'endif;あなたの論理的な考え方があなたに語ったところで、 'get_template_part'コールが 'if'と 'while'ステートメントの外にあることを意味します。これはあなたのページが現在働いている方法を変えないかもしれませんが(あなたは1つの投稿を出力しているので)、get_template_partメソッドが一度呼び出されるだけで、コードが機能しなくなります。各投稿ごとに) 'while'ループの外側にあるためです。あなたのコードをそのまま構造化したままにしておけば、WP_Queryを変更したことがある場合は、1つの投稿を出力するか、多くの場合出力する必要があります。

希望すると便利です。

+0

包括的な答えベンのおかげで。とても有難い。私の代わりにまだ多くのことを学んでいますが、あなたの返信は文がどのように機能するかを明確にするのに役立ちました。 :-) – Craig

+0

問題はありません - 私は助けることができてうれしい!学習と幸運:) –

関連する問題