WordPress 플러그인 개발 입문 가이드: 제0단계에서 시작하여 첫 번째 커스텀 기능 모듈을 만들어보세요.

3분 읽기
2026-03-11
2026-06-03
2,050
아래 링크를 통해 쇼핑하면 추가 비용 없이 수수료를 받을 수 있습니다.

왜 사용자 정의 플러그인을 개발해야 할까요?

WordPress 생태계에서 플러그인은 웹사이트 기능을 확장하는 데 핵심적인 역할을 합니다. 시중에는 수천 개의 기성 플러그인이 있지만, 맞춤형 플러그인을 개발하는 것은 독특한 이점을 제공합니다. 특정 요구사항이 매우 구체적이거나 기존 플러그인들의 조합이 복잡하고 효율성이 낮을 때, 맞춤 제작된 플러그인이 최적의 해결책이 됩니다. 맞춤형 플러그인은 비즈니스 로직에 완벽하게 맞춰져 있어 여러 플러그인을 사용할 때 발생할 수 있는 충돌을 방지할 수 있으며, 일반적으로 다기능 플러그인보다 성능이 뛰어납니다. 무엇보다도 직접 개발함으로써 코드의 품질과 보안성을 완전히 제어할 수 있습니다.

학습의 관점에서 볼 때, 플러그인 개발 메커니즘을 이해하는 것은 WordPress를 진정으로 마스터하는 데 필수적인 과정입니다. 이를 통해 당신은 “사용자’에서 ”창조자’로 거듭나게 되며, 다양한 맞춤화 요구에 더 유연하게 대응할 수 있게 됩니다. 또한, 이는 향후의 제품 개발이나 직업 발전을 위한 탄탄한 기반을 마련해 줍니다.

준비 작업: 개발 환경 구축

코드를 작성하기 시작하기 전에, 안정적이고 격리된 개발 환경을 갖추는 것이 매우 중요합니다. 이는 프로덕션 웹사이트를 보호할 뿐만 아니라, 자유롭게 테스트하고 디버깅을 수 있도록 해줍니다.

로컬 개발 환경 설정

로컬 서버 소프트웨어 패키지를 사용하는 것을 추천합니다. 예를 들어, Local by Flywheel, XAMPP, MAMP 등이 있습니다. 이러한 도구들은 컴퓨터에서 웹 서버 환경(Apache/Nginx, MySQL, PHP)을 시뮬레이션하여 오프라인 상태에서 개발을 진행할 수 있게 해줍니다. 설치가 완료되면 새로운 WordPress 사이트를 생성하여 “샌드박스”로 사용하세요.

코드 편집기 선택

강력한 기능을 갖춘 코드 편집기는 개발 효율성을 크게 향상시킬 수 있습니다. Visual Studio Code는 현재 매우 인기 있는 선택지로, 가볍고 무료이며 PHP와 WordPress에 특화된 구문 강조 기능, 코드 완성 기능, 디버깅 도구와 같은 다양한 확장 기능을 제공합니다. PHPStorm은 또 다른 강력한 통합 개발 환경(IDE)으로, 보다 심도 있는 코드 분석 및 리팩토링 기능을 제공합니다.

UltaHost의 WordPress 호스팅 서비스
30일 환불 보장, 무제한 대역폭 및 데이터베이스 이용, 무료 DDoS 보호 서비스 제공. 3년 구매 시 50% 용량이 할인됩니다.

플러그인의 기본 파일 구조

가장 간단한 WordPress 플러그인은 단순히 하나의 주 PHP 파일로 구성될 수 있습니다. 하지만 표준적인 플러그인은 일반적으로 명확한 파일 및 디렉터리 구조를 가지고 있습니다. 이러한 구조는 사용자가 플러그인의 기능을 이해하고 관리하는 데 도움이 됩니다. 이러한 구조는 일반적으로 사용자의 로컬 WordPress 설치 디렉터리 내에 존재합니다. wp-content/plugins 폴더 안에 여러분의 플러그인을 위한 새로운 폴더를 만들어 주세요. 예를 들어, `my-plugins`와 같은 이름으로 폴더를 생성하면 됩니다. my-first-plugin이 폴더에는 플러그인의 모든 파일이 저장될 것입니다.

첫 번째 플러그인인 “Hello Admin”을 만들어 봅시다.”

우리는 “Hello Admin”이라는 이름의 플러그인을 만들 것입니다. 이 플러그인의 기능은 매우 간단합니다: WordPress 관리자 대시보드의 상단에 사용자가 정의한 환영 메시지를 표시하는 것입니다. 이 예제는 플러그인 개발의 핵심 요소들을 모두 포함하고 있습니다: 메인 파일, 후크(Hooks), 그리고 기본 함수들입니다.

메인 플러그인 파일을 생성합니다.

당신의 플러그인 폴더 안에서… my-first-plugin 내부에 ‘내용’이라는 이름의 파일을 생성하세요. my-first-plugin.php 이 파일은 플러그인의 시작 파일입니다. 파일을 열고, 먼저 파일 상단에 표준적인 플러그인 정보 주석을 추가하세요. 이러한 주석들은 WordPress가 플러그인을 인식하는 데 필수적입니다.

<?php
/**
 * Plugin Name:       Hello Admin
 * Plugin URI:        https://yourwebsite.com/hello-admin
 * Description:       一个简单的插件,用于在管理后台显示欢迎信息。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       hello-admin
 */

후크를 사용하여 기능을 추가하세요.

WordPress의 핵심 메커니즘은 “후크(Hooks)”입니다. 이 후크 시스템을 통해 특정 시점에 자신의 코드를 실행할 수 있습니다. 후크에는 주로 두 가지 종류가 있습니다: 액션 후크(Action Hooks)와 필터 후크(Filter Hooks)입니다. 관리자 페이지에서 콘텐츠를 출력하려면 액션 후크를 사용해야 합니다.

WordPress가 관리자 대시보드의 상단 부분을 로드할 때, ‘WordPress Admin Header’라는 이름의 파일을 사용합니다. admin_notices 액션 후크(Action Hook). 우리는 이를 통해… add_action() 이 함수는 우리가 정의한 사용자 정의 함수를 해당 훅(hook)에 등록합니다.

주 파일의 주석 아래에 다음 코드를 추가하세요:

// 钩子函数:在管理后台显示通知
function hello_admin_display_message() {
    // 确保只对管理员显示,使用 current_user_can() 检查权限
    if ( current_user_can( 'manage_options' ) ) {
        echo '<div class="notice notice-success is-dismissible"><p>환영합니다, 관리자님! 이것은 귀하가 직접 설정한 “Hello Admin” 플러그인이 실행 중인 상태입니다.</p></div>';
    }
}
// 将我们的函数挂载到 ‘admin_notices’ 这个动作钩子上
add_action( 'admin_notices', 'hello_admin_display_message' );

테스트 및 활성화

파일을 저장하세요. 이제 로컬 WordPress 웹사이트의 관리자 페이지로 이동하세요 (보통은 ‘관리자’ > ‘대시보드’를 통해 접근합니다). /wp-admin“플러그인” 메뉴로 이동하면 플러그인 목록에서 “Hello Admin”을 볼 수 있을 것입니다. “활성화”를 클릭하세요. 활성화한 후 대시보드 페이지를 새로고침하면 페이지 상단에 녹색의 성공 메시지가 표시되며, 여러분이 정의한 환영 메시지가 나타납니다. 이는 첫 번째 플러그인이 성공적으로 실행되었음을 의미합니다!

호스팅닷컴 공유 호스팅
AMD EPYC CPU, NVMe SSD 스토리지 및 LiteSpeed를 통한 고성능, 연중무휴 24시간 전문가 사내 지원, SSL, 무차별 공격, 멀웨어 및 DDoS 보호를 포함한 고급 보안 조치, 최대 73%의 비용 절감.

플러그인에 설정 가능한 옵션을 추가하세요.

단지 고정된 정보만을 표시하는 플러그인의 실용성은 제한적입니다. 다음 단계로, 관리자가 설정 페이지를 통해 표시할 메시지를 자유롭게 커스터마이징할 수 있도록 플러그인을 구성 가능하게 만들겠습니다. 이를 위해서는 관리 메뉴 페이지를 생성하고, 폼 데이터를 처리하며, 옵션 API를 사용하여 데이터를 저장해야 합니다.

관리 메뉴 페이지를 생성합니다.

우리는 관리자 후면에서 설정 페이지를 추가해야 합니다. 이를 위해서는 다음과 같은 방법을 사용할 수 있습니다: add_menu_page() 또는 add_submenu_page() 함수 구현: 플러그인의 메인 파일에 코드를 계속 추가해 나갑시다.

먼저, 설정 페이지의 HTML 콘텐츠를 생성하는 함수를 만들고, 메뉴 항목을 등록합니다:

// 创建插件设置页面
function hello_admin_add_settings_page() {
    add_options_page(
        'Hello Admin 设置', // 页面标题
        'Hello Admin',      // 菜单标题
        'manage_options',   // 所需权限
        'hello-admin',      // 菜单slug
        'hello_admin_render_settings_page' // 用于渲染页面的回调函数
    );
}
add_action( 'admin_menu', 'hello_admin_add_settings_page' );
// 渲染设置页面的HTML
function hello_admin_render_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>안녕하세요, 관리자님. “Hello Admin” 설정에 대한 도움이 필요합니다.</h1>
        <form method="post" action="/ko/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'hello_admin_settings_group' ); // 设置组名称
            do_settings_sections( 'hello-admin' ); // 页面slug
            submit_button(); // 提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

등록 설정, 필드, 데이터 저장

다음으로, WordPress의 Settings API를 사용하여 옵션들을 안전하게 등록, 검증, 저장해야 합니다. 다른 함수를 하나 만들어서… admin_init 그것을 후크에 걸어서 실행하세요.

// 初始化设置
function hello_admin_settings_init() {
    // 注册一个设置,将其存储在 wp_options 表中
    register_setting( 'hello_admin_settings_group', 'hello_admin_custom_message', 'sanitize_text_field' );
// 在页面上添加一个设置区域(可以省略,此处为清晰而加)
    add_settings_section(
        'hello_admin_section',
        '自定义消息设置',
        null, // 可选的区域描述回调函数
        'hello-admin'
    );
// 在区域中添加一个字段
    add_settings_field(
        'hello_admin_message_field',
        '欢迎消息',
        'hello_admin_message_field_callback',
        'hello-admin',
        'hello_admin_section'
    );
}
add_action( 'admin_init', 'hello_admin_settings_init' );
// 渲染消息输入字段
function hello_admin_message_field_callback() {
    $message = get_option( 'hello_admin_custom_message', '欢迎回来,管理员!' ); // 获取已保存的值,没有则用默认值
    echo '<input type="text" name="hello_admin_custom_message" value="' . esc_attr( $message ) . '" class="regular-text" />'echo '<p class="description">여기에 관리자 페이지에 표시하고 싶은 환영 메시지를 입력하세요.</p>';
}

표시 함수를 수정하여 설정 항목을 사용하도록 합시다.

마지막으로, 처음에 만들어진 알림 표시 함수를 수정해야 합니다. hello_admin_display_message()그것을 데이터베이스 옵션에서 가져오세요. hello_admin_custom_message 콘텐츠는 하드코딩되는 대신 파일에서 읽어옵니다.

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.
function hello_admin_display_message() {
    if ( current_user_can( 'manage_options' ) ) {
        $custom_message = get_option( 'hello_admin_custom_message', '欢迎回来,管理员!' ); // 获取自定义消息
        if ( ! empty( $custom_message ) ) {
            echo '<div class="notice notice-success is-dismissible"><p>'`. esc_html($custom_message)`.'</p></div>';
        }
    }
}

이제 모든 변경 사항을 저장하세요. WordPress 관리자 페이지로 돌아가면 “설정” 메뉴에서 “Hello Admin”이라는 항목을 찾을 수 있습니다. 해당 페이지로 들어가서 메시지 내용을 수정한 후 저장하세요. 대시보드를 새로고침하면, 이제 변경된 메시지가 표시되는 것을 확인할 수 있습니다. 이렇게 하면 기본적인 기능을 갖춘 사용자 정의 플러그인이 완성됩니다.

플러그인 개발의 모범 사례와 후속 단계

기본 기능을 구현한 후에는 모범 사례(Best Practices)를 따르면 플러그인을 더 전문적이고, 더 안전하며, 더 쉽게 유지보수할 수 있습니다.

보안이 최우선입니다: 사용자가 입력한 데이터는 항상 검증하고, 에스케이프 처리하며, 정리해야 합니다. WordPress에서 제공하는 함수들을 활용하세요. esc_html(), esc_attr(), sanitize_text_field(), wp_nonce_field() 등. 사용자나 데이터베이스에서 제공하는 데이터를 절대로 직접 신뢰해서는 안 됩니다.

코드 조직 및 주석: 플러그인의 기능이 점점 늘어남에 따라, 코드를 다양한 클래스나 파일로 분리하는 것이 좋습니다. 객체 지향 프로그래밍(OOP)을 사용하면 코드의 재사용성과 조직적인 구조를 향상시킬 수 있습니다. 함수와 클래스에 명확한 주석을 추가하는 것은 향후 당신 자신뿐만 아니라 잠재적인 협업자에게도 매우 중요합니다.

국제화 준비: 만약 귀하의 플러그인을 공개적으로 배포할 계획이라면, 국제화(i18n)를 지원해야 합니다. 이는 다양한 언어로 플러그인의 기능과 메시지를 제공할 수 있어야 함을 의미합니다. 즉, 여러 언어에 맞게 플러그인의 코드와 리소스를 수정해야 합니다. __() 또는 _e() 이러한 함수들은 사용자에게 표시되는 모든 문자열을 감싸고, 텍스트 도메인(Text Domain)을 적절히 설정해 줍니다. 이를 통해 다른 사람들이 귀하의 플러그인을 다른 언어로 번역할 수 있게 됩니다.

성능 고려 사항: 플러그인 리소스(CSS, JavaScript)는 필요할 때만 로드하세요. 조건 판단을 적절히 사용하여 모든 페이지에서 백엔드에서만 필요한 스크립트가 로드되지 않도록 하세요. 데이터베이스 쿼리를 최적화하고, WordPress의 ‘트랜지언트(Transients)’ API를 효과적으로 활용하여 캐싱을 구현하세요.

심층적으로 탐구해 보세요: 기초를 익힌 후에는 더 고급적인 주제들을 다룰 수 있습니다. 예를 들어, 사용자 정의 글 유형(Custom Post Type, CPT)과 사용자 정의 분류 체계를 만들거나, 쇼트코드(Shortcode)를 추가하고, 사용자 정의 위젯(Widget)을 개발하며, REST API를 통합하거나, 플러그인에 드래그앤드드롭 방식으로 사용할 수 있는 블록(Block)을 생성하는 것도 가능합니다.

요약

이 가이드를 통해 당신은 완전한 기능을 갖춘 WordPress 사용자 정의 플러그인을 처음부터 구축하는 전 과정을 완료했습니다. 플러그인 개발의 기본 개념, 즉 파일 구조, 핵심적인 후크(Hooks) 시스템, 그리고 Settings API를 사용하여 안전한 설정 페이지를 만드는 방법에 대해 배웠습니다. “Hello Admin” 플러그인은 간단하지만, 플러그인 개발의 핵심 패턴들을 모두 포함하고 있습니다: 플러그인을 선언하고, 기능을 등록하고, 데이터를 처리하며, 결과를 출력하는 것입니다. 이러한 기초를 마스터하면 WordPress의 방대한 확장 기능을 더욱 탐색할 수 있는 열쇠를 갖게 됩니다. 기억하세요: 지속적인 학습, 모범 사례를 따르며, 실제로 적용해 보는 것이 플러그인 개발 기술을 향상시키는 가장 좋은 방법입니다.

자주 묻는 질문

WordPress 플러그인은 최소 몇 개의 파일로 구성되어 있을까요?

가장 기능이 단순한 플러그인은 단 하나의 주 PHP 파일로 구성될 수 있습니다. 이 파일에 올바른 플러그인 관련 정보가 포함된 주석이 있으면, WordPress가 이를 인식하여 활성화할 수 있습니다. 하지만 기능이 복잡해질수록 코드를 더 잘 구성하기 위해 여러 파일로 나누는 것이 일반적입니다. 예를 들어, 별도의 JavaScript 파일, CSS 파일, 또는 기능 모듈별로 분류된 PHP 클래스 파일들을 사용하는 것입니다.

动作钩子 add_action 和过滤器钩子 add_filter 有什么区别?

액션 후크(Action Hooks)는 특정 시점에 코드나 기능을 실행하는 데 사용됩니다. 이 후크는 어떠한 값을 반환할 필요가 없으며, 단순히 “어떤 일을 수행하는” 역할만 합니다. 예를 들어, 글이 게시된 후 이메일을 보내는 경우가 이에 해당합니다.

필터 후크(Filter Hooks)는 데이터를 수정하는 데 사용됩니다. 이 후크는 하나의 입력값을 받아 수정된 값을 반환합니다. 예를 들어, 기사 제목이 브라우저에 표시되기 전에 그 내용을 수정하는 경우가 이에 해당합니다. 핵심적인 차이점은 다음과 같습니다: 액션(Action)은 데이터를 실행하는 것이지만, 필터(Filter)는 데이터를 수정한 후 그 결과를 반환하는 것입니다.

어떻게 하면 사용자가 입력한 데이터를 안전하게 데이터베이스에 저장할 수 있을까요?

반드시 WordPress가 제공하는 옵션 API 함수를 사용해야 합니다.update_option()그리고register_setting()register_setting()이 함수를 사용하면 정리 작업을 수행하는 콜백 함수를 지정할 수 있습니다.sanitize_text_field데이터를 저장하기 전에 자동으로 처리해야 합니다. 절대로 직접 사용해서는 안 됩니다.$wpdb또는 처리되지 않은 사용자 데이터를 삽입하기 위해 SQL 문을 사용하는 경우, 심각한 보안 취약점(예: SQL 인젝션)이 발생할 수 있습니다.

플러그인을 개발할 때 다른 플러그인과의 충돌을 어떻게 피할 수 있을까요?

좋은 코딩 관행은 충돌을 피하는 데 핵심적입니다. 모든 함수, 클래스, 변수, 옵션 이름에 고유한 접두사를 추가하세요. 예를 들어, 다음과 같이 사용할 수 있습니다:hello_admin_display_message대신 일반적인 것이 아닌…display_messageCSS 스타일과 JavaScript 코드를 특정 클래스나 ID 선택자 내에 담아두세요. 훅(hook)을 추가할 때는 콜백 함수가 필요한 조건만 만족할 때만 실행되도록 하세요(예: 현재 페이지나 사용자 권한을 확인하는 등).