[워드프레스] 젯팩을 이용해 “많이 본 문서” 목록을 가져오는 방법

워드프레스에서 젯팩은 다양한 편의 기능을 제공하고 있지만, 가끔은 내가 원하는 형식대로 만들고 싶을 때가 있잖아요? 저는 젯팩 위젯 중 조회수가 높은 문서 목록을 보여주는 “많이 본 문서”(Top posts, Most view 와 같은) 위젯을 직접 만들어 보고 싶었습니다.

조회 수 높은 포스트 목록 가져오기

가장 먼저 해야하는 것이 조회수가 높은 포스트의 목록을 가져오는 것이겠죠? 사실 이것만 되면 위젯으로 만드는 것은 어렵지 않으니 이 포스트에서는 목록을 가져오는 방법을 알아 봅시다.

일단 간단하게 전체 코드를 살펴 보면 아래와 같습니다.

<?
    function get_jp_topposts() {
        if ( function_exists( 'stats_get_csv' ) ) {
            $posts = stats_get_csv( 'postviews', array( 'days' => 5, 'limit' => 5 ) );
        }
        if ( $posts ) { return $posts; }
    }
?>

생각보다 간단하죠? 하나씩 뜯어 봅시다.

if ( function_exists( 'stats_get_csv' ) ) {
    ....
}

조건문의 function_exists( 'stats_get_csv' )stats_get_csv 라는 젯팩 내장 함수가 존재하는지 확인하고 진행하기 위함입니다. stats_get_csv 는 젯팩 내장 함수로 젯팩이 설치되어 있다면 당연히 활성화 되어 있으니 걱정하지 않아도 됩니다.

$posts = stats_get_csv( 'postviews', array( 'days' => 5, 'limit' => 5 ) );

이 부분은 stats_get_csv 함수를 이용해 조회수가 높은 포스트 목록을 가져와 $posts 변수에 담는 것입니다. 파라미터로 들어가는 days 는 집계 기간을 의미하고, limit 는 몇 개의 포스트를 가져 올 것인지를 결정합니다. 위 코드에서는 5일 동안 조회된 포스트 중 조회수가 높은 상위 5개 포스트를 가져오라는 뜻이겠네요.

반환 값

stats_get_csv 함수는 배열로 값을 반환하는데 그 형식은 아래와 같습니다.

array(
    'post_id', // ID
    'post_title', // 제목
    'post_permalink', // 고유 링크 주소
    'views', // 조회수
);

위 값들만 잘 이용하면 충분히 “많이 본 문서” 목록을 만들 수 있겠네요.

주의사항

  1. stats_get_csv 함수는 포스트 뿐만 아니라 페이지도 같이 집계합니다. 목록에서 페이지를 제외하고 싶으면 가져올 포스트 개수를 +10개 정도 넉넉하게 불러와서 foreach 문으로 포스트 타입을 확인해 포스트 타입이 post 인것만 다시 반환 하도록 해야 할 것 같습니다.
  2. 기한을 무제한으로 잡고 싶다면 파라미터 중 days-1 로 설정하면 됩니다.

이렇게 가져온 포스트 목록을 이용해 위젯으로 만들면 됩니다.

끝.