워드프레스 플러그인 개발, 입문서부터 전문가용까지: 첫 번째 기능 플러그인을 만들어보세요.

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

왜 WordPress 플러그인 개발을 배워야 할까요?

WordPress는 전 세계에서 가장 인기 있는 콘텐츠 관리 시스템(CMS)으로, 그 강력한 확장성은 수많은 플러그인 덕분입니다. 플러그인 개발을 배우면 자신의 요구에 맞게 기능을 커스터마이징할 수 있을 뿐만 아니라, WordPress의 핵심 아키텍처를 깊이 이해하고 기술 수준을 향상시킬 수 있으며, 자신의 창의성을 실제로 출시 가능한 제품으로 구현할 수도 있습니다. 직접 플러그인을 개발함으로써 코드의 품질을 정확하게 제어하고 웹사이트의 보안을 보장할 수 있으며, 제3자 플러그인 사용으로 인한 호환성 문제를 피할 수 있습니다.

기본적인 WordPress 플러그인은 특정 디렉터리에 위치한 하나 이상의 PHP 파일로 구성되어 있으며, WordPress가 제공하는 다양한 API(예: 액션 후크, 필터 후크, 쇼트코드, 툴바 등)를 통해 핵심 시스템과 상호작용합니다. 이러한 메커니즘을 이해하는 것은 모든 플러그인을 성공적으로 개발하는 데 필수적인 전제입니다.

개발 환경 및 기반 구조를 준비합니다.

첫 번째 코드 줄을 작성하기 전에, 적절한 개발 환경을 설정하는 것이 매우 중요합니다. 로컬 서버 환경(예: XAMPP, Local by Flywheel, DevKinsta), 코드 편집기(예: VS Code, PhpStorm), 그리고 테스트용으로 사용할 WordPress 설치가 필요합니다.

추천 읽기 워드프레스 플러그인 개발을 위한 궁극의 가이드: 핵심 원칙과 실용적인 프로젝트 마스터하기

플러그인의 진입점은 주 PHP 파일입니다. 이 파일의 헤더에 있는 주석이 WordPress가 플러그인을 인식하는 데 핵심적인 역할을 합니다. 먼저 플러그인의 기본 구조를 만들어 보겠습니다.

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

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

플러그인의 주 파일은 보통 플러그인의 이름으로 명명됩니다. 예를 들어, “제 첫 번째 플러그인”이라는 이름의 플러그인을 만든다면, 그 주 파일의 이름은 “my_first_plugin.js”와 같이 될 수 있습니다.my-first-plugin.php이 파일은 반드시 다음 위치에 놓아야 합니다:/wp-content/plugins/my-first-plugin/카테고리 아래에.

파일 헤더에는 반드시 표준 플러그인 정보에 대한 주석이 포함되어야 합니다. 다음은 가장 기본적인 예시입니다:

<?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 관리자의 “플러그인” 페이지로 이동하면 새로 추가된 플러그인이 플러그인 목록에 표시되는 것을 확인할 수 있으며, 이를 활성화할 수 있습니다. 현재로서는 이 플러그인에 특별한 기능이 없지만, 기본적인 구조는 이미 완성되어 있습니다.

플러그인의 기본 디렉터리 구조를 설정하는 방법

구조가 명확한 플러그인은 장기적인 유지보수에 유리합니다. 다음과 같은 디렉터리를 생성하는 것을 권장합니다:
* /assets/CSS, JavaScript, 이미지와 같은 정적 리소스를 저장하는 데 사용됩니다.
* /includes/핵심 PHP 클래스 파일 및 함수 파일을 저장하는 데 사용됩니다.
* /languages/국제화 번역 파일(.po/.mo)을 저장하는 데 사용됩니다.

추천 읽기 Tailwind CSS의 핵심 원리: 실용성을 최우선으로 하는 원자화된 CSS 프레임워크의 작동 방식을 파헤치다

main filemy-first-plugin.php플러그인은 상수 정의, 다른 파일의 로딩, 후크(hook) 등록과 같은 초기화 작업만을 담당해야 합니다.

핵심 기능 구현: 관리 메뉴 및 페이지의 생성

흔한 플러그인 기능 중 하나는 WordPress 관리자 페이지에 관리 메뉴 페이지를 추가하는 것입니다. 이 기능을 WordPress의 “메뉴 페이지 API”를 사용하여 구현할 것입니다.

백엔드에 최상위 메뉴를 추가하세요.

우리는 사용해야 합니다.add_menu_page()이 함수는 보통… (This function is usually used in…)admin_menu이 액션 후크가 트리거될 때 호출됩니다. 메인 파일에 다음 코드를 추가하세요:

호스팅닷컴 공유 호스팅
AMD EPYC CPU, NVMe SSD 스토리지 및 LiteSpeed를 통한 고성능, 연중무휴 24시간 전문가 사내 지원, SSL, 무차별 공격, 멀웨어 및 DDoS 보호를 포함한 고급 보안 조치, 최대 73%의 비용 절감.
// 定义在管理员菜单初始化时执行的功能
function mfp_add_admin_menu() {
    add_menu_page(
        '我的插件设置',         // 页面标题
        '我的插件',            // 菜单标题
        'manage_options',      // 所需权限
        'my-first-plugin',     // 菜单slug
        'mfp_display_settings_page', // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(Dashicon)
        6                      // 菜单位置
    );
}
// 将函数挂载到 `admin_menu` 钩子上
add_action('admin_menu', 'mfp_add_admin_menu');

설정 페이지의 표시 내용을 생성합니다.

위 코드에서,mfp_display_settings_page이것은 콜백 함수로, 설정 페이지의 HTML 콘텐츠를 출력하는 역할을 합니다. 우리는 이 함수를 정의해야 합니다:

// 设置页面的显示内容
function mfp_display_settings_page() {
    // 检查用户权限
    if (!current_user_can('manage_options')) {
        wp_die(__('你没有权限访问此页面。'));
    }
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html(get_admin_page_title()); ?></h1>
        <form action="/ko/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出设置字段和安全nonce字段
            settings_fields('mfp_options_group'); // 设置组的名称
            do_settings_sections('my-first-plugin'); // 页面slug
            submit_button('保存设置');
            ?>
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

이 코드는 표준적인 WordPress 설정 페이지의 프레임워크를 생성하며, 그 내부에서 다음과 같은 기능들이 사용되고 있습니다:settings_fields()그리고do_settings_sections()이는 함수를 사용한다는 것을 의미하며, 이를 통해 WordPress Settings API를 활용하여 옵션들을 관리할 것입니다. 이는 가장 안전하고 표준화된 방법입니다.

Settings API를 사용하여 플러그인 옵션을 관리합니다.

직접 처리하세요.$_POST데이터에 보안 위험이 존재합니다. WordPress의 Settings API는 데이터 검증, 보안성, 저장 작업을 대신 처리해 주므로 플러그인 설정을 관리할 때 가장 추천되는 방법입니다.

추천 읽기 WooCommerce 플러그인 최종 가이드: 전문적인 크로스보더 전자상거래 독립형 웹사이트를 처음부터 구축하는 방법

등록 설정, 필드, 그리고 챕터

우리는 필요합니다.admin_init후크(hook) 내에서 설정을 초기화합니다. 먼저, 다음과 같이 사용하세요:register_setting()등록하기: 설정 옵션 설정하기.

function mfp_register_settings() {
    // 注册一个设置:`mfp_options` 是存储在`wp_options`表中的键名
    register_setting(
        'mfp_options_group', // 设置组名,需与`settings_fields()`参数一致
        'mfp_options',       // 选项名
        'mfp_sanitize_options' // 可选:数据清洗回调函数
    );

// 添加一个设置章节
    add_settings_section(
        'mfp_main_section',                // 章节ID
        '主要设置',                         // 章节标题
        'mfp_main_section_callback',       // 章节介绍的回调函数
        'my-first-plugin'                  // 所属页面slug
    );

// 在章节中添加一个文本字段
    add_settings_field(
        'mfp_text_field',                  // 字段ID
        '示例文本',                         // 字段标签
        'mfp_text_field_callback',         // 用于渲染字段HTML的回调函数
        'my-first-plugin',                 // 所属页面slug
        'mfp_main_section'                 // 所属章节ID
    );
}
add_action('admin_init', 'mfp_register_settings');

필드의 렌더링 및 클리닝 함수 정의

이제, 위에서 사용된 각 콜백 함수를 정의해야 합니다. 이 함수들은 필드의 HTML 형식을 출력하고 데이터를 정제하는 역할을 합니다.

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.
// 主章节的描述文本
function mfp_main_section_callback() {
    echo '<p>여기는 플러그인의 주요 설정 영역입니다.</p>';
}

// 文本字段的HTML输出
function mfp_text_field_callback() {
    // 从数据库获取现有值
    $options = get_option('mfp_options');
    $value = $options['mfp_text_field'] ?? ''; // PHP 7.0+ 空合并运算符
    echo '<input type="text" name="mfp_options[mfp_text_field]" value="' . esc_attr($value) . '" class="regular-text">';
}

// 数据清洗函数(可选但推荐)
function mfp_sanitize_options($input) {
    $sanitized_input = [];
    if (isset($input['mfp_text_field'])) {
        // 对文本字段进行基本的清洗,如去除标签
        $sanitized_input['mfp_text_field'] = sanitize_text_field($input['mfp_text_field']);
    }
    return $sanitized_input;
}

이제 보안 설정 페이지가 포함된 완전한 플러그인이 완성되었습니다. 플러그인을 활성화하면 WordPress 관리자 페이지에서 “내 플러그인” 메뉴를 찾아 클릭하여 텍스트 옵션을 설정하고 저장할 수 있습니다. 모든 데이터는 WordPress API를 통해 안전하게 저장됩니다.wp_options표 안에 있습니다.

플러그인에 프론트엔드 기능을 추가하세요: 쇼트코드(Short Code)를 생성할 수 있는 기능을 추가하는 것입니다.

백엔드 기능은 기본적이지만, 플러그인 역시 웹사이트의 프론트엔드에 영향을 미치는 경우가 많습니다. 쇼트코드(Shortcode)를 만드는 것은 플러그인의 기능을 글, 페이지, 또는 위젯에 쉽게 적용할 수 있는 훌륭한 방법입니다.

간단한 단축 코드를 등록하세요.

우리는 ‘(Name of the service or product)’이라는 이름으로 서비스를 등록합니다.[my_greeting]이것은 프론트엔드에서 인사말을 표시하는 데 사용되는 단축 코드입니다.add_shortcode()함수.

주 파일이나 전용 기능 파일에 다음 내용을 추가하세요:

// 注册短代码
function mfp_greeting_shortcode($atts, $content = null) {
    // 使用shortcode_atts设置默认属性并合并用户输入
    $atts = shortcode_atts(
        array(
            'name' =&gt; '访客', // 默认值
        ),
        $atts,
        'my_greeting' // 短代码名称
    );

// 获取插件选项中存储的文本
    $options = get_option('mfp_options');
    $custom_text = $options['mfp_text_field'] ?? '';

// 构造输出
    $output = '<div class="mfp-greeting">'$output = '<p>안녕하세요, '%s’님! esc_html($atts['name']) %. '이 사이트에 오신 것을 환영합니다.</p>';
    if (!empty($custom_text)) {
        $output .= '<p><strong>커스텀 메시지:</strong>'`. esc_html($custom_text)`.'</p>'$output = '</div>';

// 返回输出内容,而不是直接echo
    return $output;
}
add_shortcode('my_greeting', 'mfp_greeting_shortcode');

이제 사용자는 기사 편집기에서 내용을 입력할 수 있습니다.[my_greeting name="张三"]전면부에서는 개인화된 인사 메시지가 렌더링되며, 백엔드에 “샘플 텍스트”가 설정되어 있다면 그 텍스트도 함께 표시됩니다. 이러한 방식을 통해 백엔드의 설정 내용이 전면부의 출력 결과와 효과적으로 연결됩니다.

요약

위의 단계를 통해 우리는 완전한 기능을 갖춘 WordPress 플러그인을 완성했습니다. 우리는 처음부터 시작하여 플러그인의 기본 파일과 구조를 만들었으며,add_menu_page()Settings API를 사용하여 안전한 백엔드 설정 페이지를 구축했으며, 이를 통해…add_shortcode()프론트엔드 기능의 출력이 구현되었습니다. 이 과정은 플러그인 개발의 핵심 단계들을 포함합니다: 계획 수립, 초기화, 백엔드 API와의 통합, 데이터 처리, 그리고 프론트엔드 인터페이스 제공입니다.

이러한 기초 지식을 충분히 숙달한 후에는 사용자 정의 글 유형 생성, 메타데이터(Meta Box) 설정, 사용자 정의 데이터베이스 테이블 구축, REST API 엔드포인트 개발, AJAX 처리, 플러그인의 국제화 등 보다 고급 주제들을 탐구할 수 있습니다. WordPress의 코딩 표준과 모범 사례를 준수하는 것이 고품질이고 유지보수가 용이한 플러그인을 개발하는 데 있어 매우 중요하다는 점을 기억하세요.

자주 묻는 질문

플러그인 개발을 위해서는 어떤 PHP 지식을 반드시 숙달해야 할까요?

최소한 PHP의 기본 문법을 숙지해야 합니다. 여기에는 변수, 배열, 함수, 조건문, 반복문이 포함됩니다. 객체 지향 프로그래밍(OOP) 지식은 중대형 플러그인을 구축하는 데 매우 유용합니다. 또한, WordPress가 플러그인을 어떻게 로드하는지, 그리고 전역 변수와 함수를 안전하게 사용하는 방법을 이해해야 합니다.

자신이 개발한 WordPress 플러그인을 어떻게 디버깅할 수 있을까요?

먼저, 반드시 다음 사항을 확인하십시오:wp-config.php파일에서 활성화합니다.WP_DEBUG그리고WP_DEBUG_LOG이렇게 하면 오류 메시지가 로그 파일에 기록됩니다. 또한, 다음과 같은 방법을 사용할 수 있습니다:error_log()함수가 디버깅 정보를 출력합니다. 복잡한 논리의 경우 Xdebug와 같은 전문적인 디버깅 도구를 사용하여 코드를 단계별로 실행할 수 있습니다.

플러그인을 개발할 때 그 보안성을 어떻게 보장할 수 있을까요?

항상 사용자가 입력한 데이터를 검증하고 정제해야 합니다. WordPress에 내장된 함수들을 활용하십시오.esc_html(), esc_attr(), sanitize_text_field()그리고wp_kses()출력을 처리하기 위해 ‘non-ce’ 방식을 사용하세요.wp_nonce_field()이를 통해 크로스사이트 요청 위조(CSRF)를 방지할 수 있습니다. 데이터베이스 작업의 경우, 다음과 같은 방법을 사용하십시오:$wpdb클래스에서 제공하는 메서드를 사용하는 것입니다.prepare()SQL 삽입을 방지하기 위한 문장입니다.

플러그인은 로컬에 저장해야 할까요, 아니면 온라인 서버에서 개발해야 할까요?

주요 개발 작업은 로컬 개발 환경(예: Local, XAMPP)에서 수행하는 것을 강력히 권장합니다. 로컬 환경은 반응 속도가 빠르며 네트워크의 영향을 받지 않으며, 웹사이트에 영향을 주지 않고 자유롭게 테스트 및 변경을 할 수 있습니다. 기능이 대체로 완성된 후에는 온라인 테스트 환경에 배포하여 최종적인 호환성 테스트를 진행하시기 바랍니다.

자신의 플러그인을 WordPress 공식 디렉터리에 어떻게 게시할 수 있을까요?

WordPress.org에 접속하여 개발자 계정을 등록해야 합니다. 그런 다음 Subversion(SVN)을 사용하여 플러그인 코드를 제출해야 합니다. 플러그인은 공식적인 코드 표준과 디렉터리 구조 요구사항을 준수해야 하며, 필요한 파일들을 모두 포함해야 합니다.readme.txt파일입니다. 심사가 승인되면 전 세계 사용자들이 백엔드에서 직접 귀하의 플러그인을 검색하고 설치할 수 있게 됩니다.