WordPress 플러그인 개발 입문 가이드: 제0단계에서 첫 번째 기능 확장을 만들어보세요

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

준비 작업 및 환경 구축

코드를 작성하기 시작하기 전에 적합한 개발 환경을 준비해야 합니다. 여기에는 로컬에 설치된 WordPress와 코드 편집기가 포함됩니다. XAMPP, Local by Flywheel 또는 Docker를 사용하여 로컬 서버 환경을 설정하는 것을 추천합니다. WordPress가 최신 버전인지 확인하여 최신 API와 보안 기능을 사용할 수 있도록 하십시오.

WordPress 플러그인의 기본 구조에 대해 알아야 합니다. 가장 간단한 플러그인이라도 적어도 하나의 메인 파일이 필요하며, 이 파일은 특정 파일 헤더 주석을 포함하는 PHP 파일입니다. 이 파일의 이름은 보통 `plugin.php`입니다. your-plugin-name.php이 파일은 WordPress에 이것이 플러그인임을 알리며, 플러그인의 이름, 설명, 버전, 저자 등의 정보를 제공합니다.

코드 편집기에서 플러그인 프로젝트를 위한 새 폴더를 만드세요. 예를 들어, `my-plugins`와 같은 이름으로 폴더를 생성할 수 있습니다. my-first-plugin이 폴더 내에 주 PHP 파일을 생성하세요.

추천 읽기 처음부터 시작하기: WordPress 플러그인 개발을 위한 최종 가이드와 실습 튜토리얼

첫 번째 플러그인 파일을 만드세요.

이제 플러그인의 메인 파일을 만들어 보겠습니다. 이 파일은 플러그인의 시작점이며, 상단의 주석 블록을 통해 WordPress에 자신의 존재를 알립니다.

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

플러그인의 헤더 정보를 작성하세요.

방금 생성한 PHP 파일에 표준적인 플러그인 파일 헤더를 추가해야 합니다. 예를 들어, “사이트 인사말”이라는 이름의 플러그인은 다음과 같이 시작할 수 있습니다:

<?php
/**
 * Plugin Name:       站点问候语
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       一个简单的插件,用于在网站前台显示自定义问候语。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

WordPress는 자동으로 웹사이트를 스캔합니다. wp-content/plugins 디렉터리 내의 모든 PHP 파일에서 특정 주석 정보를 읽어내어, 이를 백엔드의 플러그인 관리 페이지에 표시합니다. Text Domain 국제화를 위해 사용됩니다.Domain Path 언어 파일의 위치가 지정되었습니다.

핵심 기능을 구현하는 코드

헤더 정보 아래에서부터 플러그인의 기능 코드를 작성할 수 있습니다. 간단한 예를 들어보겠습니다: 웹사이트 푸터의 왼쪽 상단에 인사말을 출력하는 기능입니다. 테마 파일을 직접 수정하는 것을 피하기 위해, WordPress의 훅 시스템을 사용할 것입니다.

먼저, 인사말을 출력하는 함수를 만들어야 합니다. 그런 다음, 그 함수를 사용하여… add_action 이 함수는 해당 출력 결과를 WordPress의 특정 실행 작업(예: 특정 플러그인의 기능, 워드프레스 코어의 동작 등)에 연결합니다. wp_footer

추천 읽기 WordPress 플러그인 개발 완전 가이드: 초보자부터 실전 배포까지

// 定义一个函数来输出问候语
function my_first_plugin_display_greeting() {
    echo '<p style="position: fixed; bottom: 10px; left: 10px; background: #f1f1f1; padding: 10px; border-radius: 5px;">안녕하세요, 제 웹사이트에 오신 것을 환영합니다!</p>';
}

// 使用 add_action 钩子将函数挂载到 wp_footer 动作
add_action( 'wp_footer', 'my_first_plugin_display_greeting' );

위 코드를 완성한 후, 이 플러그인 폴더(예: `my-plugin-folder`)를 원하는 위치에 복사하세요. my-first-plugin전체 내용을 당신의 WordPress 설치 디렉터리로 복사하세요. wp-content/plugins/ 경로 중에 해당 파일이 있습니다. 그런 다음 WordPress 관리자에 로그인하고 “플러그인” 메뉴로 이동하면 “사이트 인사말”이라는 플러그인을 찾을 수 있습니다. 이 플러그인을 “활성화”하세요. 이제 웹사이트의 홈페이지를 방문하면 페이지 하단에 사용자가 정의한 인사말이 표시됩니다.

플러그인에 관리 옵션을 추가하세요.

기능이 완전한 플러그인은 일반적으로 관리자가 WordPress 백엔드에서 설정을 할 수 있는 설정 페이지를 필요로 합니다. 이에는 관리 메뉴를 생성하고 옵션 처리 로직을 구현하는 작업이 포함됩니다.

플러그인 설정 페이지를 생성하세요.

WordPress는 플러그인에 설정 페이지를 추가하기 위한 함수를 제공합니다. 일반적으로 우리는 이러한 함수들을 사용합니다. add_options_page 또는 add_menu_page 등의 함수를 사용하여 이 페이지를 백엔드 메뉴에 추가합니다. 아래 예제는 “설정” 메인 메뉴에 간단한 설정 하위 페이지를 추가하는 방법을 보여줍니다.

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

먼저, 설정 페이지의 HTML 콘텐츠를 렌더링하는 함수를 만듭시다.

// 渲染插件设置页面的函数
function my_first_plugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>사이트 인사말 설정</h1>
        <form method="post" action="/ko/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'my_first_plugin_settings_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="ko"/></form>
    </div>
    &lt;?php
}

그런 다음, 사용하세요. add_action 후크는… admin_menu ‘단계별 등록’ 페이지입니다.

// 将设置页面添加到后台菜单
function my_first_plugin_add_admin_menu() {
    add_options_page(
        '问候语设置',          // 页面标题
        '站点问候语',          // 菜单标题
        'manage_options',      // 权限要求
        'my-first-plugin',     // 菜单别名
        'my_first_plugin_settings_page' // 渲染函数
    );
}
add_action( 'admin_menu', 'my_first_plugin_add_admin_menu' );

등록 설정 필드 및 데이터 저장

단순히 페이지만으로는 충분하지 않습니다. 우리는 구체적인 설정 필드(예: 입력란, 선택란)를 정의하고 데이터 저장을 처리해야 합니다. 이를 위해서는 WordPress 설정 API를 사용해야 합니다. register_settingadd_settings_section 그리고 add_settings_field 등의 함수들입니다.

추천 읽기 제로에서 원까지: WordPress 플러그인 개발을 위한 권위 있는 가이드와 실습 튜토리얼

다음 코드는 사용자가 인사말 내용을 자유롭게 설정할 수 있도록 설정 그룹과 텍스트 필드를 등록합니다.

// 初始化插件的设置
function my_first_plugin_settings_init() {
    // 注册一个设置,将其保存到 `options` 表的 `my_first_plugin_greeting_text` 字段中
    register_setting( 'my_first_plugin_settings_group', 'my_first_plugin_greeting_text' );

// 在页面中添加一个设置区域
    add_settings_section(
        'my_first_plugin_section',
        '自定义问候语',
        null,
        'my-first-plugin'
    );

// 在设置区域中添加一个文本字段
    add_settings_field(
        'my_first_plugin_field',
        '问候语文本',
        'my_first_plugin_field_render',
        'my-first-plugin',
        'my_first_plugin_section'
    );
}
add_action( 'admin_init', 'my_first_plugin_settings_init' );

// 渲染文本输入框的函数
function my_first_plugin_field_render() {
    $option = get_option( 'my_first_plugin_greeting_text', '你好,欢迎来到我的网站!' );
    echo '<input type="text" name="my_first_plugin_greeting_text" value="' . esc_attr( $option ) . '" style="width: 300px;" />';
}

마지막으로, 이전에 인사말을 출력하던 함수를 수정하여 데이터베이스에서 사용자가 저장한 설정을 읽어올 수 있도록 해야 합니다.

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.
함수 my_first_plugin_display_greeting() {
    $greeting_text = get_option( 'my_first_plugin_greeting_text', '안녕하세요, 제 웹사이트에 오신 것을 환영합니다!' );
    echo '<p style="position: fixed; bottom: 10px; left: 10px; background: #f1f1f1; padding: 10px; border-radius: 5px;">'`. esc_html($greeting_text).`'</p>';
}

플러그인 보안 및 모범 사례

플러그인을 개발할 때 보안은 가장 우선적으로 고려해야 할 요소입니다. 안전하지 않은 코드는 웹사이트가 공격을 받을 수 있게 만들 수 있습니다. 다음은 몇 가지 핵심적인 보안 지침입니다.

데이터 검증 및 정리 (Data Validation and Cleaning)

언제든지, 사용자가 입력한 데이터(예: $_POST, $_GET)나 데이터베이스에서 가져온 데이터는 신뢰할 수 없는 것으로 간주해야 합니다. 이 데이터를 브라우저에 출력하거나 데이터베이스에 저장하기 전에 반드시 검증하고 정제해야 합니다.

HTML 페이지에 출력되는 콘텐츠에 대해서는… esc_html()esc_attr() 또는 wp_kses_post() 등의 함수를 사용하여 문자를 이스케이프 처리함으로써 크로스사이트 스크립팅 공격(XSS)을 방지할 수 있습니다.
데이터베이스 쿼리에 사용되는 변수의 경우, 프리컴파일된 스테이트먼트(precompiled statements)나 그와 유사한 방법을 사용하는 것이 좋습니다. $wpdb->prepare() 이런 방법입니다.

우리 예제에서 설정을 저장할 때, WordPress의… register_setting 함수는 자동으로 기본적인 정리 작업을 수행합니다. 출력할 때는 그 결과를 사용했습니다. esc_html() 인사말 텍스트 내의 HTML 태그가 안전하게 일반 텍스트로 변환되도록 해야 합니다.

권한 확인 без CE 사용

관리 페이지에서 제출된 폼을 처리할 때는 요청의 유효성을 반드시 검증해야 합니다. 여기에는 사용자 권한을 확인하고 무작위 숫자를 검증하는 작업이 포함됩니다.

설정 페이지의 양식에서,settings_fields() 이 함수에는 이미 CE(Consumer Electronics) 인증이 자동으로 포함되어 있습니다. 하지만 사용자 정의 AJAX 처리 함수나 비표준 양식을 만든 경우에는 수동으로 인증을 수행해야 합니다. 이때 일반적으로 다음과 같은 방법들이 사용됩니다: current_user_can() 권한을 확인하고 사용하세요. check_admin_referer() 또는 wp_verify_nonce() 임의의 숫자를 검증합니다.

예를 들어, 사용자 정의된 제출 처리 함수에서:

function my_plugin_handle_form_submit() {
    // 检查权限
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( '权限不足' );
    }
    // 验证随机数
    if ( ! isset( $_POST['my_nonce_field'] ) || ! wp_verify_nonce( $_POST['my_nonce_field'], 'my_action' ) ) {
        wp_die( '安全校验失败' );
    }
    // ... 处理安全的数据 ...
}

요약

이 가이드를 통해 당신은 간단한 PHP 파일에서부터 백엔드 관리 기능을 갖춘 WordPress 플러그인까지의 전체 개발 과정을 완료했습니다. 플러그인의 기본 구조, 액션 후크를 사용하여 기능을 추가하는 방법, WordPress 설정 API를 활용하여 구성 가능한 옵션 페이지를 만드는 방법, 그리고 매우 중요한 보안 관련 사항들을 배웠습니다. 우수한 플러그인은 단순히 강력한 기능을 갖추는 것뿐만 아니라, 코드가 명확하고 안전하며 WordPress의 코딩 표준을 준수해야 한다는 점을 기억하세요. 이 작은 플러그인을 시작점으로, 당신은 쇼트코드(shortcodes), 유틸리티 도구들, 사용자 정의 글 유형 등 더 고급된 기능들을 탐구하며 점차 더 복잡한 확장 기능들을 구축해 나갈 수 있을 것입니다.

자주 묻는 질문

플러그인에 다국어 지원을 추가하는 방법은 무엇인가요?

플러그인에 국제화(i18n) 지원을 추가하는 것은 주로 텍스트 필드와 번역 함수의 사용과 관련이 있습니다. 먼저, 플러그인 파일의 헤더 부분에 국제화 설정이 올바르게 되어 있는지 확인해야 합니다. Text Domain 그리고 Domain Path코드 내에서 모든 번역이 필요한 문자열은 < 로 표시되어 있습니다. __() 또는 _e() 해당 함수들을 래핑(wrapping)합니다. 그런 다음 Poedit와 같은 도구를 사용하여 POT 템플릿 파일을 생성하고, 이에 맞는 .mo 및 .po 번역 파일을 만들어 플러그인에서 지정한 언어 디렉터리에 저장합니다.

예시:echo esc_html( __( ‘Hello, World!’, ‘my-first-plugin’ ) );사용자가 해당 언어로 전환하면, WordPress는 자동으로 해당 언어의 번역 파일을 로드합니다.

플러그인 내의 함수명은 다른 플러그인과의 충돌을 어떻게 피할 수 있나요?

함수 이름의 충돌을 피하는 가장 좋은 방법은 네임스페이스를 사용하는 것입니다(PHP 5.3 이상). 또는 모든 함수, 클래스, 상수에 고유한 접두사를 추가하는 것도 좋은 방법입니다. 접두사는 충분히 독특해야 하며, 일반적으로 플러그인의 이름을 약어로 사용하거나 전체 이름을 사용합니다.

예를 들어, 다음과 같이 사용하지 마세요: display_greeting()대신 다음과 같이 사용해야 합니다: my_first_plugin_display_greeting()만약 PHP 네임스페이스를 사용한다면, 파일의 맨 위에서 네임스페이스를 선언할 수 있습니다. namespace MyFirstPlugin;그런 다음 내부에서는 간단한 함수명을 사용하고, 외부에서 호출할 때는 네임스페이스를 통해 함수를 찾아냅니다.

개발이 완료된 후 플러그인을 공식 디렉터리에 어떻게 게시하나요?

WordPress.org 공식 디렉토리에 플러그인을 게시하려면 먼저 WordPress.org에서 계정을 생성하고 플러그인을 제출해야 합니다. 절차는 다음과 같습니다. GPL 라이선스를 준수하는 코드를 확인하고 PHPCS 표준을 통해 검사하며, readme.txt 파일을 특정 형식으로 준비하고 명확한 스크린샷과 문서를 제공해야 합니다. 제출 후 검토자가 코드를 검토하며, 승인되면 출시됩니다. 출시 후 사용자는 WordPress 관리자에서 직접 플러그인을 검색하고 설치할 수 있습니다.

플러그인은 어떻게 이전 버전의 WordPress와 호환되도록 만들어질 수 있을까요?

후방 호환성을 유지하기 위해 개발 과정에서 현재 사용 중인 WordPress 버전을 확인하고, 새 버전의 API에 의존하는 코드는 조건문을 사용하여 처리해야 합니다. 또한, 더 이상 사용되지 않는 함수는 사용을 피해야 하며, 반드시 사용해야 할 경우에는 대체 방안을 준비해 두어야 합니다. 플러그인의 readme.txt 파일에는 플러그인이 필요로 하는 최소 WordPress 버전을 명확히 명시하고 사용자에게 명확한 안내를 제공해야 합니다. 플러그인이 이전 버전의 WordPress 환경에서도 정상적으로 작동하는지 정기적으로 테스트하는 것이 호환성을 유지하는 데 매우 중요합니다.