
Seraphinite Accelerator는 WordPress 웹사이트의 속도를 최적화하고 캐시를 관리할 수 있는 강력한 도구입니다. 이 글에서는 API 를 사용하여 생성되어 있는 캐시를 삭제하는 방법을 다루고자 합니다.
COOSS.NET 에서는 한국어로 글을 작성하면, 테마의 functions.php 에 번역을 수행하는 사용자 정의 함수를 추가하여 여러 언어로 자동 번역되도록 하고 있으며, 번역이 된 페이지에는 다른 언어를 선택할 수 있는 링크가 생성 됩니다. 그런데, 번역된 페이지가 없는 상태에서 최초 한국어로 작성된 글을 Accelerator 가 캐싱을 하고 나면, 번역이 된 페이지가 있어도 사용자에게 보여지는 캐시 페이지에서는 번역 페이지로 가는 링크가 표시되지 않게 되는 문제가 있었습니다.
물론, Accelerator 에서 캐싱을 주기적으로 갱신하도록 설정할 수 있지만, 번역이 된 원문 페이지의 캐시(Cache)만 갱신하면 되는데 이것을 위해 Accelerator 플로그인 설정을 매번 바꾸는 것은 번거롭고, 그렇다고 전체 사이트 캐싱을 다시 하게 하는 것은 효율적이지 않겠기에, 번역이 완료되면 해당 원문 페이지 캐싱만 다시 생성하도록 강제하는 API 를 찾아보게 되었습니다.
Seraphinite Accelerator API 개요
Seraphinite Accelerator는 다음과 같은 API 기능을 제공합니다.
OperateCache – 캐시 관리
특정 페이지의 캐시를 삭제하거나 재생성할 수 있습니다.
GetCacheStatus – 캐시 상태 확인
특정 URL이 캐싱되어 있는지 확인할 수 있습니다.
캐시 관리 API (OperateCache)
OperateCache 함수는 특정 URL의 캐시를 삭제하거나, 필요에 따라 재생성할 수 있습니다.
사용법
\seraph_accel\API::OperateCache( $op, $obj );
매개변수 설명
- $op (캐시 관리 옵션)
- CACHE_OP_REVALIDATE → 캐시 재검증 (Revalidate)
- CACHE_OP_CHECK_REVALIDATE → 필요한 경우 캐시 재검증
- CACHE_OP_CLEAR → 오래된 캐시 정리
- CACHE_OP_DEL → 캐시 삭제
- CACHE_OP_SRVDEL → 서버 캐시 삭제 (가능한 경우)
- $obj (삭제할 URL 또는 상대 경로)
- 특정 페이지의 캐시만 삭제하려면 해당 URL을 입력
- 사이트 전체 캐시를 삭제하려면 null을 입력
캐시 삭제 예제
특정 페이지 캐시 삭제
\seraph_accel\API::OperateCache( \seraph_accel\API::CACHE_OP_DEL, '/mypage/' );
전체 사이트 캐시 삭제
\seraph_accel\API::OperateCache( \seraph_accel\API::CACHE_OP_DEL, null );
여러 URL의 캐시 삭제
$urls = ['/category/wordpress/', '/tag/performance/', '/custom-post-type/my-post/'];
foreach ($urls as $url) {
\seraph_accel\API::OperateCache( \seraph_accel\API::CACHE_OP_DEL, $url );
}
캐시 상태 확인 API (GetCacheStatus)
특정 URL이 캐싱되어 있는지, 캐시 최적화가 적용되었는지 확인할 수 있습니다.
사용법
$cache_status = \seraph_accel\API::GetCacheStatus($obj, $headers = []);
매개변수 설명
- $obj → 확인할 URL
- $headers (선택 사항) → 특정 HTTP 헤더를 전달하여 캐시 확인 가능
- 예: ‘User-Agent’ => ‘AppleWebKit/9999999.99 Mobile’
반환값
속성 | 값 | 의미 |
---|---|---|
cache | true | 해당 페이지가 캐싱됨 |
cache | false | 해당 페이지가 캐싱되지 않음 |
optimization | true | 최적화 완료된 캐시 |
optimization | false | 최적화되지 않은 캐시 |
optimization | null | 캐시가 없음 |
status | 'done' | 캐싱 완료 |
status | 'revalidating' | 캐시 재생성 중 |
status | 'pending' | 캐시 대기 중 |
status | 'none' | 처리되지 않음 |
캐시 상태 확인 예제
$cache_status = \seraph_accel\API::GetCacheStatus('https://example.com/mypage/');
if ($cache_status['cache']) {
echo '페이지가 캐싱되었습니다.';
} else {
echo '페이지가 캐싱되지 않았습니다.';
}
특정 URL 목록의 캐시 삭제 함수 만들기
여러 URL의 캐시를 한 번에 삭제하는 함수를 작성할 수 있습니다.
캐시 삭제 함수
function sa_clear_cache_for_urls($urls = []) {
if (!class_exists('\seraph_accel\API')) {
error_log('Seraphinite Accelerator API가 로드되지 않았습니다.');
return false;
}
if (!is_array($urls) || empty($urls)) {
error_log('유효한 URL 목록이 제공되지 않았습니다.');
return false;
}
foreach ($urls as $url) {
if (!empty($url)) {
\seraph_accel\API::OperateCache(\seraph_accel\API::CACHE_OP_DEL, $url);
error_log('캐시 삭제됨: ' . $url);
}
}
return true;
}
사용 예시
$urls_to_clear = [
'/category/wordpress/',
'/tag/performance/',
'/custom-post-type/my-post/',
'/',
];
sa_clear_cache_for_urls($urls_to_clear);
위와 같이 함수를 정의하고, 번역이 완료되는 시점에 원문 글 페이지 주소를 함수에 전달하여 캐시된 내용을 갱신 (삭제 하고 나면, 페이지가 표시될 때 혹은 Accelerator 설정에 정한 시점에 갱신됨) 하도록 할 수 있습니다.