플러그인 만들기 (2) – 기능 추가하기

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on print
Print

[wordpress] 플러그인 만들기 (1)
[wordpress] 플러그인 만들기 (2) – 기능 추가하기
[wordpress] 플러그인 만들기 (3) – Override Template
[wordpress] 플러그인 만들기 (4) – 카카오톡 공유하기 샘플

1. 워드프레스에 기능을 추가하는 방법들

워드프레스 홈페이지에선 플러그인 만들기/확장하기 관련해서 몇 가지 방법을 제시하고 있다. 1

방법들을 살펴보면 다음과 같이 나누어 볼 수 있다.

1) Hook 활용하기

Java 프로그래밍 중엔 Event를 받아서 처리하는 EventListener를 정의해서 프로그램에 원하는 Action을 집어넣곤 했는데, 워드프레스 Hook이 비슷한 개념이다.

예를 들어, 워드프레스의 게시글(포스트)의 타이틀이 표현되는 모양을 바꾸고 싶다면, “the_title”이라는 filter hook에 function을 등록해주면 된다.

add_filter('the_title', 'bkj_title');

function bkj_title($title) {
    $prefix= 'Post Title: ";
    return $prefix.$title;
}

hook에는 action hook과 filter hook의 2종류가 있는데, 각각은 쓰임새가 다르다. (하지만 같은 결과를 얻어낼 수도 있다.)

action hook은 add_action을 통해 function을 추가할 수 있는데, 해당 hook에 등록된 여러 function들이 특정 순서에 따라 순차적으로 실행된다. 2

filter hook은 add_filter를 통해 function을 추가할 수 있는데, 해당 hook에서 전달한 content를 filter에 등록된 function들을 통해 차례대로 수정할 수 있다. 위의 예시 코드에서처럼.

2) Template Tag 활용하기

워드프레스에 기능을 추가하는 다른 방법은 custom template tag를 작성하는 것이다. 3

wp-includes 폴더 아래의 header.php 등 php 파일에는 화면에 표현되는 내용을 구성하기 위한 php 코드들이 있다. 이때 워드프레스에서 기본으로 정의한 tag 대신 custom tag를 직접 작성하여 표현되는 내용을 바꾸는 방법이다.

테마를 사용하면, 테마 안에도 여러 php 코드들이 존재한다. child theme을 별도로 만들어 custom template tag를 적용할 수 있다.

3) 플러그인 데이터를 DB에 저장하기

워드프레스 홈페이지에선 4가지 방법을 소개하고 있다.

① 워드프레스의 ‘option’ 사용

상대적으로 작은 양의, 상대적으로 변동이 적은/정적인, 데이터들을 저장하는데 적합하다. 우리가 플러그인 설정 화면에서 입력된 데이터들이 위 방법으로 저장된다.

② Post Meta (또는 Custom Fields 라고 불리기도 함)

각각의 포스트나 페이지, 첨부물에 custom field를 추가하는 방법이다.

③ Custom Taxonomy

taxonomy는 분류체계 정도의 뜻으로 해석된다. 분류된 그룹은 term이라고 부른다. 워드프레스에는 category들과 tag들이 term에 해당한다.

워드프레스에서 기본적으로 제공하는 default taxonomy에는 category, tag, link category 등이 있다.

위의 default taxonomy 외에도 custom taxonomy를 정의해서 활용 가능하다. 워드프레스 사이트에선 다음의 예를 들고 있다. 사용자들이 게시된 이미지에 자신이 나왔는지 여부를 체크하면 person taxonomy를 지정하여 사용자들이 자신의 id를 활용하여 http://website.com/user1/ 접근하면 본인이 지정된 이미지 게시물들을 묶어서 볼 수 있다는 것이다.

④ 마지막으로, 별도의 새로운 DB Table을 만드는 방법이 있다.

이 방법은 개별 포스트나 페이지 등에 연관된 데이터가 아니고, 데이터의 양이 지속적으로 증가하는 특성이 있는 경우 적합하다.

2. Hook을 활용하여 기능 추가하기

첫번째 플러그인으로 ‘카카오톡에 공유하기’ 플러그인을 만들어 보도록 하자. bkj-kakao-share plugin.

bkj-kakao-share plugin은 포스트의 본문 위 또는 아래에 버튼 형태로 추가되어 버튼을 누르는 경우 해당 포스트의 ‘제목’, ‘내용’, ‘이미지’, ‘링크’를 카카오톡으로 보내줄 계획이다.

위 플러그인을 워드프레스가 화면에 포스트를 보여주는 action에 add 하던지, 포스트 컨텐츠를 filter하여 버튼을 덧붙여서 전달하는 방식으로 구현해 보자.

1) 워드프레스의 hook 찾기 (Reference book을 보고)

그런데 어떤 hook이 있는지 어떻게 알 수 있지?

Adam Brown의 WordPress Hook Database와 같은 Site에서 찾아볼 수도 있다. 4

위 Site에서 살펴보면 과하게 많은 action hook, filter hook들이 있는 것을 알 수 있다. 전부 하나하나 공부할 내용 아니고, 필요한 내용만 골라서 찾아보는 용도로 활용하자.

2) 다른 플러그인들 찾아보고 필요한 hook 찾기 (비슷한 동작 플러그인 참고)

위 Site 아무리 봐도 내가 원하는 hook을 찾기는 어렵다. (난 어려웠다. -__-)

차라리 비슷한 동작을 하는 플러그인을 찾고, 그 플러그인의 php 파일을 보는게 더 빠른 방법이다.

① JavaScript 사용하기

앞의 문서에서도 참고한, 정말 훌륭한 강좌 https://1stwebdesigner.com/wordpress-plugin-development/#plugin-basic-template 에서는 Slider 플러그인을 만들기 위해 JavaScript를 사용한다. 5

카카오톡 공유하기는 https://developers.kakao.com/docs 에서 살펴보면 JavaScript, Rest API 등의 활용이 설명되어 있다. 난 JavaScript와 Rest API 2개다 아는게 없으므로, 플러그인들에 예시가 많은 JavaScript를 활용하기로 한다.

② 포스트 본문 고치기

포스트 내용을 바꾸는 플러그인을 찾다, Korea SNS라는 플러그인을 발견했다.

카카오톡 공유하기는 유료버전에서 활성화 된다.

기쁜 마음에 설치해 보았으나, 정작 가장 필요한 카카오톡 공유하기는 유료버전 구매해야 이용이 가능하다. 그래도 php 코드는 많은 참고가 되었다.

add_action('init', 'kon_tergos_init');
add_filter('the_content', 'kon_tergos_content');
add_filter('the_excerpt', 'kon_tergos_excerpt');
add_filter('plugin_action_links', 'kon_tergos_add_settings_link', 10, 2 );
add_action('admin_menu', 'kon_tergos_menu');
add_shortcode( 'korea_sns_button', 'kon_tergos_shortcode' );

korea_sns.php 파일을 일부 발췌해보았다. hook의 이름에서 상당부분 그 내용이 유추가 가능한 편이다.

3. 다음에는

다음에는 위에서 얻은 hook과 kakao developer site에 나온 개발자 가이드를 참고하여 bkj-kakao-share 플러그인을 완성해보도록 한다.

Footnotes

  1. 워드프레스 플러그인 만들기 https://codex.wordpress.org/Writing_a_Plugin
  2. 만약 function의 실행 순서가 중요하다면, 조금 더 면밀히 살펴봐야 한다. add_action을 통해 등록할 때 priority를 지정하여 해당 hook에 등록된 function들간의 순서는 조정할 수 있다고 해도, hook간에도 어떤 hook이 먼저 호출되는 지도 문서를 통해 확인해보도록 하자.

    http://rachievee.com/the-wordpress-hooks-firing-sequence/
    https://stackoverflow.com/questions/50258397/what-goes-first-wp-head-or-the-content-hooks-in-wordpress
    https://www.childthemeconfigurator.com/how-child-themes-work/
    https://wordpress.stackexchange.com/questions/162862/how-to-get-wordpress-hooks-actions-run-sequence

  3. https://codex.wordpress.org/Stepping_Into_Template_Tags

  4. https://adambrown.info/p/wp_hooks
  5. Slider 샘플 플러그인은 별도 JavaScript, CSS를 hook에 등록하고, shortcode를 정의해서 포스트 내에 short code를 추가하면 슬라이더가 화면에 나타나는 플러그인이다. 내가 필요한 기능은 플러그인이 활성화되면 자동으로 모든 포스트에 카카오톡 공유하기 기능이 추가되어야 하므로, Slider 플러그인에선 JavaScript 등록하는 부분만 참고한다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다