워드프레스 플러그인 개발 마스터하기: 첫 번째 확장 기능 모듈을 0부터 만들어보세요.

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

워드프레스 플러그인의 기본 구조를 이해하세요.

WordPress 플러그인은 본질적으로 하나 이상의 PHP 파일로 구성되어 있으며, 이 파일들은 특정한 명명 규칙과 구조를 따릅니다. 플러그인은 WordPress가 제공하는 “후크(Hooks)” 시스템을 통해 워드프레스의 핵심 기능을 확장하거나 수정할 수 있습니다. 이러한 아키텍처를 이해하는 것이 성공적인 플러그인 개발을 위한 첫 번째 단계입니다.

가장 간단한 플러그인은 주 파일과 플러그인 헤더 주석만으로 구성됩니다. 플러그인 헤더 주석은 WordPress가 플러그인을 인식하는 데 필수적인 요소로, 반드시 주 PHP 파일의 맨 위에 위치해야 합니다. 예를 들어, 이름이 ‘my-simple-plugin’인 플러그인의 경우…my-first-plugin.php해당 파일의 내용 시작 부분은 다음과 같아야 합니다:

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于演示的简单WordPress插件。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

이 주석은 WordPress 플러그인 관리자에게 “My First Plugin”이라는 이름의 플러그인이라는 것을 알려줍니다. 이 파일을 생성한 후 해당 위치에 배치하세요./wp-content/plugins/my-first-plugin/목록을 확인한 후에는 WordPress 관리자의 “플러그인” 페이지에서 해당 플러그인을 찾아 활성화하거나 비활성화할 수 있습니다.

추천 읽기 워드프레스 플러그인 개발을 처음부터 배우기: 첫 번째 사용자 정의 기능을 구축하기

플러그인의 핵심 작동 원리는 “후크(hook)”를 중심으로 이루어져 있습니다. 후크에는 두 가지 종류가 있습니다: 액션(Action)과 필터(Filter)입니다. 액션 후크를 사용하면 특정 시점(예: 글을 게시하거나 페이지를 로드할 때)에 사용자 정의 코드를 실행할 수 있습니다. 필터 후크를 사용하면 프로세스 중에 생성되는 데이터(예: 글의 내용, 제목)를 수정할 수 있습니다. 플러그인 코드는 주로 이러한 후크들을 통해 작동합니다.add_action()그리고add_filter()이 두 함수는 해당 “후크(hook)”에 “마운트(mount)”됩니다.

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

자신의 첫 번째 플러그인 개발 환경을 설정해 보세요.

코딩을 시작하기 전에, 신뢰할 수 있는 로컬 개발 환경을 갖추는 것이 매우 중요합니다. 이를 통해 안전하게 테스트와 디버깅을 수행할 수 있습니다.

적절한 로컬 서버 도구를 선택하세요.

통합된 로컬 서버 솔루션을 사용하는 것을 추천합니다. 예를 들어, Local by Flywheel, XAMPP, MAMP 등이 있습니다. 이러한 솔루션들은 PHP, MySQL, Apache/Nginx가 포함된 완전한 개발 환경을 한 번의 클릭으로 설치할 수 있어 설정 과정을 크게 간소화해줍니다. 특히 Local by Flywheel은 WordPress를 위해 특별히 최적화되어 있어 WordPress 사이트를 빠르게 생성하고 복제할 수 있습니다.

플러그인 디렉터리와 파일을 초기화합니다.

당신의 로컬 WordPress 사이트에서…wp-content/plugins/디렉터리 내에서 해당 플러그인을 위한 별도의 폴더를 생성하세요. 폴더 이름은 소문자, 숫자, 하이픈(-)을 사용해 작성해야 하며, 가능한 한 플러그인의 주 파일 이름과 일치하도록 해야 합니다. 예를 들어, 폴더를 다음과 같이 생성할 수 있습니다:greeting-plugin그리고 그 안에 메인 파일을 생성하세요.greeting-plugin.php

코드의 구조가 명확하도록 하기 위해, 처음부터 모듈화된 구조를 사용하는 것이 좋습니다. 기본적인 플러그인 디렉터리의 예는 다음과 같습니다:

추천 읽기 워드프레스 플러그인 개발에 대한 심층 분석: 입문서부터 효율적인 사용자 정화까지

greeting-plugin/
├── greeting-plugin.php      // 主文件,包含插件头部注释和核心逻辑
├── includes/                // 存放核心功能类或函数文件
├── admin/                   // 存放后台管理界面相关文件
├── public/                  // 存放前端功能相关文件
├── assets/                  // 存放CSS、JavaScript和图片资源
│   ├── css/
│   ├── js/
│   └── images/
└── languages/               // 存放国际化翻译文件(可选)

핵심 기능의 구현 및 백엔드 관리 시스템의 구축

이제 우리가 배운 내용을 실제 예제를 통해 적용해 보겠습니다: 웹사이트의 프론트엔드에 사용자 맞춤형 인사말을 표시하는 플러그인을 만들고, 사용자가 백엔드에서 인사말 텍스트를 직접 설정할 수 있도록 하는 방법입니다.

기본 기능 함수를 생성합니다.

먼저, 우리는 메인 파일에서…greeting-plugin.php헤더 주석 아래에 핵심 기능 함수를 작성하세요. 이 함수는…display_greeting()인사말을 가져와서 출력할 준비를 합니다.

function display_greeting() {
    // 从WordPress选项中获取存储的问候语,默认为“欢迎光临!”
    $greeting_text = get_option('my_greeting_text', '欢迎光临!');
    // 将问候语进行安全转义后返回
    return '<p class="custom-greeting">'`. esc_html($greeting_text)`.'</p>';
}

이 인사말이 기사 내용의 뒤에 표시되도록 하기 위해서는 액션 훅(Action Hook)을 사용해야 합니다.the_content우리는 새로운 함수를 만들겠습니다.append_greeting_to_content()그리고 그것을 해당 훅에 마운트하세요.

호스팅닷컴 공유 호스팅
AMD EPYC CPU, NVMe SSD 스토리지 및 LiteSpeed를 통한 고성능, 연중무휴 24시간 전문가 사내 지원, SSL, 무차별 공격, 멀웨어 및 DDoS 보호를 포함한 고급 보안 조치, 최대 73%의 비용 절감.
function append_greeting_to_content( $content ) {
    // 只在单篇文章和页面中追加问候语
    if ( is_single() || is_page() ) {
        $content .= display_greeting();
    }
    return $content;
}
// 将函数挂载到‘the_content’过滤器
add_filter( 'the_content', 'append_greeting_to_content' );

플러그인 관리 메뉴와 설정 페이지를 추가하세요.

사용자들이 인사말을 직접 설정할 수 있도록 하기 위해, WordPress의 관리자 페이지에 설정 페이지를 추가해야 합니다. 이 작업은 보통…admin/자식 디렉터리 내에 별도의 파일을 생성하여 해당 작업을 처리할 수 있습니다. 예를 들어, `process_data.py`와 같은 파일을 만들어 데이터 처리 로직을 담을 수 있습니다.admin/settings-page.php

먼저, 메인 파일에서 사용하세요.add_action()`mount` 함수를 사용하여 관리 메뉴를 생성하는 기능을 추가하세요.

// 仅在后台加载时引入管理页面代码
if ( is_admin() ) {
    require_once plugin_dir_path( __FILE__ ) . 'admin/settings-page.php';
}

Inadmin/settings-page.php파일 내에서는 메뉴를 생성하고 폼을 처리하는 논리를 작성합니다. 핵심 함수는…add_options_page()

추천 읽기 제로부터 시작하는 입문: 당신의 첫 번째 WordPress 플러그인 만들기

function my_greeting_add_admin_menu() {
    add_options_page(
        '问候语设置',          // 页面标题
        '自定义问候语',        // 菜单标题
        'manage_options',      // 所需权限
        'greeting-settings',   // 菜单slug
        'my_greeting_settings_page' // 用于显示页面内容的回调函数
    );
}
add_action( 'admin_menu', 'my_greeting_add_admin_menu' );

function my_greeting_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>인사말 설정</h1>
        <form method="post" action="/ko/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'greeting_settings_group' ); // 设置组名
            do_settings_sections( 'greeting-settings' ); // 页面slug
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

다음으로, 설정 옵션을 등록해야 합니다.my_greeting_text그리고 그에 대한 입력 필드를 추가하세요. 이는 다음과 같은 방법으로 이루어집니다:register_setting()add_settings_section()그리고add_settings_field()함수가 완료되었습니다.

function my_greeting_settings_init() {
    register_setting( 'greeting_settings_group', 'my_greeting_text' );

add_settings_section(
        'greeting_settings_section',
        '编辑问候文本',
        null,
        'greeting-settings'
    );

add_settings_field(
        'my_greeting_field',
        '问候语内容',
        'my_greeting_field_render',
        'greeting-settings',
        'greeting_settings_section'
    );
}
function my_greeting_field_render() {
    $value = get_option( 'my_greeting_text', '欢迎光临!' );
    echo '<input type="text" name="my_greeting_text" value="' . esc_attr( $value ) . '" class="regular-text">';
}
add_action( 'admin_init', 'my_greeting_settings_init' );

이제 사용자는 “설정” -> “커스텀 인사말” 페이지에서 인사말 텍스트를 수정할 수 있으며, 수정된 인사말은 웹사이트의 기사 및 페이지 콘텐츠 하단에 표시됩니다.

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

플러그인의 보안성 강화, 성능 최적화, 그리고 배포 준비

한 개의 자격을 갖춘 플러그인은 단순히 실행될 수 있어야 할 뿐만 아니라, 안전하고 효율적이며 유지보수가 용이해야 합니다.

보안 모범 사례 구현

보안은 가장 우선적으로 고려해야 할 요소입니다. 사용자가 입력하거나 데이터베이스에서 가져온 모든 데이터는 프론트엔드로 출력되기 전에 반드시 에스케이프 처리되어야 합니다. WordPress에서 제공하는 함수들을 사용하면 이 작업을 쉽게 수행할 수 있습니다.esc_html()esc_attr()wp_kses_post()등. 폼 제출 및 비AJAX 요청을 처리할 때는 반드시 해당 방법을 사용해야 합니다.wp_verify_nonce()그리고check_admin_referer()요청의 유효성을 검증하여 크로스사이트 요청 위조(CSRF) 공격을 방지합니다.

플러그인을 통해 도입된 모든 프론트엔드 스크립트나 스타일시트는 반드시 특정 규칙에 따라 사용되어야 합니다.wp_enqueue_script()그리고wp_enqueue_style()올바른 등록 및 로딩을 수행하세요. 이를 통해 의존 관계가 제대로 설정되고 충돌을 방지할 수 있습니다. 또한, 스크립트 객체에 적합한 설정을 사용하시기 바랍니다.wp_localize_script()PHP 변수를 안전하게 JavaScript로 전달하는 방법입니다.

Internationalization and Localization (I18N/L10N)

플러그인을 전 세계 사용자들이 사용할 수 있도록 하기 위해서는 국제화를 지원해야 합니다. 즉, 플러그인 내에 있는 모든 사용자 대상의 텍스트 문자열을 다른 언어로 변환할 수 있어야 한다는 뜻입니다.__()또는_e()등의 번역 함수들을 래핑하세요. 메인 파일의 헤더 부분에 주석으로 남겨두세요.Text Domain플러그인의 디렉터리 이름과 반드시 일치해야 합니다. 예를 들어:
Text Domain: greeting-plugin

그런 다음, Poedit와 같은 번역 도구를 사용하여 번역 결과를 생성할 수 있습니다..pot템플릿 파일을 통해 번역자는 적절한 콘텐츠를 생성할 수 있습니다..po그리고.mo파일은 플러그인에 저장되어 있습니다.languages/폴더 안에 있습니다.

WordPress 공식 디렉터리에 게시할 준비가 되었습니다.

만약 플러그인을 WordPress.org의 플러그인 디렉터리에 제출할 계획이라면 추가적인 준비가 필요합니다. 먼저, 코드가 WordPress의 코딩 표준을 준수하는지 확인해야 합니다. 그 다음에는 상세한 문서를 작성하는 것이 중요합니다.readme.txt파일의 형식은 디렉터리의 요구 사항을 반드시 준수해야 하며, 설명, 설치 단계, 스크린샷, 업데이트 로그 등의 내용을 포함해야 합니다. 또한 플러그인을 SVN 저장소에 제출해야 하며, 디렉터리 구조가 규격에 맞도록 해야 합니다. 배포하기 전에는 반드시 모든 버전, 주제, 그리고 다른 플러그인과의 호환성을 철저히 테스트해야 합니다.

요약

WordPress 플러그인 개발은 창의성을 실제 기능으로 구현하는 과정입니다. 그 핵심은 훅(hook) 시스템을 이해하고 숙련되게 활용하는 데 있습니다. 올바른 헤더 주석이 포함된 단일 파일을 만드는 것부터 시작하여, 점차 기능 모듈을 구축하고 보안 코딩 및 국제화 표준을 엄격히 준수함으로써 전문적이고 신뢰할 수 있는 플러그인을 만들 수 있습니다. 로컬 환경을 설정하고 코드를 모듈화하여 구성하며, 프론트엔드와 백엔드 간의 상호작용을 구현하고 플러그인을 배포할 준비를 하는 이 전체 과정을 통해, 플러그인을 제작하는 기초적인 능력을 습득하게 되었습니다. WordPress의 핵심 API를 지속적으로 학습하고 우수한 플러그인의 소스 코드를 깊이 있게 연구하는 것이 개발 기술을 향상시키는 가장 좋은 방법입니다.

자주 묻는 질문

플러그인을 개발하려면 PHP에 정통해야 하나요?

네, 탄탄한 PHP 기초가 필수적입니다. WordPress 자체가 PHP로 작성되었으며, 플러그인 코드도 대부분 PHP로 구성되어 있기 때문입니다. PHP의 문법, 함수, 객체 지향 프로그래밍, 그리고 MySQL 데이터베이스와의 상호작용 방법을 이해해야 합니다. 또한, HTML, CSS, JavaScript에 대한 기본 지식은 사용자 인터페이스를 만드는 데 매우 유용합니다.

내 플러그인을 어떻게 디버깅하나요?

WordPress는 다양한 디버깅 도구를 제공합니다. 먼저, 여러분의…wp-config.php파일에서 디버깅 모드를 활성화하려면…WP_DEBUG상수를 다음과 같이 설정합니다:true이 기능을 사용하면 화면에 PHP 오류, 경고, 알림이 표시됩니다. 또한 다음과 같은 작업도 수행할 수 있습니다:error_log()이 함수는 사용자 정의 정보를 서버의 오류 로그에 기록하거나, Query Monitor와 같은 더 고급된 도구를 사용하여 데이터베이스 쿼리, 후크(hook), 스크립트 등을 분석할 수 있습니다. 이러한 도구들은 개발자에게 매우 유용한 도구입니다.

제 플러그인이 테마나 다른 플러그인과 충돌할까요?

가능합니다. 충돌은 일반적으로 다음과 같은 이유로 발생합니다: 공통적인 함수명, 클래스명, 상수명을 사용했을 때; 로드된 스크립트와 스타일시트 간에 충돌이 발생했을 때; 또는 동일한 후크(hook)에 대한 우선순위 처리가 잘못되었을 때. 이름 충돌을 피하기 위해 모든 함수, 클래스, 상수에는 고유한 접두사를 사용해야 하며, 이 접두사는 보통 플러그인 이름이나 약어와 관련이 있습니다.wp_enqueue_script시리즈 함수들은 자산의 라이프사이클을 효과적으로 관리할 수 있습니다. 핵심 동작을 수정할 때는 훅(hook)의 우선순위와 의존 관계를 신중하게 고려해야 합니다.

제 플러그인을 위해 별도의 데이터베이스 테이블을 만들어야 할까요?

대부분의 경우에는 새로운 데이터베이스 테이블을 직접 생성할 필요가 없으며, 권장되지도 않습니다. WordPress는 강력한 Options API(키-값 쌍 데이터 저장용)와 Post Meta/User Meta API(글 및 사용자 관련 데이터 저장용)를 제공하며, 이러한 API들은 90% 이상의 데이터 저장 요구사항을 충족시킬 수 있습니다. 대량의 데이터를 저장하거나 복잡한 관계가 존재하며 효율적인 쿼리가 필요한 경우에만 새로운 데이터베이스 테이블을 사용하는 것을 고려해야 합니다.$wpdb클래스를 사용하여 사용자 정의 테이블을 생성할 수 있지만, 이는 플러그인의 복잡성을 상당히 증가시킵니다.

내 플러그인에 설정 옵션을 어떻게 추가하나요?

앞서 언급했듯이, 표준적인 방법은 WordPress의 Settings API를 사용하는 것입니다. 이 API는 보안성(예: nonce 검증), 사용자 권한 확인, 그리고 인터페이스 렌더링 등의 작업을 처리해 줍니다. 단계는 다음과 같습니다:add_menu_page()또는 그 파생 함수들(예:add_options_page()메뉴와 페이지를 추가한 다음, 그것들을 사용하세요.register_setting()add_settings_section()그리고add_settings_field()구체적인 설정 필드를 정의하고 렌더링하는 것이, 수동으로 폼을 생성하고 제출 과정을 처리하는 것보다 더 안전하고 표준화된 방법입니다.