Skip to content

워드프레스 filter(필터)와 action(액션) 그리고 hook(훅)

워드프레스는 기본적으로 서버파일을 변경하는 것을 지양한다. 그렇다면 어떤식으로 기능을 확장시킬 수 있을까?? 바로 hook이다. 워드프레스의 핵심적인 기능이라고 볼 수도 있다. 그렇다면 hook은 뭘까?

경험이 많지는 않지만 개발을 할때 가장 많이 참고하는 건 개발할때 필요한 언어나 개발 툴들의 공식 document이다. 실제로 개발실력을 키우거나 업무에 가장 큰 도움이 되는 것도 공식 문서들이다. 워드프레스개발의 경우에는 Plugin Handbook에서 관련된 내용을 자세히 알 수 있다.

Hooks are a way for one piece of code to interact/modify another piece of code at specific, pre-defined spots. They make up the foundation for how plugins and themes interact with WordPress Core, but they’re also used extensively by Core itself.

There are two types of hooks: Actions and Filters. To use either, you need to write a custom function known as a Callback, and then register it with a WordPress hook for a specific action or filter.

Plugin Handbook 에서 설명하는 hook

위 설명에서 알 수 있듯이 hook는 특정한 지점에서 다른 코드 조각들이 서로 상호작용/수정 되는 방법이다. plugin과 theme뿐만아니라 core자체에서도 사용된다고 한다.

아래 줄에서 언급되는 action과 filter에 대해 알아보자.

Actions allow you to add data or change how WordPress operates. Actions will run at a specific point in the execution of WordPress Core, plugins, and themes. Callback functions for Actions can perform some kind of a task, like echoing output to the user or inserting something into the database. Callback functions for an Action do not return anything back to the calling Action hook.

Plugin Handbook 에서 설명하는 action

Filters give you the ability to change data during the execution of WordPress Core, plugins, and themes. Callback functions for Filters will accept a variable, modify it, and return it. They are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. Filters expect to have something returned back to them.

Plugin Handbook 에서 설명하는 filter

내가 생각하는 action과 filter의 가장 큰 특징이자 차이점은 반환값의 유무인것 같다. 정확히 전부를 이해 하진 못한 것 같지만 이해한 것을 바탕으로 아주 간단하게 정리하면 action은 DB와 상호작용하며 data를 추가 혹은 수정하는 함수, filter는 프론트엔드에서 변수의 출력을 도와주고 그 방식을 수정할 수 있게 하는 함수 정도가 되겠다.

문서를 처음 읽으면 무슨 소린지 이해가 안됐지만 무작정 따라하다 보니 흐름이 이해가 갔다. 내 경우에 글로 코딩을 이해했던 적은 진짜 단 한번도 없었다..

그럼 바로 따라 할 수 있는 action과 filter의 예제를 보자. 아래는 action의 hooking예제이다.

function wporg_callback() {
    // do something
}
add_action( 'init', 'wporg_callback' );

위의 함수는 그냥 callback함수이다. 그리고 아래줄의 add_action이 action에 callback함수를 걸어(추가해)준다. 이를 hooking이라고 한다. 위 예제의 경우 ‘init’후크가 실행될때 ‘wporg_callback’함수가 실행된다. callback함수들을 여러개 만들어서 한 action에 hooking 할 수도 있다 이때는 우선순위를 parameter로 추가해 넘겨주면 된다. 우선순위의 default값은 ’10’이다. 아래 코드의 오른쪽 주석이 우선순위에 따라 실행되는 callback함수의 순서이다.

add_action('init', 'wporg_callback_run_me_late', 11);     #3
add_action('init', 'wporg_callback_run_me_normal');       #2
add_action('init', 'wporg_callback_run_me_early', 9);     #1
add_action('init', 'wporg_callback_run_me_later', 11);    #4

다음으로 filter의 예제를 보자.

function wporg_filter_title( $title ) {
    return 'The ' . $title . ' was filtered';
}
add_filter( 'the_title', 'wporg_filter_title' );

return이 있다는 것만 제외하면 action과 크게 다른것은 없다. 마찬가지로 우선순위를 부여할 수도 있다.

여러 action과 filter의 후크에 대한 것은 아래 링크에서 확인 할 수있다. 아무래도 나는 영어가 아직 직관적으로 이해가 안돼서 구글링을 통해 후크를 먼저 찾아본다. 대부분 그 방법이 편할 것으로 생각된다.

https://codex.wordpress.org/Plugin_API/Action_Reference

Leave a Reply

Your email address will not be published. Required fields are marked *