[워드프레스] add_filter: 함수에 필터를 추가하는 함수

워드프레스 테마나 플러그인을 개발할 때 #add_filter 함수를 사용하면, 원래의 함수에 변형을 거치지 않고, 함수가 하는 일을 변형 할 수 있습니다.

add_filter

#add_filter 를 사용하는 가장 큰 이유는 기존 함수를 변경하지 않으면서 해당 함수가 하는 일을 변형한다는 것입니다. 이게 중요한게 워드프레스 내장함수에 특정 기능을 추가하고 싶을 때 이 add_filter 함수를 이용하면 내장 함수 자체를 변경하지 않더라도, 어느정도 원하는 결과를 얻을 수 있다는 것입니다.

기본 사용법

#add_filter 함수의 기본 사용법은 아래와 같습니다.

add_filter( $tag, $function_to_add, $priority, $accepted_args );

각 인수의 의미는 아래와 같습니다.

$tag필터를 적용할 함수
$function_to_add 필터 내용이 되는 함수
$priority우선순위
$accepted_args함수에 사용되는 인수의 개수

이렇게 적으면 뭐가 뭔지 모르니 조금더 자세히 적어 보도록 하겠습니다.

tag

필터를 적용할 함수를 의미합니다. 예를 들어 워드프레스 내장함수인 #the_content 함수에 필터를 걸어 출력물에 조금 변형을 하고 싶다면 이 인수에 the_content 함수를 넣으면 됩니다.

function_to_add

필터를 통해 적용할 내용을 담겨있는 함수명입니다. 보통 자신이 원하는대로 만든 함수의 이름을 적어줍니다.

priotiry

필터의 우선순위 입니다. 기본값은 10이며 생략할 수 있습니다. 필터 적용 대상이 되는 함수에 여러 필터가 걸리는 경우라면 이 값이 적용 우선순위를 결정합니다.

accepted_args

함수에 사용되는 인수의 개수를 나타내는 인수로 기본값은 1이며 생략할 수 있습니다.

예제

사실 기본 사용법만 보면 뭔지 잘 모르니 예제를 한번 보도록 합시다.

function one_to_two( $content ) {
str_replace( '1', '2', $content );
return $content;
}
add_filter( 'the_content', 'one_to_two', 99 );

위 예제에서 사용된 #add_filter 함수를 해석하면 #the_content 라는 함수에 one_to_two 라는 함수의 내용대로 필터를 적용하되 가장 후순위로 적용하라는 내용입니다.

여기서 one_to_two 라는 함수는 임의로 만든 함수로 #the_content 의 내용을 담고 있는 $content 변수에서 2 라는 문자를 찾아 1이라는 문제로 바꾸고 $content 를 리턴해주는 함수입니다.

예제를 보니 조금더 이해하기 쉽죠? 위와 같이 #add_filter 를 이용해 워드프레스 내장함수든 본인이 만든 함수든 그 함수가 하는 일의 일부분을 변경 할 수 있다는 것이 add_filter 의 핵심입니다.

다만 주의 할 점은 필터를 적용할 함수의 구조를 파악하고 있어야 한다는 것입니다. 위 예제에서도 워드프레스 내장함수인 #the_content 함수가 출력할 내용을 $content 변수에 담고 있다는 것을 알고 있기 때문에 위 작업이 가능한 것입니다.

참고