안녕하세요. 린치핀소프트 한광희입니다.

이 포스트는 워드프레스 개발에 핵심인 훅(hook)에 대해서 설명합니다.

워드프레스로 테마플러그인 개발을 할때 가장 빈번하게 사용되는 함수 중 하나가 훅(hook) 함수 일겁니다.

 

add_action('init','linchpinsoft_init');

add_filter('custom_data','linchpinsoft_title_CB');

보통 위처럼 add_action() , add_filter()의 함수들을 이용하여 추가된 훅에 대해서 콜백함수를 지정 할 수 있습니다.

이 훅(Hook) 구조가 워드프레스에서는 빠질수 없고, 같은 훅에도 다수개의 콜백함수를 지정할 수 있게끔 구성되어 있습니다. 그래서 워드프레스 시스템 구조를 이벤트기반 순차(절차)지향 구조라고 볼수 있습니다.

우선 액션(action) 과 필터(filter)는 해당 훅을 등록하는 do_action(), apply_filter() 라는 두함수가 있고 등록된 훅에 콜백함수를 추가하는 add_action(), add_filter() 함수가존재합니다. 우선 do_action() 또는 apply_filter()를 통해 훅을 등록하고 해당 훅에 add_action(),add_filter()를 이용하여 콜백함수를 추가하는데, 이때 추가되는 콜백함수는 여러개 등록이 가능합니다. 그렇기에 특정 시점(훅)에 등록된 다수개의 콜백함수의 처리순서를 지정하기 위해 함수처리 우선순위(priority)를 지정할 수 있습니다.

필터(filter)와 액션(action)의 주요차이는 액션의 경우는 보통 특정 기능 또는 함수코드를 특정한 시점/위치에 추가하는데 보통 이용되며 필터의 경우는 이미 존재하는 특정 데이터를 수정하고자 할때 사용됩니다.

 

일예로서 모든 포스트(글) 마지막에 포스트 작성자를 추가하고자 할때 액션과 필터 훅을 이용하여 쉽게 기능을 추가할수 있습니다.

1.템플릿영역 중 포스트가 보여지는 마지막에 do_action()을 추가하여(훅이름 및 매개변수 지정,콜백함수 지정) 새로운 훅을 생성합니다.

2.do_action()에서 지정된 콜백함수에서 보여주고자 하는 포스트 작성자의 데이터를 로드한후 html로 출력합니다.

3.위의 콜백함수 내에 html로 구성되는 부분에 apply_filter()를 추가하여(훅이름 및 매개변수 지정, 콜백함수 지정) 새로운 필터훅을 생성합니다.

4.필터 훅에서 호출하는 콜백함수를 선언합니다.

5.이때 필터 훅의 콜백함수를 통해 포스트 작성자의 데이터를 수정할수 있습니다.(작성자의 포스트이름 뒤에 직책등을 붙이는 등)

 

정리하자면 함수/기능을 추가하는데는 액션 훅, 해당 기능/함수 내에서 데이터 수정에는 필터 훅을 이용합니다.

 

do-action-add-action (2)

<do_action() 과 add_action()의 관계도>

위의 도식을 보면 do_action()을 통해 ‘post_display’라는 태그(tag)를 가지는 훅을 추가 한후 해당 훅에 add_action()을 이용하여 콜백함수를 지정하고 있습니다. 이때 세 개의 add_action()이 지정되었으며 add_action()의 세번째 매개변수의 숫자를 기준으로 오름차순으로 훅이 순차적으로 실행됩니다.

필터훅도 액션훅과 유사하며, 보통 이런 훅을 쓸때는 태그의 이름이 다른 훅 태그이름과 중첩되지 않도록 유의하며, 하나의 훅에 여러 액션이 중첩되어 함수가 호출될 경우 그에 대한 순차처리에 대해 잘 유의해야합니다.(훅 실행의 우선순위를 지정하는 priority 매개변수를 잘 이용하세요!)

보통 다른 개발자가 개발한 플러그인/테마를 얼마나 쉽고 잘 이용할수 있느냐는 해당 개발자가 자신의 소스코드에 훅(hook)을 얼마나 잘 이용하여 프로그래밍 코드를 작성하고, 더 나아가 다른 개발자(이용자)가 자신이 개발한 플러그인/테마의 수정과 확장을 할수 있음을 배려하여 추가적인 액션/필터 훅을 설정해 놓았냐에 좌우됩니다.