WordPress 플러그인 개발 입문 가이드: 제로에서 시작하여 첫 번째 기능 확장을 구축하는 방법

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

준비 작업 및 환경 구축

코드를 작성하기 시작하기 전에 적합한 개발 환경이 필요합니다. 여기에는 로컬에 설치된 WordPress와 코드 편집기가 포함됩니다. XAMPP, MAMP, Local by Flywheel, Laragon과 같은 도구를 사용하여 로컬 서버 환경을 빠르게 설정하는 것을 추천합니다. 사용하는 환경에서 최신 버전의 PHP(7.4 이상)와 MySQL/MariaDB가 실행되고 있는지 확인하십시오.

다음으로, WordPress 플러그인의 기본 구조에 대해 알아야 합니다. 플러그인의 가장 핵심적인 파일은 주 PHP 파일이며, 이 파일의 이름과 디렉터리 이름은 사용자가 자유롭게 지정할 수 있습니다. 하지만 반드시 특정한 플러그인 헤더 주석을 포함해야 합니다. 이 주석은 WordPress에 자신의 플러그인을 등록하는 데 사용됩니다. 이 파일은 WordPress의 설치 디렉터리 내에 위치합니다. wp-content/plugins 폴더 내에 새로운 폴더를 만듭니다. 예를 들어… my-first-plugin

이 폴더 안에 주 플러그인 파일을 생성하세요. 예를 들어, 파일 이름을 `my-main-plugin.js`로 지정할 수 있습니다. my-first-plugin.php이 파일의 시작 부분에는 반드시 표준 플러그인 정보에 대한 주석이 포함되어 있어야 합니다.

추천 읽기 WordPress 플러그인 개발 입문 가이드: 제0단계에서 시작하여 첫 번째 사용자 정의 기능 확장을 만들어보세요.

첫 번째 플러그인 파일을 만드세요.

이제 플러그인의 기본 구조를 만들어 보겠습니다. 플러그인 디렉터리로 이동하여 주 PHP 파일을 열고, 다음과 같은 표준 플러그인 헤더 정보를 작성하세요.

UltaHost의 WordPress 호스팅 서비스
30일 환불 보장, 무제한 대역폭 및 데이터베이스 이용, 무료 DDoS 보호 서비스 제공. 3년 구매 시 50% 용량이 할인됩니다.
<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习的 WordPress 插件示例。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

이 주석은 WordPress가 플러그인을 인식하는 데 중요한 역할을 합니다. 여기에는…Plugin Name 이 항목은 필수 입력 사항이며, 나머지 항목들은 모두 선택 사항입니다. 파일을 저장한 후에는 WordPress 관리자의 “플러그인” 페이지에서 이 새로운 플러그인을 확인하고 활성화할 수 있습니다. 현재 이 플러그인에는 아직 어떠한 기능도 없습니다.

플러그인에 간단한 기능을 추가하세요.

가장 간단한 기능 중 하나는 웹사이트의 관리자 페이지에 사용자 정의 관리 메뉴를 추가하는 것입니다. 우리는 이를 구현하기 위해 다음과 같은 절차를 따를 예정입니다: add_action Function mounted admin_menu 이 동작은 훅에 연결되어 있습니다.

주 플러그인 파일의 주석 블록 뒤에 다음 코드를 추가하세요:

관리 메뉴에 최상위 메뉴 추가
function mfp_add_admin_menu() {
    add_menu_page(
        '내 첫 번째 플러그인 설정', // 페이지 타이틀
        '내 플러그인',   // 메뉴 타이틀
        'manage_options',   // 권한 요구 사항
        'my-first-plugin',   // 메뉴 slug
        'mfp_settings_page',  // 페이지 내용을 출력하는 콜백 함수
        'dashicons-admin-generic',  // 아이콘(선택 사항)
        6   // 메뉴 위치(선택 사항)
    );
}
add_action('admin_menu', 'mfp_add_admin_menu');

// 설정 페이지의 콜백 함수 정의
function mfp_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html(get_admin_page_title()); ?></h1>
        <p>제 첫 번째 플러그인의 설정 페이지에 오신 것을 환영합니다!</p>
        <form method="post" action="/ko/options.php/" data-trp-original-action="options.php">
            아래에 설정 필드를 추가할 수 있습니다.
            <p class="submit">
                <input type="submit" name="submit" id="submit" class="button button-primary" value="변경 사항을 저장합니다.">
            </p>
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

이 코드는 새로운 최상위 메뉴인 “내 플러그인”을 생성하며, 이 메뉴를 클릭하면 간단한 설정 페이지로 이동합니다. 여기서는 다음과 같은 기능들이 사용되었습니다: add_menu_page 함수를 사용하여 메뉴를 등록하고, 콜백 함수도 정의했습니다. mfp_settings_page 이제 페이지 콘텐츠를 렌더링할 차례입니다.

추천 읽기 WordPress 플러그인 개발 입문 가이드: 제로에서 시작하여 첫 번째 기능 플러그인을 만들어보세요

후크와 필터를 사용하여 기능을 확장하기

WordPress의 핵심적인 강점은 플러그인 아키텍처에 있으며, 이는 주로 액션 후크(Action Hooks)와 필터 후크(Filter Hooks)를 통해 구현됩니다. 액션 후크를 사용하면 특정 시점에 사용자 정의 코드를 실행할 수 있으며, 필터 후크를 사용하면 데이터를 수정할 수 있습니다.

액션 훅을 사용하여 페이지 하단에 주석을 추가합니다.

가정해 보겠습니다. 우리가 웹사이트의 모든 기사 끝에 자동으로 사용자 정의된 텍스트를 추가하고 싶다면, 이를 위해 특정 기능을 웹사이트에 추가해야 합니다. 이를 위한 한 가지 방법은 해당 기능을 웹사이트의 코드에 직접 삽입하거나, 웹사이트 개발 프레임워크에 해당 기능을 확장하는 the_content 이 기능은 필터 훅(filter hook)을 사용하여 구현됩니다. 참고로, 이름은 “필터(filter)”이지만 실제로는 데이터를 필터링하는 기능이 아닙니다. the_content 일반적으로 기사 내용의 출력을 수정하는 데 사용됩니다.

기사 내용의 끝에 사용자 정의 텍스트 추가
function mfp_append_text_to_content($content) {
    // 주요 루프의 단일 기사 페이지에만 추가되도록 하기 위한 확인
    if (is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query()) {
       $custom_text = '  기사 내용의 끝에 사용자 정의 텍스트 추가
function mfp_append_text_to_content($content) {
    // 주요 루프의 단일 기사 페이지에만 추가되도록 하기 위한 확인
    if (is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query()) {
       $custom_text = '<p><em>이 글은 “My First Plugin”이 여러분께 선보입니다.</em></p>'만약 커스터마이징된 텍스트가 있다면, 그것을 내용에 추가하세요.  
$$content .= $$custom_text;
    }
    return $$content;
}
add_filter('the_content', 'mfp_append_text_to_content');

이 함수 mfp_append_text_to_content 원본의 기사 내용을 받습니다. $content상황 조건(특정 기사 페이지인지 확인)을 검사한 후, 사용자 정의 텍스트를 콘텐츠의 끝에 추가한 다음, 수정된 콘텐츠를 반환합니다. add_filter 그것을 등록하세요. the_content 후크(Hook).

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

구성 가능한 플러그인 옵션을 만들기

실용적인 플러그인은 일반적으로 사용자가 설정할 수 있는 옵션들을 필요로 합니다. WordPress는 이러한 옵션들을 안전하게 처리하고 관리할 수 있는 설정 API를 제공합니다. 이제 이전에 만들었던 설정 페이지에 간단한 텍스트 필드를 추가하겠습니다.

먼저, 설정을 등록한 다음 기존의 메뉴 페이지에 추가해야 합니다.

플러그인 설정 초기화
function mfp_settings_init() {
    // “reading” 그룹(또는 사용자 정의 그룹)에 새 설정을 등록
    register_setting('mfp_plugin_settings', 'mfp_custom_message');

// 기존 페이지에 설정 영역 추가
    add_settings_section(
        'mfp_section_id',
        '사용자 정의 메시지 설정',
        'mfp_section_callback',
        'my-first-plugin'
    );

// 해당 영역에 필드 추가
    add_settings_field(
        'mfp_field_id',
        '페이지 하단 메시지',
        'mfp_field_callback',
        'my-first-plugin',
        'mfp_section_id'
    );
}
add_action('admin_init', 'mfp_settings_init');

// 영역 설명 콜백 함수
function mfp_section_callback() {
    echo '<p>여기에서 기사 끝에 플러그인을 통해 표시될 메시지를 설정하세요.</p>'필드 출력 콜백 함수
function mfp_field_callback() {
    // 데이터베이스에서 저장된 옵션 값을 가져온다
    $message = get_option('mfp_custom_message', '이 글은 “내 첫 번째 플러그인”에서 제공됩니다.');
    echo '<input type="text" name="mfp_custom_message" value="' . esc_attr($message) . '" class="regular-text">'echo '<p class="description">각 기사의 끝에 표시하고 싶은 메시지를 입력하세요.</p>';
}

그런 다음, 이전에 정의된 내용을 수정해야 합니다. mfp_settings_page 함수를 사용하여 양식에 설정된 필드의 내용을 출력합니다.

추천 읽기 쉽게 시작하여 전문가가 되기까지: WordPress 플러그인 개발의 완벽한 가이드와 실전 튜토리얼

업데이트된 설정 페이지의 콜백 함수
function mfp_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html(get_admin_page_title()); ?></h1>
        <form method="post" action="/ko/options.php/" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、安全随机数和设置组
            settings_fields('mfp_plugin_settings');
            do_settings_sections('my-first-plugin');
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

마지막으로, 이전에 추가된 텍스트를 업데이트하는 함수를 수정하여 사용자가 설정할 수 있는 옵션을 사용하도록 만들겠습니다.

함수 mfp_append_text_to_content($content) {
    if (is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query()) {
        // 옵션에서 사용자 정의 메시지를 가져오고, 없는 경우에는 기본값을 사용합니다.
        $custom_text = get_option('mfp_custom_message', '이 글은 “내 첫 번째 플러그인”에서 제공됩니다.');
        if (!empty($custom_text)) {
            $content .= ' <p>';
            $content .= $custom_text;
            $content .= '</p>';
        }
    }
}'<p><em>'`. wp_kses_post($custom_text)`.'</em></p>'만일 모든 조건이 만족되면, 다음 문장이 실행됩니다:\n';
    }
    return $content;
}

플러그인의 국제화 및 배포 준비

플러그인을 전 세계의 사용자들이 사용할 수 있도록 하기 위해서는 국제화(internationalization)가 중요한 단계입니다. 이는 모든 사용자가 보게 되는 문자열들을 텍스트 필드(text fields)와 번역 함수(translation functions)를 사용하여 처리하는 것을 의미합니다.

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.

텍스트를 번역 함수로 감싸세요.

당신은 플러그인에서 출력되는 모든 문자열을 처리해야 합니다. echo 또는 ``에서 반환된 텍스트를 특정 번역 함수로 감싸야 합니다. 가장 자주 사용되는 방법은… () 사용하여 문자열을 번역하고 반환합니다. esc_html__() HTML을 번역하고 이스케이프하는 데 사용됩니다.

이전의 코드 예제를 수정합니다:

관리 메뉴에 최상위 메뉴 추가(국제화 버전)
function mfp_add_admin_menu() {
    add_menu_page(
        __('내 첫 번째 플러그인 설정', 'my-first-plugin'), // 페이지 타이틀
        __('내 플러그인', 'my-first-plugin'),   // 메뉴 타이틀
        'manage_options',
        'my-first-plugin',
        'mfp_settings_page',
        'dashicons-admin-generic',
        6
    );
}
add_action('admin_menu', 'mfp_add_admin_menu');

// 영역 설명 콜백 함수(국제화 버전)
function mfp_section_callback() {
    echo '<p>'여기서 플러그인이 게시물의 끝에 표시되는 메시지를 구성할 수 있습니다. ' . esc_html__('여기서 플러그인이 게시물의 끝에 표시되는 메시지를 구성할 수 있습니다.', 'my-first-plugin') . '</p>';
}

동시에, 텍스트 필드도 로드해야 합니다. 플러그인의 주 파일에 있는 주석 블록 뒤에 번역 파일을 로드하는 코드를 추가하세요:

// 加载插件文本域
function mfp_load_textdomain() {
    load_plugin_textdomain('my-first-plugin', false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
add_action('plugins_loaded', 'mfp_load_textdomain');

플러그인 압축 파일을 준비합니다.

플러그인을 게시하거나 공유하기 전에, 깨끗한 배포 패키지를 만들어야 합니다. 플러그인 디렉터리에 필요한 모든 파일이 포함되어 있는지 확인하고, 불필요한 파일은 제거해야 합니다. .git 폴더, 로그 파일, IDE 설정 파일과 같은 불필요한 내용은 제외해야 합니다. 일반적으로 최소한의 플러그인 배포 패키지에는 다음과 같은 내용이 포함되어야 합니다:
1. 메인 플러그인의 PHP 파일입니다.
2. 선택 사항 중 하나 readme.txt 이 파일은 WordPress.org의 형식 표준을 따르며, 플러그인 디렉터리에 표시되도록 만들어졌습니다.
3. 번역 파일이 포함된 파일입니다. /languages 폴더(만 있다면).
4. 기타 필수적인 JavaScript, CSS 또는 이미지 리소스가 포함된 폴더들.

전체 플러그인 폴더를 ZIP 파일로 압축하면, 이 파일을 WordPress 관리자의 “플러그인 업로드” 기능을 통해 설치하거나 WordPress 공식 플러그인 디렉터리에 제출할 수 있습니다.

요약

이 가이드를 통해 우리는 WordPress 플러그인 개발의 핵심 프로세스를 모두 완료했습니다. 환경 설정부터 표준 플러그인 헤더가 포함된 메인 파일 생성, 액션(Action)과 필터(Filter) 후크를 활용한 기능 추가, 설정 API를 사용한 구성 가능한 옵션 페이지 제작에 이르기까지, 마지막으로는 국제화(Internationalization)의 기본 지식도 배웠습니다. 이 모든 과정이 보다 복잡하고 실용적인 플러그인을 구축하는 데 탄탄한 기반이 될 것입니다. 좋은 코드 구조를 유지하고 WordPress의 코딩 표준을 준수하며, 플러그인의 후크 시스템을 깊이 이해하는 것이 훌륭한 플러그인 개발자가 되기 위한 핵심입니다.

자주 묻는 질문

WordPress 플러그인을 개발하려면 어떤 프로그래밍 기초가 필요한가요?

PHP 프로그래밍의 기초 지식이 필요합니다. 왜냐하면 WordPress의 코어와 플러그인은 주로 PHP로 작성되었기 때문입니다. 또한 HTML, CSS, JavaScript에 대한 기본적인 이해도 매우 도움이 될 것입니다. 특히 관리 인터페이스나 프론트엔드 상호작용을 사용자 정의할 때 더욱 그렇습니다. WordPress의 기본 개념들, 예를 들어 글(Articles), 페이지(Page), 분류법(Categories), 훅(Hooks) 등을 이해하는 것도 필수적입니다.

플러그인의 주 파일은 반드시 어떤 이름으로 불려야 하나요?

강제적인 요구 사항은 없습니다. 주 파일은 유효한 PHP 파일 이름이면 어떤 이름이든 가능하지만, 일반적으로 플러그인 디렉터리의 이름과 일치하는 이름을 사용하는 것이 권장됩니다. 예를 들어, 디렉터리 이름이 ‘my-plugin’이라면 주 파일의 이름도 ‘my-plugin.php’와 같이 지정하는 것이 좋습니다. my-super-plugin그렇다면 주 파일의 이름은 다음과 같이 지을 수 있습니다: my-super-plugin.php핵심은 파일 상단에 있는 플러그인 관련 주석에 있습니다. WordPress는 이 주석 내용을 통해… Plugin Name: 이 플러그인을 식별하기 위해…

내 플러그인 코드를 어떻게 디버깅하나요?

플러그인을 디버깅하는 데에는 여러 가지 방법이 있습니다. 먼저, 자신의 프로젝트에서 사용하고 있는 플러그인이 올바르게 설치되었는지 확인해야 합니다. wp-config.php 파일에서 WordPress 디버깅 모드를 활성화하세요. WP_DEBUG 상수를 다음과 같이 설정합니다: true이 기능을 사용하면 페이지에 PHP 오류, 경고, 알림이 표시됩니다. 또한, 추가적으로 다음과 같은 작업을 수행할 수 있습니다: error_log() 이 함수는 디버깅 정보를 서버의 오류 로그에 기록하거나, Query Monitor와 같은 고급 디버깅 도구를 사용합니다. Query Monitor 플러그인은 데이터베이스 쿼리, 후크(hook), PHP 오류 등의 상세한 정보를 제공할 수 있습니다.

제가 개발한 플러그인을 WordPress 공식 디렉터리에 어떻게 게시할 수 있을까요?

플러그인을 WordPress.org의 공식 플러그인 디렉토리에 게시하려면 먼저 WordPress.org에 계정을 등록한 다음, 해당 플러그인을 제출하여 심사를 받아야 합니다. 플러그인의 코드는 GNU GPL 라이선스를 준수해야 하며, 올바른 형식으로 작성되어 있어야 합니다. readme.txt 파일: 심사 팀은 코드의 품질, 보안성, 그리고 디렉터리 가이드라인의 준수 여부를 검토합니다. 심사를 통과하면, 플러그인 버전을 관리하고 업데이트하는 데 사용할 수 있는 SVN 저장소를 받을 수 있습니다.