본문 바로가기
Etc/Wordpress

[Wordpress] 루프

by 생각하는달팽이 2015. 3. 5.

루프란?

워드프레스에서 블로그 포스트를 출력하는 기본 방법이다.



루프의 이해

루프를 잘 다루기 위해서는 먼저 루프 함수에 대해 잘 알아야 한다.

루프는 모든 워드프레스 테마의 핵심이므로 콘텐츠 출력을 사용자화 할 수 있다는 것은 워드프레스를 자유자재로 다룰 수 있게 된다는 것을 의미한다.

루프를 이해하기 위해 워드프레스가 어떻게 페이지 콘텐츠를 생성하는지 살펴보자.



1. 워드프레스를 설치할 때 만든 파일과 디렉터리가 URL과 맞는지 비교한다.

2. URL이 워드프레스에 전달되면 어떤 콘텐츠를 불러올지 결정한다.

3. URL을 받은 워드프레스는 WP_Query 객체 내의 parse_query() 를 통해 URL 을 일련의 쿼리 매개변수로 변환한다.

4. 이후 쿼리문을 워드프레스에 전달 어떤 콘텐츠를 출력할지 여부를 결정한다.

    함수는 쿼리 매개변수를 모두 SQL 문으로 변환한 후 MySQL DB Server 에 해당 쿼리를 직접 요청하여 원하는 콘텐츠를 추출한다.5. 해당 쿼리문을 워드프레스는 MySQL DB 쿼리로 변환하여 콘텐츠를 가져온다. 이는 WP_Query 객체 내의 get_posts() 메소드를 이용하며, 해당 함수는 쿼리 매개변수를 모두 SQL 문으로 변환한 후 MySQL DB Server 에 해당 쿼리를 직접 요청하여 원하는 콘텐츠를 추출한다.

    실행하는 도중에 처리된다. )6. 콘텐츠가 추출된 다음, 워드프레스는 is_home 과 is_page 처럼 is_로 시작하는 조건부 태그를 설정한다. ( 이 과정은 URL 파싱을 하여 기본 쿼리를 실행하는 도중에 처리된다. )

7. 워드프레스는 쿼리 타입과 반환된 포스트의 개수를 근거로 테마에서 템플릿을 결정하며, 쿼리의 결과는 루프에 전달된다.



루프는 웹사이트의 목적에 맞추어 다양하게 수정 가능하다.


콘텍스트에 루프 넣기

콘텐츠를 어떻게 표시할지를 결정하는 루프는 테마의 핵심 기능이라고 할 수 있다. 또한 루프는 화면에 출력되는 HTML 과 MySQL DB 의 데이터를 연결하는 기능 연결자이기도 하다. 워드프레스에서는 포스트나 페이지가 출력되는 곳이라면 어디든 원칙적으로 루프를 이용한다고 한다.

루프는 기본적으로 워드프레스 테마 템플릿 파일에서 사용된다.추가로 커스텀 루프는 플러그인과 위젯에서도 사용된다. 루프의 경우 개수제한이 없다.


루프의 흐름

루프의 첫 번째 문장은 if 문으로 시작하는데 특정 카테고리나 태그에 해당하는 포스트가 없을 수도 있으므로 이를 체크해야 하기 때문이다. 콘텐츠가 있다면, while 문을 사용해 루프를 초기화하고 전체를 반복하면서 출력할 포스트나 페이지를 골라낸다. 이후에 the_post() 함수가 호출되어 포스트 데이터를 생성하며, 다른 워드프레스 함수가 이용할 수 있도록 만들어준다.


<?php

if (have_posts()) :

while (have_posts()) :

the_post();

// loop content (template tags,html, etc)

endwhile;

endif;

?>


이런 기본적인 루프의 구성요소는 변하지 않는다. 다만 해당 구성요소와 함께있는 Template 파일을 살펴보면 HTML 들은 달라질 수 있다.


템플릿 태그

워드프레스 테마 템플릿에서 루프 콘텐츠를 출력하려고 사용하는 PHP 함수를 일컬어 템플릿 태그라고 한다. 이 태그를 이용하여 웹사이트 콘텐츠용 특정 데이터를 출력한다. 다시말해 우리는 이 태그를 이용해 웹사이트 어느 위치에 어떻게 콘텐츠를 출력할지를 결정한다.

예를들면 the_title() 이라는 탬플릿 태그는 포스트나 페이지의 제목을 루프에 출력한다.


> the_permalink() 포스트 URL을 반환한다.

> the_content() 포스트 콘텐츠 전체를 반환한다.

> the_time() 포스트가 발행된 날짜와 시간을 반환한다.

> the_author() 포스트 작성자를 반환한다.

> the_category() 포스트에 첨부된 카테고리를 반환한다.

> edit_post_link() 사용자가 로그인 상태이며 편집권한이 있다면 '편집' 링크를 출력한다.

> comments_popup_link() 포스트의 코멘트 양식 링크를 출력한다.


루프 사용자화

WP_Query 클래스를 사용하여 로우 레벨 접근 방법에 대해 살펴보고 이것을 어떻게, 어디에서 사용해야 하는지 또는 사용하지 말아야 하는지에 대해 알아보자.


WP_Query 객체 사용 방법

WP_Query 는 커스텀 루프를 쉽게 만들 수 있도록 하는 워드프레스의 클래스이다. 해당 클래스를 이용하여 우리는 원하는 데이터를 가져올 수 있다. 


<?php

$myPosts = new WP_Query();

$myPosts->query('posts_per_page=5');

while($myPosts->have_posts()) : $myPosts->the_post();

?>

<!-- something do -->

<?php endwhile; ?>



query 함수내 매개변수를 통해 우리는 페이지당 5개의 포스팅을 출력할 수 있다. 매개변수에 대한 자세한 설명은 코덱스 문서 http://codex.wordpress.org/Template_Tags/query_posts#Parameters 를 참조하면 된다.

그 밖에 query_posts() 혹은 get_posts() 를 사용하는 방법이 있다. 그러나 , 이를 사용할 경우 항상 쿼리 리셋을 잊지 말아야 한다.

query_posts()  를 사용한 후에는 무조건 wp_reset_query 함수를 호출하도록 하자.


다음 시간에는 데이터 관리에 대해 더 알아보겠다.


반응형

'Etc > Wordpress' 카테고리의 다른 글

[Wordpress] 데이터베이스  (2) 2015.03.07
[Wordpress] 코어 분석  (0) 2015.03.05
[Wordpress] wp-config 파일  (0) 2015.03.02