워드프레스 플러그인 만들기 기본 개념

,

워드프레스로 뭔가를 개발할 때 테마 종속적이지 않도록 하기 위해선 플러그인을 사용하는 게 좋다. 플러그인을 만들면 코어 파일을 수정하지 않고도 많은 변화를 줄 수 있다. 코어 파일을 수정하면 워드프레스를 업데이트할 때마다 다시 커스터마이징을 해야 한다. 보안을 위해선 업데이트를 안 할 수도 없기 때문에 귀찮지 않으려면 코어 파일은 건드리지 말아야 한다.

즉, 워드프레스를 커스터마이징할 땐 플러그인을 만드는 게 좋은 것 같다.

플러그인의 기본 개념

워드프레스는 플러그인을 통해서 거의 모든 것을 조작할 수 있도록 하고 있다. 예를 들어 보자.

로그인 메시지를 조금 바꾸고 싶다고 하자.

function modify_login_message($msg){
  $msg .= '나 말곤 아무도 로그인하지 마!';
  return $msg;
}
add_filter('login_message', 'modify_login_message');

테마에 있는 functions.php 파일에 위 코드를 넣어 주면 된다. add_filter는 필터를 추가한다는 이야기고, ‘login_message‘는 워드프레스가 제공하는 키워드다. modify_login_message는 위에서 보면 알 수 있듯, 함수명이다. 즉, login_messagemodify_login_message라는 함수로 조작을 가하겠다는 뜻이다. 함수명은 뭐가 되든 상관 없는데 asdfasdf 같은 함수명도 상관없다. 두 번째 인자값으로 명시만 해 주면 되는 것이다.

modify_login_message 함수는 $msg를 받아서 가공을 한 뒤 돌려 준다. 이건 필터에 등록되는 함수의 규칙이다. 가공할 놈을 받고, 그 놈을 돌려 줘야 필터링이니까.

위에서 예로 든 건 필터인데, 액션이란 것도 있다. 걱정할 거 없다. 필터 아니면 액션이다. 사용법은 비슷하다. 액션과 필터의 차이는 간단한데, 필터는 뭔가를 받아서 리턴해 주는 놈이다. 액션은 그냥 뭔가를 하는 놈이다.

wp-login.php를 열어 보면 아래와 같은 코드를 볼 수 있다.

$message = apply_filters('login_message', $message);

필터를 여기서 적용하는 거다. apply_filter를 우리가 쓸 일은 거의 없을 거다. 저런 식으로 apply_filters('키워드', $변수) 식의 코드가 곳곳에 있고, 거기마다 우리가 조작을 가할 수 있는 것이다.

액션의 경우엔 do_action('키워드') 라는 함수가 곳곳에 있다. 여기서 해당 키워드의 액션이 벌어지는 것이다.

함수 이름에서도 알 수 있는데 필터는 적용(apply)하고 액션은 한다(do).

키워드를 소개했으니 말인데, 본문을 필터링하고 싶다면 필터 키워드에 ‘the_content‘를 써 넣으면 된다.

이 필터를 플러그인으로 만들려면…

functions.php에 위 코드를 넣는 것은 아직 플러그인을 만든 것이 아니다. 이걸 플러그인으로 만드는 건 간단하다.

wp-content/plugins 하위에 modify-login-message 라는 폴더를 만들고, modify-login-message.php 파일을 만든다. 폴더명과 파일명이 꼭 같아야 하는 건 아닌 것 같다. 이 파일이 플러그인이 작동시키는 파일이 된다. (폴더 안 만들고 plugins 폴더에 직접 파일을 만들어도 상관없다. 파일 하나로 충분한 플러그인이라면 그렇게 할 수도 있겠다.)

이 파일의 맨 위에 이렇게 적는다.

 /*
 Plugin Name: 로그인 메시지 변경
 Plugin URI: http://없어도-된다
 Description: 로그인 메시지를 변경하는 예제 플러그인다.
 Version: 1.0.0
 Author: mytory
 Author URI: https://mytory.net
 License: GPL2
 */

워드프레스의 라이센스인 GPL2 라이센스를 따라 보자. 만약 GPL2 라이센스를 따를 생각이라면 아래 문구를 집어 넣어 줘야 한다고 한다. (권장사항인 거겠지.)

/* Copyright YEAR PLUGIN_AUTHOR_NAME (email : PLUGIN AUTHOR EMAIL)
 This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/

위에 YEAR랑 PLUGIN_AUTHOR_NAME, PLUGIN AUTHOR EMAIL 같은 건 알아서 채워 넣어라.

이렇게 하고 아까 코드를 funcitons.php 에서 빼와서 이 파일에 집어 넣다. 저장을 하고 워드프레스 관리자모드의 플러그인 메뉴에 가면 내가 만든 플러그인이 있는 것을 볼 수 있다. 그리고 플러그인을 활성화하면 로그인 화면에 아이디 입력 칸 위에 아까 입력한 메시지가 뜨는 것을 볼 수 있다.

덧붙임

여기서 다룬 것은 기본 개념이다. 필터와 액션에 들어가는 변수, 우선순위 등등 알아야 할 것이 꽤 있다. 그러나 위의 기본 개념을 파악하고 나면 좀더 쉽게 플러그인을 제작할 수 있을 것이다.

마지막으로, 예제 코드를 다운로드할 수 있다. 별 거 없지만 ㅋ

카테고리 글 목록 👉

,

대표글

“워드프레스 플러그인 만들기 기본 개념”에 대한 7개의 응답

  1. 좋은정보 감사합니다 ^^

  2. […] 셀렉트 박스를 출력하는 hook을 거는 것이다. (hook이 뭔지 궁금하면 ‘워드프레스 플러그인 만들기 기본 개념‘을 한 번 읽어 봐라.) 물론 고려할 건 다 고려해서 한 거다. 이 필터링 […]

  3. 좋은 글 잘 읽었습니다. 근데 궁금한 것이 있는데요…

    결론부터 얘기하자면, 위젯 영역에서만 실행되는 조건식은 어떻게 짜야 하나요?
    (요지 : 위젯 에서만 제목 길이를 줄이고 싶음. 즉, 본문 콘텐츠에서는 원래 제목 길이로 나오구요)

    1) 해당 조건식도 없고.. is_widget() (x)
    2) 위젯의 이름을 알아낼 방법도 없고.. this.classname (x)
    3) 호출한 파일 이름을 알아내자니.. index.php 만 뱉어내공 ㅠㅠ
    4) get_the_title 에 필터를 걸면, 모든 제목 길이가 다 줄어버리구요..

    결국, 직접 위젯 파일의 코드를 수정해서 쓰긴 하는데.. 업데이트마다 매번 수정할려니 골치 아파요(위젯이 1종류만 있는것도 아니구요)

    1. 일단 질문으로만 본다면 plugin으로 새로운 위젯을 하나 만드시는 게 나을 것 같습니다.
      그러나 제목 글자수를 제한하는 용도로는 CSS를 사용하시는 게 낫습니다. https://mytory.net/archives/639 를 참고하세요.

      1. 링크해주신 글과 원문글을 참고해서 해봤는데.. 안되네요.(요앞전에도 css ellipsis 시도는 해봤는데, 안되서 직접 코드를 고친거였거든요)
        뭔가 원인이 있을텐데 익스,파폭,크롬 모두 1줄로 지정 넓이를 초과해버리는 현상이 발생하네요…
        일단, 저는 좀 더 고민해봐야 될 거 같아요. 답변 감사했습니다.
        p.s 용도 : bbpress 최신글 리스트(기본위젯) 제목 줄이기였어요. ^^;;

댓글 남기기