RSS

워드프레스 루프 만들기[1]

25 1월

맛있는 음식이 매일매일 나오는 자판기가 있다. 처음엔 편하고 신경 쓸 게 없어서 좋지만, 사람의 호기심이란 게 그냥 가만있지 못한다. 이곳저곳을 살펴보다가 결국 뜯어보고 역으로 추적해본다. 그럼, 결론은 두 가지다.

  • 하나는 그 기계가 망가져서 회복불능상태가 된다. 선무당이 사람 잡는 꼴이다.
  • 다른 하나는 그 원천을 찾아내서 더 좋은 자판기를 만든다.

이를 워드프레스에 적용하면 첫 번째처럼 망가지는 일은 절대 없다. 오픈소스이기 때문에 늘 다시 받아 회복할 수 있다. 그러나 항상 두 번째처럼 성공하는 것은 아니다. 이리저리 찾다가 길을 잃고 헤매거나 포기하는 경우가 다반사다. 하지만 그것을 넘어서면 새로운 맛을 느끼고 더 좋은 자판기를 만들게 된다.

커스텀 쿼리가 그것이다. 워드프레스를 원하는 대로 다듬고 뽐낼 수 있는 내가 만든 자판기인 셈이다. 어떻게 구성되는지 알아보자.

처음으로 소개할 커스텀 쿼리는 WP_Query()의 인스턴스를 직접 조작하는 방법이다. 워드프레스 페이지가 호출되면,  $wp_query 전역변수에 포스트/페이지 관련된 메타 데이터가 저장된다. 기본 루프를 사용하면 별도의 조작 없이 템플릿 태그를 통해 $wp_query 정보를 이용할 수 있다. 그러나 원하는 데이터를 가져오는 데는 한계가 있다. 좀 더 상세하게 사용하기 위해서는 WP_Query()의 인스턴스를 직접 생성해 조작해야 한다. 커스텀 쿼리를 얼마나 잘 쓰느냐에 따라 워드프레스의 성능과 UI가 결정된다.

다음은 페이지에 5개의 포스트를 가져오는 커스텀 쿼리이다.

<?php

$myPosts = new WP_Query();

   $myPosts->query(‘posts_per_page=5’);

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

?>

<!– 필요한 작업 수행 –>

<?php endwhile; ?>

기본 쿼리와 비교해 보자. 기본 쿼리일 때는 전역 함수인 have_posts(), the_post()를 호출하여 WP_Query 클래스에 접근한다. 전역함수 내에서 $wp_query 인스턴스를 생성해 WP_Query 클래스 메소드를 호출하는 식이다. 다양한 활용을 위해선 query() 메소드의 파라메타 사용법에 익숙해져야 한다.

  • query()와 그 파라메터 설명 : http://codex.wordpress.org/Function_Reference/query_posts

$myPosts->query(‘posts_per_page=5’) 호출되면 WP_Query의 query메소드가 get_posts()를 호출하여 콘텐츠 정보를 메모리상에 올려놓는다.

function query( $query ) {
$this->init();
$this->query = $this->query_vars = wp_parse_args( $query );
return $this->get_posts();
}

WP_Query()는 기본 쿼리를 변경하지 않으므로 다중 루프에 맘껏 사용할 수 있다.

<?php // Loop 1
$first_query = new WP_Query('cat=-1'); // exclude category
while($first_query->have_posts()) : $first_query->the_post();
...
endwhile;
wp_reset_postdata();

// Loop 2
$second_query = new WP_Query('cat=-2'); // exclude category
while($second_query->have_posts()) : $second_query->the_post();
...
endwhile;
wp_reset_postdata();

// Loop 3
$third_query = new WP_Query('cat=-3'); // exclude category
while($third_query->have_posts()) : $third_query->the_post();
...
endwhile;
wp_reset_postdata();
?>
Advertisements
 
 

태그: , , ,

워드프레스 루프 만들기[1]”에 대한 1개의 응답

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

 
%d 블로거가 이것을 좋아합니다: