완전한 워드프레스 플러그인 개발 실전 가이드, 처음부터 첫 번째 플러그인 만들기

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

인터넷이라는 광활한 세계에서, WordPress는 그 강력한 확장성 덕분에 콘텐츠 관리 시스템(CMS) 분야에서 큰 비중을 차지하고 있습니다. 이러한 확장성을 가능하게 하는 핵심 요소가 바로 플러그인입니다. WordPress 플러그인을 통해 사용자는 웹사이트에 자신이 상상할 수 있는 모든 기능을 추가할 수 있습니다. 이 글에서는 초보자도 쉽게 따라할 수 있도록, 처음부터 자신의 첫 번째 WordPress 플러그인을 만드는 과정을 단계별로 안내하며, 그 핵심 구조와 개발 프로세스에 대해 자세히 설명할 것입니다.

WordPress 플러그인 기초 및 개발 환경 설정

코딩을 시작하기 전에, WordPress 플러그인의 본질을 이해하고 적절한 개발 환경을 구축하는 것이 매우 중요합니다. 플러그인이란 본질적으로 하나 이상의 PHP 파일로 구성되며, WordPress의 규격을 준수하여 특정 기능을 추가하거나 기존 기능을 확장하는 도구입니다.钩子(Hooks) 핵심 시스템과 상호작용합니다.

플러그인의 기본 정의

모든 플러그인은 고유한 메인 파일을 가져야 하며, 그 파일의 맨 위에는 특정 형식의 주석을 통해 플러그인에 대한 정보를 명시해야 합니다. 이 주석은 WordPress가 플러그인 관리 페이지에서 플러그인의 이름, 설명, 버전 등의 메타데이터를 인식하고 표시하는 데 사용됩니다.

추천 읽기 플러그인 개발의 비밀: 처음부터 첫 번째 확장 기능을 구축하는 방법

로컬 개발 환경 설정

효율적이고 안전하게 개발을 진행하기 위해서는 로컬 서버 환경을 사용하는 것을 강력히 권장합니다. XAMPP, MAMP, Local by Flywheel, Docker와 같은 도구들을 선택할 수 있습니다. 가장 기본적으로 필요한 것은 PHP(목표 서버와 호환되는 버전), MySQL/MariaDB, Apache/Nginx를 설치하는 것입니다. 그 후에 최신 버전의 WordPress 코어 파일을 다운로드하여 설치를 완료하시기 바랍니다.

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

첫 번째 플러그인을 만들어 보세요: 인사말 도구

이제 실제로 간단한 플러그인을 만들어 보겠습니다. 이 플러그인의 기능은 웹사이트의 기사 내용 끝에 사용자가 지정한 맞춤형 인사말을 자동으로 추가하는 것입니다.

먼저, WordPress에서… wp-content/plugins 카테고리 아래에서 새 폴더를 만들고 이름을 지정하십시오. my-first-greeting-plugin그런 다음, 해당 폴더 내에 주 PHP 파일을 생성할 수 있으며, 파일 이름은 원하는 대로 지정할 수 있습니다. my-first-greeting-plugin.php

플러그인 헤더 정보 선언

주 파일을 열고, 플러그인을 정의하기 위해 다음 코드를 입력하세요:

<?php
/**
 * Plugin Name:       我的第一个问候语插件
 * Plugin URI:        https://yourwebsite.com/my-first-greeting-plugin
 * Description:       这是一个练习用的插件,用于在文章末尾添加问候语。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://yourwebsite.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-greeting-plugin
 */

파일을 저장한 후, WordPress 관리자의 “플러그인” 페이지로 이동하면 새로 추가된 플러그인이 플러그인 목록에 표시되어 있을 것입니다. 그 플러그인을 활성화할 수도 있습니다. 물론, 현재로서는 아직 어떠한 기능도 없습니다.

추천 읽기 우커머스(WooCommerce) 전자상거래 웹사이트 성능 최적화를 위한 10가지 주요 기술 및 실제 가이드

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

WordPress의 실행은 “후크(hook)” 메커니즘에 크게 의존하며, 이 메커니즘은 다음과 같은 두 부분으로 나뉩니다:动作钩子(액션 후크) 및过滤器钩子(필터 후크, Filter Hooks): 기사 내용 뒤에 텍스트를 추가하려면 이를 사용해야 합니다. the_content 이 필터 훅입니다.

주 파일의 헤더 주석 아래에 다음 함수와 훅을 추가하세요:

// 定义向文章内容添加问候语的函数
function mfgp_add_greeting_to_content( $content ) {
    // 确保只在主循环的单篇文章页面显示
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $greeting = '<p style="color:#666; font-style:italic;">이 글을 읽어주셔서 감사합니다! 멋진 하루 되시길 바랍니다!</p>';
        $content .= $greeting;
    }
    return $content;
}
// 将函数挂载到 ‘the_content’ 过滤器钩子上
add_filter( 'the_content', 'mfgp_add_greeting_to_content' );

파일을 저장하고 플러그인을 활성화한 후에 웹사이트의 어떤 기사든 열어서 맨 아래로 스크롤하면 추가된 인사말을 볼 수 있을 것입니다. 이 간단한 예제를 통해 플러그인 개발에서 가장 핵심적인 개념들을 실제로 적용해 보았습니다: 플러그인을 선언하는 방법, 기능 함수를 작성하는 방법, 그리고…add_filter또는add_action함수를 올바른 후크(hook)에 마운트하세요.

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

플러그인 기능 향상: 관리 설정 페이지가 추가되었습니다.

성숙한 플러그인은 일반적으로 사용자가 백엔드에서 설정을 할 수 있도록 허용합니다. 다음으로, 인사말 플러그인에 간단한 설정 페이지를 추가하여 관리자가 표시될 텍스트를 직접 수정할 수 있도록 하겠습니다.

관리 메뉴 항목을 생성합니다.

먼저, 우리는 다음을 사용해야 합니다:add_action후크(hook)가 함수를 호출하며, 이 함수는 해당 기능을 사용합니다. add_options_page 이 함수는 WordPress 관리자의 “설정” 메뉴에 하위 페이지를 추가합니다.

주 파일에 다음 코드를 계속 추가하세요:

추천 읽기 제로에서 원까지: WordPress 플러그인 개발을 위한 완벽한 가이드 및 실전 튜토리얼

// 添加设置菜单
function mfgp_add_admin_menu() {
    add_options_page(
        '问候语插件设置',          // 页面标题
        '自定义问候语',           // 菜单标题
        'manage_options',         // 权限要求(管理员)
        'my-greeting-plugin',     // 菜单 Slug
        'mfgp_settings_page_html' // 用于输出页面内容的回调函数
    );
}
add_action( 'admin_menu', 'mfgp_add_admin_menu' );

구성 설정 페이지와 저장 로직을 구축합니다.

이제, 위에서 언급한 콜백 함수를 정의해야 합니다. mfgp_settings_page_html HTML 폼을 렌더링하여 설정 페이지를 생성하고, 폼 데이터의 저장을 처리해야 합니다. WordPress는 이 과정을 간소화하기 위한 설정 API를 제공하지만, 프로세스를 명확하게 이해하기 위해 먼저 기본적인 방법을 사용해 보겠습니다.

// 定义设置页面的 HTML 结构
function mfgp_settings_page_html() {
    // 检查用户权限
    if ( !current_user_can( 'manage_options' ) ) {
        return;
    }

// 处理表单提交(非设置API方式)
    if ( isset( $_POST['mfgp_greeting_text'] ) ) {
        // 验证 Nonce 确保请求来源安全
        check_admin_referer( 'mfgp_save_settings' );
        // 清理并保存输入的数据
        $greeting_text = sanitize_textarea_field( $_POST['mfgp_greeting_text'] );
        update_option( 'mfgp_custom_greeting', $greeting_text );
        echo '<div class="notice notice-success is-dismissible"><p>설정이 저장되었습니다!</p></div>';
    }

// 获取已保存的问候语
    $saved_greeting = get_option( 'mfgp_custom_greeting', '感谢您阅读本文!祝你拥有美好的一天!' );
    ?&gt;
    <div class="wrap">
        <h1></h1>
        <form method="post" action="">
            <?php wp_nonce_field( 'mfgp_save_settings' ); ?>
            <table class="form-table">
                <tr>
                    <th scope="row"><label for="mfgp_greeting_text">커스텀 인사말</label></th>
                    <td>
                        <textarea name="mfgp_greeting_text" id="mfgp_greeting_text" rows="5" cols="50" class="large-text"><?php echo esc_textarea( $saved_greeting ); ?></textarea>
                        <p class="description">이 텍스트는 모든 기사의 끝에 표시될 것입니다.</p>
                    </td>
                </tr>
            </table>
            저장 버튼을 추가하려면 다음 코드를 사용하세요:
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

프론트엔드 출력 함수를 업데이트합니다.

마지막으로, 이전의 프론트엔드 출력 함수를 수정하여 데이터베이스에 저장된 옵션들을 가져와 사용할 수 있도록 해야 합니다.get_option인사말을 하드코딩된 텍스트 대신 해당 파일에서 읽어옵니다.

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.
function mfgp_add_greeting_to_content( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        // 从数据库选项中获取问候语,如果没有则使用默认值
        $greeting_text = get_option( 'mfgp_custom_greeting', '感谢您阅读本文!祝你拥有美好的一天!' );
        if ( ! empty( $greeting_text ) ) {
            $greeting = '<p style="color:#666; font-style:italic;">'`. esc_html($greeting_text).`'</p>';
            $content .= $greeting;
        }
    }
    return $content;
}

이제 관리자는 “설정” -> “커스텀 인사말” 페이지에서 표시되는 텍스트를 자유롭게 수정할 수 있으며, 변경 사항은 즉시 프론트엔드에 반영됩니다.

플러그인 출시 준비: 국제화 및 보안 강화

플러그인을 다른 사람들과 공유하거나 공식 디렉터리에 제출하기 전에, 몇 가지 중요한 마무리 작업을 해야 합니다. 주로 국제화(i18n)와 보안 강화가 그에 해당합니다.

텍스트의 국제화를 구현하는 방법입니다.

국제화(i18n)를 통해 여러분의 플러그인을 다른 언어로 번역할 수 있습니다. 사용자에게 표시되는 모든 문자열을 특정 함수로 감싸야 합니다. 플러그인 내의 문자열들을 수정해 주세요:

1. 在插件头部注释中,我们已经定义了 Text Domain
2. 在代码中,使用 () 또는 esc_html() 함수가 문자열을 감싸는 경우가 있습니다. 예를 들어:

    // 在设置页面函数中
    $greeting_text = get_option( 'mfgp_custom_greeting', __( ‘感谢您阅读本文!祝你拥有美好的一天!’, ‘my-first-greeting-plugin’ ) );
    echo ‘<h1>’ . esc_html__( ‘问候语插件设置’, ‘my-first-greeting-plugin’ ) . ‘</h1>’// 프론트엔드 출력 함수에서 (참고: 프론트엔드 출력은 일반적으로 번역이 필요하지 않지만, 주제나 사용자의 요구에 따라 다를 수 있습니다.)
// 하지만 인사말 자체가 다국어로 제공되어야 하는 경우에는 더 복잡한 로직이 필요할 수 있습니다.

3. 使用工具如 Poedit 创建 .pot 템플릿 파일을 통해 번역자는 적절한 콘텐츠를 생성할 수 있습니다. .po 그리고 .mo 파일.

보안 강화

보안은 매우 중요합니다. 우리는 이미 `security()`와 같은 몇 가지 보안 관련 함수를 사용해 왔습니다.sanitize_textarea_fieldesc_htmlesc_textarea그리고wp_nonce_field또한, 다음 사항에도 주의가 필요합니다:
* 权限检查:在管理页面函数开始处使用 current_user_can 검사를 수행합니다.
* 数据验证与清理:对所有用户输入(如 $_POST, $_GET)进行验证(是否符合预期格式)和清理(移除非法字符)。
* 非竞态条件更新:对于重要的选项,考虑使用 wp_options 표를 생성할 때 더 안전한 방법은 Settings API를 사용하는 것입니다. 이 API에는 비경쟁적인 요소(nonce)와 권한 검사 기능이 내장되어 있습니다.

요약

이 가이드를 통해 우리는 기능이 완전한 WordPress 플러그인을 생성하고 배포하는 전 과정을 완료했습니다. 플러그인의 기본 개념을 이해하는 것부터 시작하여, 표준 헤더 정보가 포함된 메인 파일을 만들었습니다. 그 다음, 간단한 인사말 기능을 통해 WordPress의 핵심인 ‘후크(hook)’ 메커니즘을 실습해 보았습니다. 그 후 플러그인에 관리자 설정 페이지를 추가하여 사용자가 설정을 변경할 수 있도록 했습니다. 마지막으로, 배포 전에 반드시 고려해야 할 중요한 사항들인 국제화(i18n)와 보안 강화에 대해 알아보았습니다. 각 단계에서는 WordPress의 핵심 함수들과 모범 사례들이 자세히 설명되었습니다. 이러한 기본 지식을 익힌 후에는 더 복잡하고 창의적인 플러그인을 개발하여 전 세계의 WordPress 생태계에 기여할 수 있을 것입니다.

자주 묻는 질문

WordPress 플러그인을 개발하려면 어떤 사전 지식이 필요한가요?

기본적인 PHP 프로그래밍 지식이 필요하며, HTML과 CSS에 대한 이해가 있어야 합니다. 또한 WordPress의 기본적인 기능들(예: 글 작성, 페이지 생성, 메뉴 설정 등)을 잘 다룰 수 있어야 합니다. 객체 지향 프로그래밍(OOP)에 대한 지식은 필수적이지는 않지만, 대규모 플러그인을 개발할 때 매우 유용할 것입니다.

왜 제 플러그인이 활성화되었는데도 백엔드 메뉴에 표시되지 않나요?

가장 흔한 원인은 권한 문제입니다. 호출하는 과정에서 권한 설정을 확인해 보세요.add_options_page또는 유사한 함수를 사용할 때, 두 번째 매개변수(capability)가 올바르게 설정되었는지 확인해야 합니다. 예를 들어… ‘manage_options’또한, 함수가 올바르게 통과되었는지 확인해 주십시오.add_action( ‘admin_menu’, ...)후크가 올바르게 마운트되었으며, 문법 오류로 인해 함수가 실행되지 않는 상황은 없습니다. 코드의 시작 부분에 필요한 내용을 추가하시면 됩니다.error_log함수를 사용하여 디버깅을 수행합니다.

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

먼저, 귀하의 시스템 또는 환경에서 필요한 설정들이 모두 제대로 되어 있는지 확인하십시오. wp-config.php 파일에서 WordPress 디버깅 모드가 활성화되었습니다. define( ‘WP_DEBUG’, true ); 그리고 define( ‘WP_DEBUG_LOG’, true );이렇게 하면 오류 메시지가 기록됩니다. /wp-content/debug.log 파일 안에 있습니다. 둘째로, 브라우저의 개발자 도구에서 “콘솔”과 “네트워크” 탭을 사용하여 프론트엔드 디버깅을 수행할 수 있습니다. 복잡한 로직의 경우에는…error_log( print_r( $variable, true ) );변수의 값을 로그에 출력하는 것은 흔히 사용되는 방법입니다.

내 플러그인이 다른 플러그인이나 테마와 어떻게 호환되나요?

최대한 호환성을 보장하기 위해 당신의 플러그인은 다음과 같아야 합니다.1) 모든 함수, 클래스, 변수 및 옵션에 고유의 접두사를 사용하십시오(예: 우리는 이것을 사용했습니다).mfgp_이름 충돌을 방지하십시오. 2) 프론트 엔드나 백 엔드 스타일을 수정할 때는 가능한 한 고유의 선택자 클래스 이름을 사용하십시오. 3) 가능한 경우 필터 후크를 제공하십시오.apply_filters다른 개발자들이 당신의 플러그인의 동작을 수정할 수 있게 해주세요. 4) 워드프레스 核心 데이터베이스 테이블이나 파일을 직접 수정하지 마세요.