웹사이트나 블로그를 운영하다 보면 포스트나 글 목록 속에 조회수나 방문자수 같은 수치를 표시할 일이 있습니다. 용도는 다양합니다. 단순히 몇 명의 사용자가 조회했는지를 보여주려는 목적도 있겠지만 이 데이터 값을 기반으로 조회수가 높은 글들을 “인기글”로 따로 모아 관리할 수도 있겠죠.
하지만 알다시피 워드프레스 코어에는 조회수(view count) 관리 기능이 들어있지 않습니다. 뿐만 아니라 아쉽게도 워드프레스 DB 내 wp_posts
테이블 필드를 아무리 뒤져 봐도 이 값을 저장하거나 할만한 공간은 없죠.
그러니 결국 이 기능은 직접 만들거나 플러그인을 통해 추가해 줘야 합니다. 어떤 방법들이 있을까요?
워드프레스에서 조회수를 처리하는데는 대체로 다음 3가지 방법이 있습니다:
- 포스트 메타(post meta) 필드를 이용하는 방법
- 별도 테이블로 관리하는 방법
- 외부 서비스와 연동하는 방법
이들 3가지 방법에 대해 간단히 알아 보겠습니다.
포스트 메타 필드 방식
워드프레스에서는 포스트의 확장성을 높이고 메타 데이터 값을 유연하게 관리하기 위해 포스트 메타 필드(post meta field)를 사용합니다. 흔히 “커스텀 필드(Custom Fields)”로 불리는 이 값은 워드프레스 DB의 wp_postmeta
테이블에 저장됩니다.
따라서 만약 조회수 값을 어딘가 저장하려 한다면 이 포스트 메타 필드를 이용하는 것이 ‘워드프레스 방식’입니다.
구현 방법은 간단합니다. 우선 테마 속 functions.php
파일에 다음과 같이 간단한 함수를 하나 추가합니다.
<?php
function customSetPostViews($postID) {
$countKey = 'views_count';
$count = get_post_meta($postID, $countKey, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $countKey);
add_post_meta($postID, $countKey, '1');
}else{
update_post_meta($postID, $countKey, ++$count);
}
}
?>
이 함수는 views_count
라는 포스트 메타 필드의 값을 읽고 업데이트하는 함수죠.
조회수를 올리려면, 사용자가 포스트를 조회했을 때 보이는 템플릿(예를 들면 single.php
) 속에서 이 함수를 호출해 주면 됩니다.
<?php
customSetPostViews(get_the_ID());
?>
이러면 한번 호출될 때마다 조회수가 1씩 증가하겠죠.
조회수를 화면에 표시할 때도 마찬가지로 이 포스트 메타값을 불러와 표시하면 되구요.
<?php
$post_views_count = get_post_meta( get_the_ID(), 'views_count', true );
if ( ! empty( $post_views_count ) ) {
echo $post_views_count;
}
?>
이 정도면 조회수 처리 루틴이 완성되었습니다. 필요하면 플러그인으로 만들어도 좋겠죠?
하지만 이 방법은 너무 ‘나이브’합니다. 고려할 항목들이 더 있기 때문이죠. 그 중 몇 가지만 들자면 이런 것들입니다.
- 이 방식은 페이지 캐시(page cache)가 적용된 경우에는 작동하지 않습니다. 그래서 Ajax 호출 등 다른 방법으로 포스트 메타 값을 업데이트해줘야 합니다.
- 웹사이트 성능 면에서 문제가 될 수 있습니다. 특히 콘텐츠가 많고 접속자 트래픽이 높은 사이트라면 페이지 액세스마다 매번 메타 필드 값을 업데이트하는 방식은 사이트의 성능을 떨어 뜨립니다.
- 같은 페이지를 리로드하면 매번 로드될 때마다 조회수가 증가합니다.
- 브라우저에서 prefetch를 통해 미리 다른 페이지를 로드하는 경우 등에는 조회수가 이중으로 처리될 수 있습니다.
이 모든 것들을 다 고려하면 아무래도 직접 만들기 보단, 잘 만들어진 플러그인을 활용하는 게 현명한 방법이겠죠?
워드프레스 플러그인 디렉터리를 검색하면 조회수 처리와 관련된 다양한 플러그인들을 찾을 수 있으며 이들 중 대부분이 이 포스트 메타 방식을 사용합니다. 그러니 그 중 하나를 골라 쓰면 되겠죠. 다음은 그 중 대표적인 플러그인들입니다.
※ Post Views Counter는 별도 테이블 방식을 사용합니다.
별도 테이블 방식
조회수를 포스트 메타 필드로 관리하는 방법이 간단하고 또 워드프레스에서 권장하는 방법이긴 하지만, 아무래도 대용량의 콘텐츠를 처리하는 사이트에서 사용하기엔 부담이 될 수 있습니다. 특히 이 메타 필드값을 이용해 조회를 하거나 목록을 표시하는 등 무언가 다양한 처리를 더 해줘야 하는 경우에는 더 그렇습니다.
그래서 워드프레스의 기본 테이블과는 별도로 조회수 관리 용도로만 별도 테이블을 만들어 관리하는 방법을 쓰기도 합니다.
그 중 대표적인 것이 워드프레스에서 “인기글” 관리용 위젯으로 가장 많이 사용되는 WordPress Popular Posts 플러그인입니다. 이 플러그인은 내부적으로 워드프레스 포스트 메타 필드를 사용하는 대신 wp_popularpostsdata
와 wp_popularpostssummary
라는 2개의 별도 테이블을 만들어 조회수를 관리합니다.
또한 이 플러그인은 조회수 처리에 따른 웹사이트 성능 문제를 해결하기 위해 Redis나 Memcached 같은 별도의 캐시 서버를 두는 것도 지원하죠.
좀더 전문적인 조회수 처리를 염두에 둔다면 좋은 솔루션입니다! (이 플러그인의 자세한 사용법은 나중에 기회가 되면 따로 포스팅하도록 하겠습니다)
외부 서비스 연동 방식
앞서 2가지 방법은 내 워드프레스 사이트 내에 조회수 데이터를 저장하고 관리하는 방식이었다면, 이제 마지막으로 소개할 이 방식은 외부 서비스를 이용하는 방식입니다.
예를 들어, 웹사이트 관리자라면 대부분 사용할 구글 분석기(Google Analytics)로부터 조회수 데이터를 가져와 표시하거나 워드프레스에서 많이 사용하는 젯팩(Jetpack)의 통계(Stats) 기능에서 데이터를 가져오는 방법입니다.
구글 분석기와 젯팩 통계 등에서는 사용자가 데이터를 추출할 수 있는 API를 제공하기 때문에 이 API를 통해 필요한 데이터를 불러와 사용할 수 있습니다. 예를 들어, 젯팩 통계를 불러와 조회수를 표시하려면 다음과 같이 젯팩의 stats_get_csv()
함수를 사용하면 됩니다. (참고: Rendering Jetpack Stats)
function get_page_views($post_id) {
if (function_exists('stats_get_csv')) {
$args = array('days'=>-1, 'limit'=>-1, 'post_id'=>$post_id);
$result = stats_get_csv('postviews', $args);
$views = $result[0]['views'];
} else {
$views = 0;
}
return number_format_i18n($views);
}
하지만 이 부분 역시 직접 만들기 보단 이미 나와 있는 플러그인을 사용하는 편이 더 편리하겠죠. 아래 플러그인들은 젯팩이나 구글 분석기로부터 데이터를 가져와 조회수를 처리하는 플러그인들입니다.
이 중 3번째로 소개한 Pageviews 플러그인은 Pageview.io라는 자체 서비스를 통해 데이터를 관리하면서 구글이나 젯팩의 데이터도 연동할 수 있는 옵션(유료)을 제공합니다.
지금까지 워드프레스에서 조회수를 다루는 여러 방법들과 또 그 각각의 방법들을 구현한 플러그인들을 소개했습니다. 물론 이들 중 내 입맛에 딱 맞는 게 있다면 그걸로 좋겠지만, 혹시라도 좀더 추가하거나 개선할 부분이 있다해도 여기 소개한 내용을 출발점으로 삼으면 좀 더 쉽게 나만의 솔루션을 만들 수 있지 않을까 싶습니다.
여기까지 입니다. 긴 글 읽어 주셔 감사합니다! 🙂
0 thoughts on “워드프레스에서 포스트 조회수 처리하기”