워드프레스 플러그인 개발 튜토리얼: 처음부터 첫 번째 플러그인을 만들기

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

준비 작업 및 환경 구축

코드를 작성하기 시작하기 전에, 개발 환경이 올바르게 설정되어 있는지 확인해야 합니다. 우수한 로컬 개발 환경은 개발 효율성과 디버깅 경험을 크게 향상시켜 줍니다.

먼저, 로컬 컴퓨터에 웹 서버 환경을 설치해야 합니다. 이를 “로컬 서버 환경’이라고 합니다. 가장 인기 있는 선택지 중 하나는 XAMPP 또는 MAMP로, Apache, MySQL/MariaDB, PHP가 통합되어 있습니다. 또 다른 강력한 방법은 Docker를 사용하여 실제 서버 환경에 가까운 환경을 구성하는 것입니다. 어떤 방법을 선택하든, 사용하는 PHP 버전(7.4 이상을 권장)과 MySQL 버전이 대부분의 WordPress 호스팅 환경과 호환되는지 확인하십시오.

다음으로, 최신 버전의 WordPress를 다운로드하고 설치하세요. WordPress 파일을 로컬 서버의 웹사이트 루트 디렉터리(예: XAMPP의 경우)에 압축을 해제하세요. htdocs 폴더를 생성한 후, 유명한 “5분 설치” 절차에 따라 설정을 완료하세요. 이제 이 로컬 WordPress 사이트에 정상적으로 접근할 수 있는지 확인해 보세요.

추천 읽기 쉽게 이해할 수 있도록 설명하며, WordPress 플러그인 개발을 처음부터 배우는 완전한 가이드입니다.

마지막으로, 매우 중요한 단계입니다: 코드 편집기를 준비하세요. Visual Studio Code,PhpStorm, Sublime Text와 같이 코드 하이라이팅, 자동 완성 기능, 디버깅 기능을 갖춘 편집기를 사용하는 것을 추천합니다. 특히 PHP 개발의 경우, 이러한 기능들이 많은 기본적인 문법 오류를 예방하는 데 도움이 됩니다.

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

플러그인의 기본 구조와 메인 파일

한 WordPress 플러그인은 표준적이고 필수적인 파일 구조를 가지고 있으며, 그 핵심은 다음과 같은 위치에 있는 파일입니다: /wp-content/plugins/ 디렉터리 내에 있는 동일한 이름의 폴더와 그 폴더 내에 있는 주요 PHP 파일입니다.

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

먼저, /wp-content/plugins/ 디렉터리 내에 새로운 폴더를 생성하세요. 폴더의 이름은 간결하고 고유해야 하며, 플러그인의 기능을 잘 설명해야 합니다. 예를 들어 “my-first-plugin”과 같은 이름을 사용하세요. 그런 다음, 해당 폴더 내에 폴더와 동일한 이름의 PHP 파일을 만드세요. my-first-plugin.php

이 주 파일은 플러그인의 “입구점” 역할을 하며, WordPress는 파일 상단에 있는 플러그인 헤더 정보를 읽어 플러그인의 메타데이터를 인식합니다. 플러그인 헤더 정보는 표준 PHP 주석 블록으로, 파일의 시작 부분에 반드시 위치해야 합니다. 최소한 플러그인의 이름과 설명이 포함되어야 합니다.

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个学习WordPress插件开发的示例插件,用于展示“Hello World”。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

위 코드에서,Plugin Name 이 항목은 필수 입력 사항이며, 나머지 항목들은 선택 사항이지만 권장됩니다. 이 정보들은 WordPress 관리자 페이지의 “플러그인” 설정 메뉴에 표시됩니다.Text Domain 국제화(다국어 지원)를 위해 사용되며, 이후에 호출되는 번역 함수에서 사용되는 텍스트 영역과 일치해야 합니다.

추천 읽기 워드프레스 플러그인 개발을 처음부터 배우기: 원리, 실습 및 고급 기술

플러그인의 기본 상수를 정의합니다.

좋은 플러그인 개발 습관은 처음부터 플러그인의 파일 경로나 URL과 같은 유용한 상수들을 정의해 두는 것입니다. 이를 통해 후속 코드에서 이러한 상수들을 쉽게 참조할 수 있으며, 경로를 하드코딩하는 것을 방지할 수 있습니다. 그 결과 코드가 더 쉽게 유지보수되고 다른 환경으로 이식될 수 있습니다.

주 파일에서 플러그인 헤더 정보 바로 뒤에 다음 코드를 추가하여 상수를 정의할 수 있습니다:

// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
    exit; // 如果 ABSPATH 未定义,则退出
}

// 定义插件路径和URL常量
define( 'MFP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'MFP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'MFP_PLUGIN_VERSION', '1.0.0' );

여기,plugin_dir_path( FILE ) 그리고 plugin_dir_url( FILE ) 이것은 WordPress가 제공하는 핵심 함수로, 현재 사용 중인 플러그인 파일의 디렉터리 경로와 URL을 안전하게 가져올 수 있습니다.MFP_PLUGIN_VERSION 상수는 플러그인의 버전 번호를 저장하는 데 사용되며, 스크립트 스타일을 가져오거나 버전을 비교할 때 유용합니다.

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

핵심 기능 구현 및 훅(Hook) 사용

WordPress 플러그인 개발의 핵심은 “후크(Hooks)” 시스템을 사용하는 데 있습니다. 후크에는 두 가지 종류가 있습니다: 액션(Action)과 필터(Filter)입니다. 이를 통해 WordPress가 특정 시점(예: 페이지를 로드할 때, 글을 저장할 때)에 코드를 삽입하거나, 다른 함수가 반환하는 데이터를 수정할 수 있습니다.

Add a simple action hook.

가장 간단한 기능을 구현해 보겠습니다: 웹사이트 푸터에 한 줄의 텍스트를 추가하는 것입니다. 이를 위해 액션 후크(Action Hook)를 사용할 것입니다. wp_footer이 기능은 페이지 하단 영역에 HTML 내용이 출력되기 전에 실행됩니다.

주 파일에 함수를 추가한 다음, 그 함수를 사용하여 필요한 작업을 수행하세요. add_action 함수는 그것을 매핑합니다. wp_footer 이 후크 위에.

추천 읽기 워드프레스 플러그인 개발 가이드: 여러분이 처음부터 자신만의 플러그인을 개발할 수 있도록 안내해 드립니다.

/**
 * 在网站页脚输出自定义文本
 */
function mfp_display_footer_text() {
    echo '<p style="text-align: center; color: #666;">제 첫 번째 WordPress 플러그인을 사용해 주셔서 감사합니다!</p>';
}
add_action( 'wp_footer', 'mfp_display_footer_text' );

이제 플러그인을 활성화한 다음 웹사이트의 프론트엔드에 접속하세요. 페이지 하단으로 스크롤하면 해당 텍스트를 볼 수 있을 것입니다. 이것이 바로 액션 훅(Action Hook)의 기본 사용 방법입니다: 특정 시점에 특정 작업을 수행하는 것입니다.

필터를 사용하여 콘텐츠를 수정합니다.

필터는 기존의 값을 수정하는 데 사용됩니다. 예를 들어, 기사 제목을 수정하고 모든 제목 앞에 “【추천】”이라는 문구를 추가하고 싶다면, 이를 다음과 같이 할 수 있습니다. the_title 필터를 사용하여 구현합니다.

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

새로운 함수를 만들어서, 필터링할 원본 제목을 매개변수로 받아 수정된 제목을 반환하도록 합시다. 그런 다음… add_filter 마운트합니다.

/**
 * 在所有文章标题前添加前缀
 * @param string $title 原始标题
 * @return string 修改后的标题
 */
function mfp_add_prefix_to_title( $title ) {
    // 确保只在主循环中修改,避免影响后台列表等其他地方
    if ( is_single() && in_the_loop() ) {
        $title = '【推荐】' . $title;
    }
    return $title;
}
add_filter( 'the_title', 'mfp_add_prefix_to_title' );

이 간단한 예제는 필터의 강력함을 보여줍니다. 조건(예:…)을 확인할 수 있습니다. is_single() 단일 기사 페이지인지를 판단하고, 특정 상황에 맞는 내용만 수정합니다.

관리 페이지 및 보안 관련 사항을 추가하세요.

기능이 완벽한 플러그인은 대부분 웹사이트 관리자가 설정을 할 수 있는 백엔드 구성 페이지를 필요로 합니다. 또한, 코드의 보안성을 확보하는 것이 매우 중요합니다.

플러그인을 생성하기 위한 설정 페이지

우리는 사용할 것입니다. add_menu_page 이 함수는 플러그인에 최상위 관리 메뉴와 해당 설정 페이지를 추가합니다.

먼저, 설정 페이지의 HTML 콘텐츠를 생성하는 함수를 만들고, 그 다음 이 함수를 웹 페이지에 마운트하여 사용합니다. admin_menu 액션 후크 함수를 사용하여 이 메뉴를 등록합니다.

/**
 * 渲染插件设置页面的HTML内容
 */
function mfp_render_settings_page() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( '你没有足够的权限访问此页面。', 'my-first-plugin' ) );
    }
    ?&gt;
    <div class="wrap">
        <h1></h1>
        <p>이것은 제 첫 번째 플러그인의 설정 페이지입니다. 향후에는 여기에 폼과 옵션을 추가할 수 있을 것입니다.</p>
        <form action="/ko/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 后续可以在这里添加设置字段
            // settings_fields( 'mfp_options_group' );
            // do_settings_sections( 'mfp-settings-page' );
            // submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

/**
 * 注册插件管理菜单
 */
function mfp_add_admin_menu() {
    add_menu_page(
        &#039;我的第一个插件设置&#039;, // 页面标题
        &#039;我的插件&#039;,          // 菜单标题
        &#039;manage_options&#039;,    // 所需权限 (manage_options)
        &#039;mfp-settings-page&#039;, // 菜单slug
        &#039;mfp_render_settings_page&#039;, // 回调函数
        &#039;dashicons-admin-plugins&#039;, // 图标 (Dashicons)
        80                   // 菜单位置
    );
}
add_action( &#039;admin_menu&#039;, &#039;mfp_add_admin_menu&#039; );

플러그인을 활성화하면 WordPress 관리자 페이지의 왼쪽 메뉴에 “내 플러그인(My Plugins)”이라는 새로운 항목이 추가됩니다. 이 항목을 클릭하면 간단한 설정 페이지로 이동합니다. 이 페이지에는 WordPress Settings API를 사용하여 양식 필드를 추가할 수 있는 인터페이스가 준비되어 있으며, 이는 사용자 입력을 안전하게 처리하는 표준적인 방법입니다.

데이터 검증 및 이스케이피(Data Validation and Escaping)

사용자로부터 받거나 브라우저로 출력되는 모든 데이터는 크로스사이트 스크립팅(XSS) 공격과 SQL 인젝션을 방지하기 위해 반드시 처리되어야 합니다. WordPress는 다양한 보안 기능을 제공합니다:

  • 에스케이프 출력: 사용하세요. esc_html()esc_attr()esc_url() 그리고 wp_kses_post() 등의 함수를 사용하여 HTML에 출력되는 내용을 정제합니다.
  • 데이터 검증: 사용하기 sanitize_text_field()sanitize_email() 등의 함수를 사용하여 폼에서 제출된 입력 데이터를 정리합니다.
  • 비-CE 키: 데이터 수정이 필요한 폼 작업의 경우 반드시 이 키를 사용해야 합니다. wp_nonce_field() 그리고 wp_verify_nonce() 요청의 합법성을 확인하기 위해서입니다.

보안은 플러그인 개발의 생명선과도 같으며, 처음부터 좋은 습관을 들이는 것이 매우 중요합니다.

요약

이 튜토리얼을 통해 우리는 완전하고 작지만 모든 필수 기능을 갖춘 WordPress 플러그인 개발 프로세스를 완성했습니다. 우리는 처음부터 시작하여 개발 환경을 설정하고, 표준에 맞는 플러그인의 주 파일 구조를 만들었습니다. 또한 플로트터에 텍스트를 추가하고 글 제목을 수정하는 두 가지 기능을 구현함으로써, WordPress가 작동하는 데 필수적인 액션 후크(Action Hooks)와 필터 후크(Filter Hooks)의 핵심 사용법을 깊이 이해했습니다. 마지막으로, 플러그인에 기본적인 관리 페이지를 추가했으며, 데이터 검증, 권한 확인, 출력 데이터의 이스케이피(Escape)와 같은 보안 관련 사항의 중요성을 강조했습니다.

이 간단한 “Hello World” 수준의 플러그인은 상업용 플러그인에 필요한 핵심 요소들을 모두 포함하고 있습니다: 표준적인 구조, 후크(hook)의 사용, 백엔드 인터페이스, 그리고 보안 고려사항들이죠. 이를 기반으로 WordPress의 Settings API를 활용하여 실제적인 옵션들을 생성하거나, 사용자 정의 데이터베이스 테이블을 작성하거나, 더 복잡한 쇼트코드(shortcode)나 유틸리티를 개발해 볼 수 있습니다. 공식 개발 문서를 지속적으로 학습하고 우수한 오픈소스 플러그인들의 코드를 참고하는 것이 기술을 향상시키는 가장 좋은 방법입니다.

자주 묻는 질문

제 워드프레스 플러그인을 어떻게 디버그할 수 있나요?
WordPress의 디버깅 모드를 활성화하는 것이 첫 번째 단계입니다. wp-config.php 파일 내에서, 해당 내용을 처리할 것입니다. WP_DEBUG 상수의 값은 다음과 같이 설정합니다: true. 또한 설정을 변경할 수도 있습니다. WP_DEBUG_LOG 그것은 true오류 메시지를 기록하세요. /wp-content/debug.log 파일 내에서는 오류 메시지가 페이지에 직접 표시되어 사용자에게 영향을 미치는 것을 방지해야 합니다.

또한, 브라우저 개발자 도구(F12)의 Console 및 Network 패널을 사용하여 JavaScript 오류와 API 요청을 확인하거나, Xdebug와 같은 PHP 디버깅 도구를 코드 편집기(예: VS Code)와 통합하여 중단점을 설정하는 것은 매우 효율적인 전문적인 디버깅 방법입니다.

왜 제 플러그인이 활성화될 때 “치명적인 오류”가 발생하나요?

이런 문제는 대부분 PHP 문법 오류나 존재하지 않는 함수/클래스가 호출되었기 때문에 발생합니다. 먼저, 위에서 언급한 대로 WordPress의 디버깅 로그를 확인해 보세요. 오류 메시지에는 어떤 파일의 어느 줄에 문제가 있는지 명확하게 표시되어 있습니다.

일반적인 원인으로는 세미콜론(;)의 부족, 괄호의 불일치, 따옴표의 오용, 필요한 파일이 포함되지 않은 상태에서 함수가 호출되는 경우, 그리고 플러그인이 비활성화된 상태에서도 코드가 계속 실행되는 경우가 있습니다. PHP 버전이 요구 사항을 충족하는지 확인하고, 모든 함수가 사용되기 전에 정의되어 있는지 반드시 점검하십시오.

내 플러그인을 다국어(국제화)로 지원하려면 어떻게 해야 하나요?

WordPress는 GNU gettext 프레임워크를 사용하여 국제화(i18n) 및 현지화(l10n) 기능을 구현합니다. 먼저, 튜토리얼에 따라 메인 파일의 헤더 정보에서 관련 설정을 올바르게 설정해야 합니다. Text Domain예를 들어, my-first-plugin그리고 Domain Path

플러그인 코드 내에서 번역이 필요한 모든 문자열은 번역 함수를 사용하여 감싸야 합니다. 예를 들어:__( ‘文本’, ‘my-first-plugin’ ) 또는 _e( ‘文本’, ‘my-first-plugin’ )그런 다음, Poedit와 같은 도구를 사용하여 코드 내의 이러한 문자열들을 스캔하여 .pot 템플릿 파일을 생성하고, 해당 언어(예: 중국어 zh_CN)에 맞는 .po 및 .mo 파일을 만들어 해당 위치에 저장합니다. /languages/ 카테고리 아래에.

플러그인 개발 중에 데이터베이스와 안전하게 상호작용하는 방법은 무엇인가요?

절대로 사용자 입력을 그대로 SQL 문에 직접 포함시켜서는 안 됩니다. 반드시 WordPress가 제공하는 데이터베이스 작업 관련 클래스를 사용해야 합니다. $wpdb. It provides features such as $wpdb->prepare() 이러한 방법을 사용하면 SQL 쿼리에 대해 안전한 예비 문장(prepared statement) 처리를 수행할 수 있으며, SQL 인젝션을 효과적으로 방지할 수 있습니다.

예를 들어, 데이터를 조회할 때는 다음과 같이 작성해야 합니다:

global $wpdb;
$user_input = $_POST['some_input'];
$safe_query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}table WHERE column = %s", $user_input );
$results = $wpdb->get_results( $safe_query );

동시에, 사용자가 입력한 데이터에 대해 엄격한 검증과 정제 과정을 거칩니다. 예를 들어, 다음과 같은 방법들을 사용할 수 있습니다: sanitize_text_field() 등의 함수들입니다.