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

,

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

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

플러그인의 기본 개념

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

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

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
 */

이렇게 하고 아까 코드를 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 최신글 리스트(기본위젯) 제목 줄이기였어요. ^^;;

댓글 남기기