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

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

WordPress 플러그인 개발 환경 준비

코드를 작성하기 시작하기 전에 적절한 개발 환경을 갖추는 것이 매우 중요합니다. 이는 효율적인 작업을 가능하게 할 뿐만 아니라, 실제 프로덕션 환경을 시뮬레이션하여 로컬 환경과 온라인 환경 간의 불일치를 방지하는 데에도 도움이 됩니다. 일반적인 개발 환경에는 로컬 서버 환경, 코드 편집기, 디버깅 도구가 포함되어야 합니다.

먼저, WordPress를 실행할 수 있는 로컬 서버 환경이 필요합니다. Laragon, XAMPP, Local by Flywheel과 같은 통합 개발 환경 패키지를 사용하는 것을 추천합니다. 이러한 도구들을 사용하면 Apache/Nginx, PHP, MySQL을 한 번에 설치할 수 있어 복잡한 설정 과정을 거치지 않아도 됩니다. 사용 중인 PHP 버전이 현재 주류 WordPress 버전과 호환되는지 확인하십시오. 일반적으로 PHP 7.4 이상을 사용하는 것이 권장됩니다. 또한, WordPress 관리자 페이지의 “도구” -> “사이트 건강 상태”에서 플러그인 개발에 영향을 줄 수 있는 중요한 문제가 없는지 확인하십시오.

둘째, 강력한 코드 편집기를 선택하는 것이 중요합니다. Visual Studio Code는 현재 매우 인기 있는 선택지로, 가볍고 무료이며 PHP Intelephense(코드 자동 완성 기능), WordPress Snippet(코드 예제)과 같은 다양한 확장 기능을 제공합니다. 또 다른 유명한 선택지는 PhpStorm으로, WordPress 개발을 위한 더 깊은 수준의 통합 기능을 제공하지만 유료 소프트웨어입니다.

추천 읽기 제로에서 원까지: WordPress 플러그인 개발을 위한 완벽한 가이드와 모범 사례

마지막으로, 디버깅 모드를 활성화하는 것은 개발 과정에서 필수적인 단계입니다. WordPress의 루트 디렉터리 내 파일들을 수정함으로써…wp-config.php파일에 대해서는 상세한 오류 보고 기능을 활성화할 수 있으며, 이는 코드 내의 문제를 발견하고 수정하는 데 매우 중요합니다. 파일 내에서 정의된 내용을 찾아보세요.WP_DEBUG상수가 사용되는 곳에, 아래 코드를 추가하세요:

UltaHost의 WordPress 호스팅 서비스
30일 환불 보장, 무제한 대역폭 및 데이터베이스 이용, 무료 DDoS 보호 서비스 제공. 3년 구매 시 50% 용량이 할인됩니다.
// 启用 WordPress 调试模式
define( 'WP_DEBUG', true );
// 将错误记录到 /wp-content/debug.log 文件
define( 'WP_DEBUG_LOG', true );
// 在页面上显示错误(开发环境推荐,生产环境必须关闭)
define( 'WP_DEBUG_DISPLAY', true );

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

어떤 WordPress 플러그인은 단 하나의 파일로 구성될 수 있을 정도로 간단할 수 있습니다. 모든 플러그인은 반드시 특정 위치에 저장되어야 합니다./wp-content/plugins/디렉터리 내에서 각 플러그인은 자신만의 하위 디렉터리를 가질 수 있으며, 이는 더 복잡한 코드 구조를 체계적으로 관리하는 데 도움이 됩니다.

플러그인 헤더 주석

모든 플러그인의 메인 파일은 표준화된 PHP 헤더 주석으로 시작해야 합니다. 이는 WordPress가 플러그인 정보를 인식하는 방식입니다. 새 파일을 만들고 이름을 다음과 같이 지정하세요: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 관리자 패널의 “플러그인” 페이지에 표시되는 플러그인에 대한 모든 메타정보를 설명합니다. 여기에는…Text Domain그리고Domain Path플러그인의 국제화(i18n) 준비를 위해 사용됩니다.

간단한 기능을 구현하기

이제 이 플러그인에 간단한 기능을 추가해 보겠습니다: 글 내용의 끝에 자동으로 사용자 정의 텍스트를 한 줄 추가하는 기능입니다. 이를 위해 WordPress의 기능을 활용할 것입니다.the_content필터 후크입니다. 방금 만드신 파일에 포함되어 있습니다.my-first-plugin.php파일의 헤더 주석 아래에 다음 함수를 추가하세요:

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

// 在文章内容末尾添加自定义文本
function my_first_plugin_add_footer_text( $content ) {
    // 确保只在主循环的单篇文章页面执行
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $footer_text = '<p><em>읽어주셔서 감사합니다! 이 글은 “제 첫 번째 플러그인'에서 제공됩니다.</em></p>';
        $content .= $footer_text;
    }
    return $content;
}
add_filter( 'the_content', 'my_first_plugin_add_footer_text' );

파일을 저장한 후, WordPress 관리자에 로그인하고 “플러그인” 페이지로 이동하세요. 거기에서 “My First Plugin”이라는 이름의 플러그인을 찾을 수 있을 것입니다. 이 플러그인을 활성화한 다음 블로그 글을 하나 확인해 보세요. 글 내용의 하단에 우리가 설정한 텍스트가 성공적으로 추가된 것을 확인할 수 있습니다.

WordPress 코어 API를 사용하기

심화 개발을 진행할 때는 WordPress가 제공하는 다양한 API와 자주 상호작용하게 됩니다. 그 중에서도 가장 핵심적인 것이 바로 “후크(Hooks)” 시스템인데, 이 시스템은 “액션(Action)”과 “필터(Filter)”를 포함합니다.

“이해하는 동작 훅(Understanding Action Hooks)”이라는 용어는 프로그래밍이나 소프트웨어 개발의 맥락에서 사용됩니다. 동작 훅(Action Hook)이란 프로그램이 특정 이벤트가 발생했을 때 자동으로 실행되는 코드 블록을 의미하며, 이를 통해 프로그램의 흐름을 제어하거나 추가 기능을 추가할

액션 훅(Action Hook)을 사용하면 특정 시점에 사용자 정의 코드를 실행할 수 있습니다. 예를 들어, 기사가 게시되었을 때 이메일로 알림을 보내고 싶은 경우가 있습니다. 이럴 때 액션 훅을 활용하면 됩니다.publish_post동작. 아래 예시는 글을 게시할 때 오류 로그에 정보를 기록하는 기능을 만드는 방법을 보여줍니다:

호스팅닷컴 공유 호스팅
AMD EPYC CPU, NVMe SSD 스토리지 및 LiteSpeed를 통한 고성능, 연중무휴 24시간 전문가 사내 지원, SSL, 무차별 공격, 멀웨어 및 DDoS 보호를 포함한 고급 보안 조치, 최대 73%의 비용 절감.
// 定义文章发布时执行的动作函数
function my_first_plugin_log_post_published( $post_id, $post ) {
    // 避免无限循环和非文章类型
    if ( wp_is_post_revision( $post_id ) || $post->post_type != ‘post’ ) {
        return;
    }
    // 记录日志
    error_log( “文章 ID {$post_id} 已发布,标题为:{$post->post_title}” );
}
// 将函数挂载到 publish_post 动作钩子上
add_action( ‘publish_post’, ‘my_first_plugin_log_post_published’, 10, 2 );

functionadd_action세 번째 매개변수는 우선순위입니다(기본값은 10이며, 숫자가 작을수록 우선순위가 높아집니다). 네 번째 매개변수는 함수가 받는 매개변수의 개수입니다.

필터 후크를 이해하기

필터 후크는 데이터를 수정하는 데 사용됩니다. “첫 번째 플러그인 파일 만들기” 섹션에서 우리가 사용한 것이 바로 이 필터 후크였습니다.the_content그것은 단순히 필터 후크(filter hook)입니다. 이 후크는 원본 콘텐츠를 받아들여 수정한 후 다시 반환할 수 있게 해줍니다. 또 다른 흔한 예로는 기사 요약의 길이를 수정하는 경우가 있습니다.

// 修改摘要的默认字数
function my_first_plugin_custom_excerpt_length( $length ) {
    return 30; // 将摘要字数改为30字
}
add_filter( ‘excerpt_length’, ‘my_first_plugin_custom_excerpt_length’ );

입구 메뉴를 추가하세요.

사용자와 상호작용하기 위해, 우리는 보통 WordPress의 관리자 측면바에 메뉴 페이지를 추가해야 합니다. 이를 위해서는 다음과 같은 방법을 사용할 수 있습니다:add_menu_page함수 구현: 다음 코드는 플러그인에 최상위 설정 페이지를 추가합니다.

추천 읽기 WordPress 플러그인 개발 전략: 제로에서 시작하여 고품질의 WordPress 확장 기능을 구축하는 방법

// 创建插件管理菜单
function my_first_plugin_add_admin_menu() {
    add_menu_page(
        ‘我的第一个插件设置’, // 页面标题
        ‘我的插件’,           // 菜单标题
        ‘manage_options’,     // 所需权限
        ‘my-first-plugin’,    // 菜单slug
        ‘my_first_plugin_settings_page’, // 回调函数,用于输出页面内容
        ‘dashicons-admin-plugins’, // 图标(可选)
        100                    // 菜单位置(可选)
    );
}
add_action( ‘admin_menu’, ‘my_first_plugin_add_admin_menu’ );

// 设置页面的回调函数
function my_first_plugin_settings_page() {
    ?&gt;
    <div class="“wrap”">
        <h1>제 첫 번째 플러그인 설정입니다.</h1>
        <p>여기는 플러그인의 설정 페이지입니다. 향후에는 이곳에 양식과 옵션을 추가할 수 있을 것입니다.</p>
    </div>
    &lt;?php
}

플러그인 보안 및 모범 사례

다른 사람들이 사용할 플러그인을 개발할 때는 보안성과 코드 품질을 절대 간과해서는 안 됩니다. 모범 사례를 따르면 웹사이트를 공격으로부터 보호할 수 있으며, 플러그인의 호환성과 유지보수성도 보장할 수 있습니다.

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

절대로 사용자가 입력한 데이터나 데이터베이스에서 가져온 데이터를 그대로 신뢰해서는 안 됩니다. 브라우저에 출력하기 전에는 반드시 데이터를 에스케이프 처리해야 하며, 데이터베이스에 저장하기 전에는 데이터의 유효성을 검증하고 오류를 제거해야 합니다. WordPress에는 이러한 작업을 도와주는 다양한 보조 함수들이 제공됩니다.

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.
  • 에스케이프 출력: 사용하세요.esc_html()esc_attr()esc_url()그리고wp_kses_post()등의 함수를 사용하여, 문맥에 따라 데이터를 이스케이프 처리합니다.
  • 입력 내용을 확인하세요: 사용하기.sanitize_text_field()sanitize_email()intval()등의 함수들이 사용자가 제출한 폼 데이터를 정리합니다.

예를 들어, 페이지에서 폼 데이터를 처리하는 방법을 설정할 때:

$user_input = $_POST[‘some_field’] ?? ‘’; // 使用空合并运算符提供默认值
$clean_input = sanitize_text_field( $user_input ); // 清理数据
update_option( ‘my_plugin_option’, $clean_input ); // 安全存储

비-CE(Non-CE) 방식과 권한 검사를 사용합니다.

표单 요청을 처리할 때(특히 admin-ajax.php나 admin-post.php에서 온 요청의 경우), 반드시 사용해야 합니다.wp_verify_nonce()요청의 유효성을 검증하여 크로스사이트 요청 위조(CSRF) 공격을 방지합니다. 동시에, 다음과 같은 방법을 사용합니다:current_user_can()현재 사용자가 해당 작업을 수행할 권한이 있는지 확인하십시오.

function my_first_plugin_handle_form_submit() {
    // 1. 检查nonce
    if ( ! isset( $_POST[‘my_nonce_field’] ) || ! wp_verify_nonce( $_POST[‘my_nonce_field’], ‘my_action’ ) ) {
        wp_die( ‘安全校验失败!’ );
    }
    // 2. 检查权限
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘权限不足!’ );
    }
    // 3. 安全地处理数据…
}

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

복잡한 플러그인의 경우, 객체 지향 프로그래밍(OOP)을 사용하여 코드를 구성하는 것이 좋습니다. 기능들을 클래스로 모듈화함으로써 코드의 가독성과 재사용성이 향상됩니다.

동시에, 플러그인을 처음부터 국제화에 대비하도록 준비해야 합니다. 이는 모든 사용자에게 표시되는 문자열이 WordPress의 번역 기능을 사용해야 한다는 것을 의미합니다.__()_e()포장을 진행합니다. 플러그인의 헤더 주석을 살펴보면, 우리가 이미 정의한 내용들이 있습니다.Text Domain코드에서는 다음과 같이 사용해야 합니다:

$message = __( ‘感谢阅读!本文由“我的第一个插件”为您呈现。’, ‘my-first-plugin’ );

그런 다음, Poedit와 같은 도구를 사용하여 생성할 수 있습니다..pot템플릿 파일은 번역자가 다양한 언어로 번역된 내용을 생성하는 데 사용됩니다..mo파일.

요약

이 가이드를 통해 여러분은 워드프레스 플러그인을 처음부터 만드는 과정을 완료하셨습니다. 개발 환경을 설정하는 방법, 표준 헤더 주석이 포함된 플러그인 파일을 작성하는 방법, 그리고 워드프레스의 강력한 액션(Action) 및 필터(Filter) 훅 시스템을 활용하여 기능을 추가하는 방법을 배웠습니다. 또한, 관리 메뉴를 안전하게 추가하는 방법, 데이터를 처리하는 방법에 대해서도 살펴보았으며, 보안성과 국제화의 중요성을 강조했습니다. 플러그인 개발은 지속적인 학습과 실습의 과정이며, 그 핵심은 워드프레스의 훅 시스템과 보안 규칙을 이해하는 데 있습니다. 이제 여러분은 사용자 정의 데이터베이스 테이블을 만들거나, 쇼트코드(Shortcode), 위젯(Widget), REST API 엔드포인트를 추가하는 등 더 복잡한 기능을 개발해보실 수 있으며, 점차 기능이 완성되고 코드가 건강한 상업용 플러그인을 구축해 나갈 수 있을 것입니다.

자주 묻는 질문

플러그인은 반드시 별도의 폴더에 저장되어야 합니까?

아니요, 플러그인은 단순히 독립적인 모듈로 존재할 수도 있습니다..php파일은 그냥 그대로 그곳에 두세요./wp-content/plugins/디렉터리 내에 있습니다. 하지만 여러 파일, 리소스(예: JS, CSS)를 포함하거나 번역이 필요한 플러그인의 경우, 모든 관련 파일을 별도의 폴더에 저장하는 것을 강력히 권장합니다. 이렇게 하면 프로젝트 구조가 더 명확해지고 관리가 용이해집니다.

내 플러그인 설정을 데이터베이스에 저장하려면 어떻게 해야 하나요?

WordPress는 매우 편리한 옵션 API를 제공합니다. 이를 사용할 수 있습니다.add_option()get_option()그리고update_option()이 함수들은 플러그인 설정을 추가, 조회, 업데이트하는 데 사용됩니다. 이러한 데이터는 WordPress의 안전한 저장 시스템에 보관됩니다.wp_options데이터베이스 테이블에 저장됩니다. 대량의 구조화된 데이터의 경우, 이를 배열이나 JSON 문자열로 직렬화한 후 저장하는 것을 고려할 수 있습니다.

제가 개발한 플러그인이 다른 플러그인들과 충돌할 수 있을까요?

그렇게 할 수 있습니다. 특히 플러그인이 일반적인 후크, 함수 이름 또는 클래스 이름을 사용할 경우에는 더욱 그러할 수 있습니다. 충돌을 방지하려면 모든 함수, 클래스 및 변수에 고유의 접두사(예: 플러그인 약어나 이름)를 추가하고, 플러그인 슬러그를 네임스페이스로 사용하며(PHP 5.3+에서는 실제 네임스페이스를 사용할 수 있습니다), 후크를 사용할 때 원하는 실행 순서를 보장하기 위해 적합한 우선 순위를 선택해야 합니다.

이 플러그인은 어떤 WordPress 버전과 호환되어야 하나요?

이것은 당신의 목표 사용자에 따라 달라집니다. 일반적으로는 현재의 주요 버전과 그 이전의 한두 버전과의 호환성을 추천합니다. 플러그인의 경우…readme.txt파일 내에서 처리가 완료되었습니다.Requires at least:이 필드는 WordPress의 최소 요구 버전을 명시하는 데 사용됩니다. 개발 과정에서는 새 버전에서만 제공되는 함수를 사용하거나, 새 버전의 기능을 활용하는 것을 피해야 합니다.function_exists()호환성을 판단하여 플러그인의 적용 범위를 확대합니다.