워드프레스 기본 루프문 사용법 – The Loop

워드프레스에서는 포스트나 페이지의 단일글이나 대문페이지 또는 카테고리 페이지 등에 나타나는 글목록을 출력하기 위해서 Loop 문을 사용을 합니다. Loop란 반복을 뜻하는데 while 문이 그 역할을 합니다.

루프문 – The Loop

참고 : The Loop, The Loop In Action,

루프문은 일반적으로 글이 출력되는 모든 템플릿 파일내부에서 아래와 같이 사용이 됩니다.

<?php if(have_posts()):while(have_posts()):the_post(); ?>

<!-- 여기에 글 제목이나 글 내용 또는 글에 관련된 템플릿태그나 HTML 태그등이 사용됨 -->

<?php endwhile;endif; ?>

위의 Loop 문은 매우 압축된 표현형식이기 때문에 풀어보면 아래와 같이 됩니다.

<?php if (have_posts()) : ?>
	<?php while (have_posts()) : ?>
		<?php the_post(); ?>

                <!--  여기에 php 템플릿 태그와 HTML을 입력 -->

	<?php endwhile; ?>
<?php endif; ?>

방문자가 워드프레스로 운영되는 사이트의 특정 URL(permalinks)로 접속을 하게 되면 워드프레스는 그 주소에 해당되는 페이지가 어떤 것인지 조사를 하고 그 페이지에 필요한 글들과 그 글들에 관련된 정보들을 데이터베이스에서 찾아내서 어떤 변수에 저장을 하고 페이지에 출력할 템플릿 파일을 찾아서 위에서 부터 순서대로 실행을 합니다.

그 템플릿 파일에서 위와 같은 Loop문을 만나게 되면 그 루프문이 지시한대로 해당되는 글들을 출력하게 됩니다.

if 문의 괄호안의 조건식에 있는 have_posts는 출력할 글이 있으면 참의 값을 가지고 출력할 글이 없으면 거짓 값을 가지며, 만약 참일 경우 if 문의 조건식이 참이므로 endif 줄까지 실행을 하게 됩니다.

if 문이 실행되면 while의 괄호안에 있는 have_posts 값도 참이므로 while문도 endwhile 줄까지 실행이 됩니다. 여기에 while문 뒤에 있는 the_post는 데이터베이스에서 불러와서 변수에 저장하고 있던 글들 중에 첫번째 하나의 글에 대한 정보(글 내용, 제목, 작성자, 날짜, 분류된 카테고리 등등…)만 불러오고 다음 글로 카운트가 됩니다.

여기서 the_post자체가 하는 역할은 해당하는 하나의 글 정보를 불러오고 다음글로 카운트하는 역할만을 하기 때문에 이것만으로는 아무 글도 출력이 되지 않습니다. the_post 다음에 글과 글에 대한 정보를 출력하는 템플릿 태그들을 사용해야 해당 글이 출력이 됩니다.

while 문은 한번만 실행되는 if 문과 달리 괄호안에 있는 조건식이 참이면 계속 반복이 됩니다. 따라서 하나의 글이 다 출력이 되고 endwhile을 만나면 다시 앞에 있던 while문으로 돌아가서 앞에 했던 방식으로 글을 출력을 합니다. 처음과 다른 점은 the_post에 의해 다음글로 카운트 되었기 때문에 다음글이 없을 경우 have_posts가 거짓 값을 가져서 while문이 실행이 중단이 될 수 있고, 만약 다음글이 있으면 while문이 다시 실행 되면서 두 번째 글을 출력하게 됩니다.

위의 기본적인 루프문이 조금 복잡하게 되면 아래과 같이 if 와 while 사이, 또는 endwhile 과 endif 사이에 추가적인 php 코드나 HTML 태그가 들어가게 됩니다. 하지만 while 과 the_post 사이에는 들어갈 일이 없기 때문에 항상 붙어 있습니다.

<?php if ( have_posts() ): ?>
 <?php while ( have_posts() ) : the_post(); ?>

 <div class="post">

 <!-- Display the Title as a link to the Post's permalink. -->
 <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>

 <!-- Display the date (November 16th, 2009 format) and a link to other posts by this posts author. -->
 <small><?php the_time('F jS, Y') ?< >by <?php the_author_posts_link() ?></small>

  <div class="entry">
    <?php the_content(); ?>
  </div>

  <p class="postmetadata">Posted in <?php the_category(', '); ?></p>
 </div> <!-- closes the first div box -->

 <?php endwhile; else: ?>
 <p>Sorry, no posts matched your criteria.</p>
 <?php endif; ?>

주의할 점은,

  • if 와 while 뒤에 있는 것은 마침표 두개가 세로로 있는 모양으로 콜론이며, endif 와 endwhile 뒤에 있는 것은 마침표와 쉼표로 되어있는 세미콜론입니다. if( ):로 조건문을 시작했으면 반드시 endif;로 if문을 마쳐야 하며, while( ):로 조건문을 시작했으면 반드시 endwhile;로 while 문을 마쳐야 합니다.
  • 루프문안에서 사용되는 <?php the_permalink() ?>, <?php the_title(); ?>, <?php the_content(); ?> 와 같은 템플릿 태그들은 대부분 Loop 문 밖에서는 사용을 할 수 없습니다.

그 외 Loop 문 : get_posts, WP_Query, query_posts

카테고리의 다른 글 목록