워드프레스 플러그인 개발: 사용자 정의 기능 모듈을 0부터 1까지 구축하기

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

워드프레스 플러그인의 기본 구조를 이해하십시오.

코드를 자세히 살펴보기 전에, WordPress 플러그인의 기본 구성 요소를 이해하는 것이 매우 중요합니다. 플러그인이란 본질적으로 하나 또는 여러 개의 파일로 구성된 것으로, 웹사이트의 기능을 확장하거나 수정하는 데 사용됩니다.wp-content/plugins/디렉터리 내에 있는 PHP 파일들 중에서 핵심은 주 파일입니다. 이 주 파일에는 플러그인에 대한 메타정보가 포함되어 있으며, 특별한 형식의 주석 블록을 통해 WordPress에 해당 플러그인의 존재를 알립니다.

플러그인의 핵심 진입 파일입니다. 예를 들어, 우리는 이 파일의 이름을 ‘main.js’라고 지었습니다.my-first-plugin.php플러그인 파일은 반드시 특정한 파일 헤더 주석을 포함해야 합니다. 이 주석 블록에는 플러그인의 이름, 설명, 버전, 저자 등의 정보가 정의되어 있으며, 이 정보가 WordPress가 플러그인을 인식하고 로드하는 데 유일한 기준이 됩니다. 가장 기본적인 플러그인은 이 파일 하나로만 구성될 수 있으며, WordPress가 제공하는 API(예: 액션 후크(Action Hooks), 필터 후크(Filter Hooks)를 사용하여 웹사이트의 기능을 수정하거나 확장할 수 있습니다.

플러그인의 기능은 매우 간단할 수도 있습니다(예: 페이지 하단에 텍스트를 추가하는 것), 또는 매우 복잡할 수도 있습니다(예: 완전한 전자상거래 시스템을 만드는 것). 복잡성에 관계없이, 플러그인 개발은 항상 동일한 기본 패턴을 따릅니다. 먼저, 올바른 위치에 적절한 파일 구조를 만듭니다. 그 다음, 코드를 작성하여 WordPress의 라이프사이클에 통합합니다. 마지막으로, WordPress의 관리자 인터페이스를 통해 필요한 설정과 조작을 수행합니다.

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

첫 번째 플러그인을 만들어 보세요.

“Hello World” 예제를 통해 가장 기본적인 플러그인을 만드는 방법을 실습해 보겠습니다. 이 플러그인의 기능은 웹사이트의 모든 페이지에서 글 내용의 상단에 인사말을 표시하는 것입니다.

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

먼저, 로컬 컴퓨터나 서버에서 필요한 설정을 해야 합니다.wp-content/plugins/디렉터리 내에 새로운 폴더를 생성하고, 그 이름을 ‘새 폴더’(New Folder)로 지정하세요.my-hello-plugin그런 다음, 해당 폴더 내에 주 PHP 파일을 생성합니다. 이 파일의 이름을 ‘main.php’로 지정하겠습니다.my-hello-plugin.php

플러그인의 메인 파일을 작성하세요.

열기my-hello-plugin.php파일을 열고 다음 코드를 입력하세요. 이 코드는 WordPress 플러그인의 표준 형식을 따르며, 플러그인에 대한 정보와 기능을 구현하는 코드가 포함되어 있습니다.

<?php
/**
 * Plugin Name:       我的问候插件
 * Plugin URI:        https://yourwebsite.com/my-hello-plugin
 * Description:       这是一个简单的插件,用于在文章内容前输出“您好,读者!”。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-hello-plugin
 */

// 防止直接访问文件
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

/**
 * 在主文章内容前添加问候语。
 *
 * @param string $content 原始的文章内容。
 * @return string 添加了问候语后的新内容。
 */
function my_hello_add_greeting( $content ) {
    $greeting = &#039;<p style="background-color:#f0f8ff; padding:10px; border-left:4px solid #0073aa;"><strong>안녕하세요, 독자 여러분! 이 글을 읽어주셔서 감사합니다.</strong></p>';
    // 只在主循环且是文章页面时添加
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        return $greeting . $content;
    }
    return $content;
}
// 将函数挂载到 ‘the_content’ 过滤器
add_filter( 'the_content', 'my_hello_add_greeting' );

플러그인을 활성화하고 테스트해 보세요.

해당 파일이 포함된 폴더를 서버로 업로드하십시오.wp-content/plugins/디렉터리에 파일을 저장하거나, 로컬에서 개발하는 경우에는 해당 위치에 파일을 직접 놓으세요. 그런 다음 WordPress 관리자에 로그인하고 “플러그인” 메뉴로 이동하세요. 플러그인 목록에서 “My Greeting Plugin”이라는 항목을 찾을 수 있을 것입니다. “활성화” 버튼을 클릭하세요.

활성화되면 웹사이트의 어떤 기사나 페이지를 방문하든, 기사 본문이 시작되기 전에 연한 파란색 배경에 왼쪽 테두리가 있는 인사말이 표시됩니다. 이 과정은 플러그인 개발의 핵심 단계들을 명확하게 보여줍니다: 파일을 생성하고, 훅(hook)을 사용하여 기능을 추가하며, 백그라운드에서 플러그인을 활성화하는 것입니다. 이제 여러분은 WordPress 플러그인 개발의 첫 번째 단계를 성공적으로 완료하셨습니다.

추천 읽기 WordPress 플러그인 개발: 제로에서 시작하여 기능이 강력한 웹사이트 확장 기능을 구축하기

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

WordPress의 유연성과 확장성은 대부분 “후크(Hooks)” 시스템 덕분입니다. 후크에는 두 가지 유형이 있습니다: 액션 후크(Action Hooks)와 필터 후크(Filter Hooks)입니다. 이러한 후크들을 이해하고 숙련되게 사용하는 것은 고급 플러그인 개발의 핵심입니다.

액션 훅(Action Hook)을 사용하면 WordPress가 실행되는 특정 시점(예: 글을 게시하거나 페이지를 로드할 때)에 자신만의 코드를 삽입하고 실행할 수 있습니다. 예를 들어,save_post액션은 기사나 페이지가 데이터베이스에 저장될 때 실행됩니다. 이를 통해…add_action()이 함수는 사용자 정의한 함수를 해당 “후크(hook)”에 ‘마운트(mount)’합니다.

필터 후크(filter hook)를 사용하면 WordPress가 처리하는 과정에서 생성된 데이터를 수정할 수 있습니다. 필터에 함수를 등록하면, WordPress가 해당 필터를 실행할 때 등록된 모든 함수에 데이터가 전달되며, 각 함수는 처리 결과를 반환합니다. 위 예제에서 사용된 것도 바로 이 원리입니다.the_content이것은 전형적인 필터 후크(filter hook)로, 출력될 예정인 기사의 내용을 수정할 수 있도록 해줍니다.

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

Create a simple management option.

정말 유용한 플러그인은 일반적으로 사용자가 설정할 수 있는 옵션이 필요합니다. 이는 WordPress 백엔드와의 상호작용을 포함합니다. 간단한 예를 통해 사용자 정의 설정 페이지를 추가하는 방법을 보여드리겠습니다.

먼저, 우리는 사용합니다.add_action(‘admin_menu’, …)함수를 등록해 주세요. 이 함수는 관리자 후면에서 새로운 메뉴 항목을 생성할 것입니다.

/**
 * 在WordPress后台添加一个自定义菜单页面。
 */
function my_hello_add_admin_menu() {
    add_menu_page(
        ‘问候插件设置’, // 页面标题
        ‘问候插件’,     // 菜单标题
        ‘manage_options’, // 所需权限
        ‘my-hello-plugin’, // 菜单slug
        ‘my_hello_admin_page_html’, // 用于显示页面内容的回调函数
        ‘dashicons-format-chat’, // 图标(可选)
        80 // 菜单位置(可选)
    );
}
add_action( ‘admin_menu‘, ’my_hello_add_admin_menu’ );

/**
 * 自定义设置页面的HTML输出。
 */
function my_hello_admin_page_html() {
    // 检查用户权限
    if ( ! current_user_can( ‘manage_options’ ) ) {
        return;
    }
    ?&gt;
    <div class="“wrap”">
        <h1></h1>
        <form action="/ko/“options.php”/" method="“post”" data-trp-original-action="“options.php”">
            <?php
            // 输出设置字段、安全性和保存更改按钮
            settings_fields( ‘my_hello_options’ );
            do_settings_sections( ‘my-hello-plugin’ );
            submit_button( ‘保存问候语设置’ );
            ?>
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

등록 및 출력 설정 필드 (Registration and Output Settings Fields)

단순히 페이지만으로는 충분하지 않습니다. 저장할 수 있는 옵션들을 만들어야 합니다. 이를 위해서는…add_action(‘admin_init’, …)그리고register_setting()add_settings_section()그리고add_settings_field()그리고 다른 여러 함수들도 있습니다.

추천 읽기 입문부터 전문가 수준까지: WordPress 플러그인 개발 완벽 가이드

/**
 * 初始化插件的设置。
 */
function my_hello_settings_init() {
    // 注册一个设置项到数据库的‘my_hello_options’键下
    register_setting( ‘my_hello_options‘, ’my_hello_greeting_text’ );

// 在页面中添加一个设置区域
    add_settings_section(
        ‘my_hello_section’, // 区域ID
        ‘问候语设置’,        // 区域标题
        ‘my_hello_section_html’, // 区域描述的回调函数
        ‘my-hello-plugin’ // 所属页面slug
    );

// 在区域内添加一个具体的设置字段
    add_settings_field(
        ‘my_hello_field’, // 字段ID
        ‘自定义问候语’,    // 字段标签
        ‘my_hello_field_html’, // 用于渲染字段HTML的回调函数
        ‘my-hello-plugin’, // 所属页面slug
        ‘my_hello_section’ // 所属区域ID
    );
}
add_action( ‘admin_init‘, ’my_hello_settings_init’ );

/**
 * 设置区域的描述信息。
 */
function my_hello_section_html() {
    echo ‘<p>여기에 기사의 시작 부분에 표시될 인사말 내용을 설정하세요.</p>’;
}

/**
 * 渲染设置字段的HTML。
 */
function my_hello_field_html() {
    // 从数据库获取已保存的值,如果没有则使用默认值
    $greeting = get_option( ‘my_hello_greeting_text‘, ’您好,读者!欢迎阅读本文。’ );
    ?&gt;
    <input type="‘text’"
           id="‘my_hello_greeting_text’"
           name="‘my_hello_greeting_text’"
           value="“NO NUMERIC NOISE KEY" 1000”
 class="“regular-text”" />
    <p class="“description”">기사 내용 앞에 표시하고 싶은 인사말을 입력해 주세요.</p>
    &lt;?php
}

이제 우리는 입력 필드가 있는 백엔드 설정 페이지를 가지고 있습니다. 다음으로, 초기에 작성된 기능 함수들을 수정해야 합니다.my_hello_add_greeting그것이 데이터베이스에 저장된 옵션들 중에서 인사말을 읽어오도록 하세요.

function my_hello_add_greeting( $content ) {
    // 获取保存的自定义问候语,如果不存在则使用默认值
    $custom_greeting = get_option( ‘my_hello_greeting_text‘, ’您好,读者!欢迎阅读本文。’ );
    $greeting = ‘<p style="“background-color:#f0f8ff;" padding:10px; border-left:4px solid #0073aa;”><strong>’ . esc_html( $custom_greeting ) . ‘</strong></p>’;
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        return $greeting . $content;
    }
    return $content;
}

이제 기본적인 백엔드 설정 기능을 갖춘 플러그인이 완성되었습니다. 사용자는 백엔드의 “인사말 플러그인” 메뉴에서 인사말 텍스트를 자유롭게 수정할 수 있으며, 프론트엔드의 기사들은 자동으로 최신 설정이 적용됩니다.

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

플러그인 개발의 모범 사례와 보안

다른 사람들이 사용할 수 있는 WordPress 플러그인을 개발할 때는 기능의 완성도뿐만 아니라 보안성, 성능, 유지보수성 측면에서도 최고의 관행을 준수해야 합니다.

보안 고려 사항 (Security Considerations)

보안은 최우선 원칙입니다. 사용자가 입력한 내용을 절대 신뢰해서는 안 됩니다. 사용자로부터 수집된 모든 데이터(예:$_GET$_POST$_COOKIE데이터베이스 쿼리에 사용되거나 페이지에 출력되거나 파일 작업을 위해 사용되기 전에는 반드시 적절한 정리, 검증, 그리고 이스케이피 처리가 이루어져야 합니다.

“对于输出到HTML页面的数据,使用”可以翻译为:“For the data to be displayed on the HTML page, use…”esc_html()esc_attr()또는wp_kses_post()등의 함수를 사용하여 문자를 이스케이프 처리해야 합니다. 데이터베이스 쿼리에 사용되는 변수의 경우 반드시 이스케이프 처리를 해야 합니다.$wpdb->prepare()매개변수화된 쿼리를 사용할 때는 절대로 변수를 SQL 문에 직접 연결해서는 안 됩니다. 플러그인에서는 항상 이러한 방식을 따라야 합니다.defined(‘ABSPATH’) or die;이를 통해 파일이 직접적으로 접근되는 것을 방지할 수 있습니다.

코드 조직화와 국제화 (Code Organization and Internationalization)

플러그인의 기능이 점점 더 많아지면서 모든 코드를 하나의 주 파일에 담는 것은 유지보수가 어려워집니다. 적절한 방법은 코드를 기능별로 다른 파일로 분리하는 것입니다. 일반적으로 주 파일은 핸들러(hook)와 핵심 프로세스를 정의하는 역할을 하며, 설정 페이지, 기능 함수, 클래스 정의 등은 별도의 파일에 담게 됩니다.includes/또는admin/public/이러한 하위 디렉터리 내에서, 그리고 해당 경로를 통해…require_once도입하다.

당신의 플러그인이 전 세계 사용자들에게 사용될 수 있도록 하기 위해서는 국제화(i18n)를 지원해야 합니다. 이는 플러그인 내에서 출력되는 모든 텍스트 문자열이 WordPress의 번역 기능을 사용해야 한다는 것을 의미합니다.__()_e()포장을 진행하고, 그에 대한 준비도 해야 합니다.Text Domain유일한 식별자(예: 플러그인 디렉터리 이름)를 설정하세요. 파일 헤더의 주석 블록에 이미 이를 정의해 두었습니다.Text Domain: my-hello-plugin코드에서는 다음과 같이 사용해야 합니다:

$인사 = ‘<p><strong>’ . esc_html__( ‘您好,读者!欢迎阅读本文。’ , ’my-hello-plugin’ ) . ‘</strong></p>’;

이렇게 하면 번역자가 사용할 수 있습니다..po그리고.mo이 파일에는 귀하의 플러그인을 위한 다양한 언어로의 번역 내용이 포함되어 있습니다.

성능 최적화

플러그인은 웹사이트의 성능에 미치는 영향을 최소화해야 합니다. 특히 프론트엔드에서는 페이지가 로드될 때마다 대량의 데이터베이스 쿼리나 복잡한 계산을 수행하는 것을 피해야 합니다. WordPress의 ‘트랜지언트 캐싱 API(Transients API)’를 적절히 활용하여 자주 변경되지 않는 데이터나 계산 결과를 캐싱하는 것이 좋습니다. 예를 들어, API 요청의 결과를 캐싱하고 싶다면 다음과 같이 할 수 있습니다:

$data = get_transient( ‘my_plugin_api_data’ );
if ( false === $data ) {
    // 数据不存在或已过期,从API获取
    $data = wp_remote_retrieve_body( wp_remote_get( ‘https://api.example.com/data’ ) );
    // 将数据存储12小时
    set_transient( ‘my_plugin_api_data’, $data, 12 * HOUR_IN_SECONDS );
}
// 使用 $data

또한, CSS 및 JavaScript 파일이 필요한 페이지에서만 로드되도록 하십시오. 이를 위해 적절한 기술을 사용하십시오.wp_enqueue_script()그리고wp_enqueue_style()함수를 작성하고, 적절한 후크(hook)들을 함께 사용하세요.wp_enqueue_scripts전면 자원을 로드하기 위해는 해당 방법을 사용하며, 백엔드 자원의 경우에는 다른 방법을 사용합니다.admin_enqueue_scripts후크(Hook).

요약

이 글의 단계별 지침을 따라가며, 우리는 간단한 “Hello World” 플러그인에서 시작하여 백엔드 설정 옵션이 있고 기본적인 보안 및 코드 구성 원칙을 준수하는 실용적인 플러그인으로 발전시키는 전체 개발 과정을 완료했습니다. 핵심은 WordPress의 핵심 메커니즘인 훅 시스템을 이해하고 활용하는 데 있습니다. 훅 시스템을 통해 우리는 모듈화되고 비침입적인 방식으로 플랫폼 기능을 확장할 수 있습니다. 콘텐츠를 수정하거나 특정 작업을 수행하는 데 있어서도, 훅은 여러분의 코드와 WordPress 시스템을 연결해주는 중요한 역할을 합니다.

잊지 마세요: 우수한 플러그인 개발은 단순히 기능을 작동시키는 것 그 이상입니다. 이는 사용자가 입력한 데이터에 대한 엄격한 보안 처리, 코드의 명확한 구조화, 국제화 지원, 그리고 웹사이트 성능에 대한 세심한 고려를 포함합니다. 명확하게 정의된 플러그인 파일 헤더부터 시작하여, 표준 API를 사용하여 메뉴와 설정을 생성하는 과정, 그리고 최종적으로 출력 결과를 안전하게 처리하는 단계에 이르기까지, 모든 단계가 플러그인의 품질, 보안성, 그리고 사용자 경험에 영향을 미칩니다. WordPress의 다양한 API와 함수들을 계속 탐구해 나가면, 기능이 풍부하고 안정적인 플러그인을 만들 수 있을 것입니다.

자주 묻는 질문

플러그인 개발에는 어떤 기초 지식이 필요한가요?

PHP 프로그래밍 언어에 대한 기본 지식이 필요합니다. 여기에는 변수, 함수, 배열, 조건문, 반복문과 같은 핵심 개념들이 포함됩니다. 또한 HTML과 CSS에 대한 기본적인 이해도 도움이 됩니다. 왜냐하면 플러그인을 개발할 때 종종 프론트엔드 인터페이스를 생성하거나 수정해야 하기 때문입니다. WordPress의 기본 사용법과 백엔드 구조에 대한 지식도 개발 과정을 더 원활하게 만들어줍니다.

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

먼저, 귀하의… (The text seems incomplete here; please provide the full sentence or context.)wp-config.php이 파일에서 WordPress의 디버깅 모드가 활성화되어 있습니다. 설정을 통해 이 모드를 관리할 수 있습니다.define('WP_DEBUG', true);그리고define('WP_DEBUG_LOG', true);오류 메시지는 기록될 것입니다.wp-content/debug.log파일에 저장하는 것이 페이지에 직접 표시하는 것보다 더 안전합니다. 또한, 이 방법을 다른 기능들과 함께 사용할 수도 있습니다.error_log()함수를 사용하여 변수의 값을 출력하거나, 브라우저의 개발자 도구에 있는 “네트워크” 및 “콘솔” 패널을 활용하여 프론트엔드 스크립트와 스타일에 관한 문제를 확인할 수 있습니다.

제가 개발한 플러그인을 공식 플러그인 디렉터리에 업로드할 수 있을까요?

네, 가능합니다. 하지만 WordPress 공식의 플러그인 제출 요구 사항을 충족해야 합니다. 여기에는 플러그인이 GPL 호환 라이선스를 준수하고, WordPress의 코딩 표준을 지키며, 코드가 안전하고 악성 콘텐츠가 없도록 보장하며, 명확한 문서 설명을 제공하는 것이 포함됩니다. 제출하기 전에는 공식적으로 제공되는 플러그인 개발자 매뉴얼과 제출 가이드를 꼼꼼히 읽어보시는 것이 좋습니다. 제출 과정은 WordPress.org의 플러그인 제출 시스템을 통해 이루어지며, 심사를 거쳐야 합니다.

플러그인과 테마 기능의 차이점은 무엇인가요? 언제 플러그인을 개발해야 할까요?

主题(Theme)主要控制网站的外观和布局,通常负责模板文件、样式表和部分与展示相关的功能。而插件(Plugin)则用于添加或修改网站的功能,其影响与当前使用的主题(大部分情况下)无关。一个好的原则是:如果一项功能与网站的外观直接相关(如页面布局、颜色方案),可以考虑放在主题中;如果是一项通用的、独立的功能(如联系表单、SEO优化、缓存),无论更换什么主题都应该存在,那么就应该开发成插件。这有助于保持功能与设计的分离,提高灵活性。