WordPress 플러그인 개발 실전 가이드: 제로에서 시작하여 첫 번째 기능 플러그인을 구축하는 방법

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

WordPress의 플러그인 시스템은 그 강력한 확장성의 핵심입니다. 플러그인을 통해 개발자들은 간단한 연락처 양식부터 복잡한 전자상거래 기능에 이르기까지 웹사이트에 다양한 기능을 추가할 수 있습니다. 이 글에서는 완전한 기능을 갖춘 플러그인을 구축하는 전 과정을 안내하며, 그 핵심 구조, 훅(hook) 메커니즘, 보안성, 그리고 모범 사례에 대해 자세히 설명합니다. 마지막에는 직접 사용하거나 공개할 수 있는 플러그인을 완성하게 될 것입니다.

개발 환경 및 기본 준비 사항

첫 번째 코드 줄을 작성하기 전에, 안정적이고 효율적인 개발 환경을 갖추는 것이 매우 중요합니다. 이는 논리 구축에 집중할 수 있게 해줄 뿐만 아니라, 일반적으로 발생하는 오류들을 효과적으로 방지하는 데에도 도움이 됩니다.

로컬 개발 환경 설정

로컬 서버 환경 키트(예: XAMPP, MAMP, 또는 더 전문적인 Local by Flywheel)를 사용하는 것을 권장합니다. 사용하는 PHP 버전(7.4 이상을 권장)이 배포할 WordPress 환경과 호환되는지 확인하고, 디버깅 모드를 활성화해야 합니다. WordPress의 설정에서도 필요한 옵션들을 적절히 조정해야 합니다.wp-config.php파일 내에서 설정을 변경하세요.WP_DEBUG그것은true이 기능을 통해 개발 단계에서 모든 오류와 경고가 표시되므로 문제를 신속하게 찾아낼 수 있습니다.

추천 읽기 WordPress 플러그인 개발 입문 가이드: 제로 베이스에서 전문 기능 모듈 구축까지

플러그인 파일 구조 계획

표준 플러그인은 적어도 하나의 메인 파일을 필요로 합니다. 일반적인 관행은 플러그인을 위한 전용 폴더를 만들고, 그 폴더의 이름을 플러그인의 핵심 기능에 따라 지정하는 것입니다. 예를 들어,my-first-plugin해당 폴더 내에서 주 파일은 보통 폴더와 이름이 같으며, 파일 확장자는 ‘.txt’ 또는 ‘.doc’와 같습니다..phpmy-first-plugin.php명확한 구조는 이후에 JavaScript, CSS, 언어 패키지 또는 클래스 파일을 추가하는 데 도움이 됩니다.

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

플러그인의 메인 파일과 기본 헤더 정보를 생성합니다.

플러그인의 “입구”와 신원 인증은 모두 주 파일 상단에 있는 헤더 정보에 의존합니다. 이 정보가 WordPress가 플러그인을 인식하고 로드하는 데 핵심적인 역할을 합니다.

표준 플러그인 헤더를 작성하세요.

주 PHP 파일의 시작 부분에는 플러그인에 대한 정보를 제공하기 위해 특정한 PHP 주석 블록을 사용해야 합니다. 이 정보는 WordPress 관리자의 “플러그인” 페이지에 표시됩니다.

<?php
/**
 * Plugin Name:       我的第一个功能插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个实战指南中创建的示例插件,用于演示核心开发流程。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

그중에서,Plugin Name그리고Text Domain이 항목은 필수 입력 사항이며, 나머지 항목들은 선택 사항입니다. 텍스트 입력란이 제공됩니다.Text Domain국제화 지원을 위해 사용됩니다.

직접적인 파일 접근을 방지하기

플러그인 코드의 보안을 위해, URL을 통해 주 파일에 직접 접근하는 것을 방지해야 합니다. 이러한 직접적인 접근은 정보 유출이나 오류를 초래할 수 있습니다. 따라서 헤더 정보 다음, 다른 모든 코드 앞에 직접 접근을 검사하는 메커니즘을 추가해야 합니다.

추천 읽기 WooCommerce 플러그인 커스텀 개발 가이드: 나만의 온라인 스토어 만들기

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

상수ABSPATH이 경로는 WordPress의 루트 디렉터리에 대한 절대 경로이며, WordPress가 실행될 때 자동으로 설정됩니다. 이 조건을 통해 해당 파일이 WordPress 환경에서만 실행되도록 보장됩니다.

핵심 기능을 구현하고 WordPress 훅을 사용하기

WordPress는 액션 훅(Action Hooks)과 필터 훅(Filter Hooks)이라는 두 가지 강력한 메커니즘을 제공하여, 사용자의 코드가 특정 시점에 핵심 프로세스에 개입하거나 데이터를 수정할 수 있도록 합니다. 이러한 메커니즘을 이해하고 효과적으로 활용하는 것은 플러그인 개발의 핵심입니다.

액션 훅을 사용하여 기능을 추가합니다.

액션 훅(Action Hook)을 사용하면 특정 이벤트가 발생할 때 사용자 정의 코드를 실행할 수 있습니다. 예를 들어, 글의 내용 하단에 자동으로 저작권 정보를 추가하는 기능을 만들고 싶다면 이를 구현하기 위해 액션 훅을 활용할 수 있습니다.the_content필터(본질적으로는 필터 훅이지만, 액션 훅과 유사하게 사용됨)와wp_enqueue_scripts액션 후크를 사용하여 리소스를 로드합니다.

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

먼저, 우리는 함수를 하나 작성합니다.mfp_add_copyright_notice그리고 그것을 마운트합니다.the_content훅에 걸려 있어요.

// 在文章内容后添加版权声明
function mfp_add_copyright_notice( $content ) {
	if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
		$copyright_text = '<p><em>이 글의 저작권은 본 사이트에 있습니다. 재발행할 경우 출처를 명시해 주시기 바랍니다.</em></p>';
		$content .= $copyright_text;
	}
	return $content;
}
add_filter( 'the_content', 'mfp_add_copyright_notice' );

조건 판단을 통해 저작권 정보가 오직 프론트엔드의 단일 기사 주循环에서만 표시되도록 하여, 페이지, 요약문, 또는 백엔드에는 영향을 미치지 않도록 합니다.

필터 후크를 사용하여 데이터를 수정합니다.

필터 후크(filter hook)는 그에 전달된 데이터를 수정하는 데 사용됩니다. 예를 들어, 웹사이트 제목의 특정 부분을 변경하고 싶다면 해당 기능을 수행하는 함수를 만들어 필터 후크에 추가할 수 있습니다.wp_title또는 더 현대적인document_title_parts필터.

추천 읽기 WordPress 플러그인 개발 전 과정 상세 설명: 초보자부터 전문가까지의 실용적인 가이드

// 修改网站标题后缀
function mfp_modify_title_suffix( $title ) {
	if ( is_home() ) {
		$title['suffix'] = ' | 我的精彩博客';
	}
	return $title;
}
add_filter( 'document_title_parts', 'mfp_modify_title_suffix' );

스크립트와 스타일을 안전하게 도입하는 방법

플러그인에 프론트엔드 스타일이나 인터랙션 기능을 추가하려면, WordPress에서 권장하는 방법을 사용해야 합니다.wp_enqueue_style()그리고wp_enqueue_script()함수를 사용하여…wp_enqueue_scripts훅 호출(Hook Call).

// 注册并排队插件的前端样式
function mfp_enqueue_frontend_assets() {
	// 获取插件目录的URL
	$plugin_url = plugin_dir_url( __FILE__ );

// 排队一个CSS文件
	wp_enqueue_style(
		'mfp-frontend-style',
		$plugin_url . 'assets/css/frontend.css',
		array(),
		'1.0.0'
	);

// 排队一个JS文件,并依赖jQuery
	wp_enqueue_script(
		'mfp-frontend-script',
		$plugin_url . 'assets/js/frontend.js',
		array( 'jquery' ),
		'1.0.0',
		true // 在页脚加载
	);
}
add_action( 'wp_enqueue_scripts', 'mfp_enqueue_frontend_assets' );

관리 페이지를 생성하고 설정 옵션을 설정합니다.

많은 플러그인들이 사용자에게 설정 옵션을 제공해야 합니다. WordPress는 설정 API를 제공하여, 관리 메뉴와 옵션 페이지를 안전하고 표준화된 방식으로 생성할 수 있도록 해줍니다.

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

관리 메뉴를 추가하세요.

먼저, 사용하기 위해…add_action( ‘admin_menu’, … )새로운 관리 메뉴 항목이나 하위 메뉴 항목을 등록하려면 아래의 함수를 사용하세요.mfp_create_admin_menu“설정” 메인 메뉴에 하위 메뉴 페이지가 추가될 것입니다.

// 创建插件管理菜单
function mfp_create_admin_menu() {
	add_options_page(
		‘我的插件设置’, // 页面标题
		‘我的插件’,     // 菜单标题
		‘manage_options’, // 权限要求
		‘mfp-settings’,   // 菜单slug
		‘mfp_settings_page_html’ // 用于输出页面内容的回调函数
	);
}
add_action( ‘admin_menu’, ‘mfp_create_admin_menu’ );

설정 페이지와 필드 설정하기

다음으로, 콜백 함수를 정의해야 합니다.mfp_settings_page_html페이지 콘텐츠를 렌더링하고, 설정 API를 사용하여 설정 그룹 하나, 옵션 하나, 그리고 구체적인 필드들을 등록하세요.

// 设置页面的HTML输出
function mfp_settings_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
			// 输出设置字段、非ce等
			settings_fields( ‘mfp_options_group’ );
			do_settings_sections( ‘mfp-settings’ );
			submit_button( ‘保存设置’ );
			?>
		<input type="hidden" name="trp-form-language" value="ko"/></form>
	</div>
	‘mfp_field_copyright_text’ )
	);
}
add_action( ‘admin_init’, ‘mfp_settings_init’ );

// 渲染版权文本文档字段
function mfp_field_copyright_text_html() {
	$options = get_option( ‘mfp_options’ );
	$value = $options[‘copyright_text’] ?? ‘默认版权文本’; // PHP 7.0+ 空合并运算符
	?&gt;
	<input type="“text”"
		   id="“mfp_field_copyright_text”"
		   name="“mfp_options[copyright_text]”"
		   value="“NO NUMERIC NOISE KEY" 1000”
		 class="“regular-text”">
	&lt;?php
}

이제, 당신은 이전에…mfp_add_copyright_notice함수 내에서 사용하기get_option( ‘mfp_options’ )[‘copyright_text’]사용자가 설정한 값을 동적으로 가져와 플러그인의 기능을 구성할 수 있도록 합니다.

요약

이 문서에서는 WordPress 기능 플러그인을 처음부터 개발하는 전체 과정을 상세히 설명합니다. 개발 환경을 설정하고 표준 헤더 정보가 포함된 메인 파일을 생성하는 것부터 시작하여, 보안 보호의 중요성을 강조합니다. 그 후, WordPress 플러그인 개발의 핵심인 ‘후크(hook) 메커니즘’에 대해 자세히 알아보며, 액션 후크(Action Hook)를 사용하여 코드를 실행하고 필터 후크(Filter Hook)를 사용하여 데이터를 수정하는 방법을 설명합니다. 또한, 전면 자원을 안전하게 로드하는 방법도 시연합니다. 마지막으로, WordPress 설정 API를 활용하여 사용자가 플러그인 기능을 자유롭게 커스터마이징할 수 있는 전문적인 수준의 관리 설정 페이지를 만들었습니다.

전체 개발 과정은 WordPress의 코딩 표준과 모범 사례를 준수했습니다. 여기에는 고유한 함수 접두사의 사용, 데이터 검증 및 이스케이피 처리, 그리고 국제화(i18n) 지원을 위한 기반 구조의 제공이 포함됩니다. 이러한 기초 지식을 숙지한 후에는 다양한 훅(hook)을 조합하거나, 사용자 정의 데이터베이스 테이블을 생성하거나, 작은 도구나 단축 코드(shortcode)를 개발하는 등의 방법으로 플러그인의 기능을 무한히 확장할 수 있습니다.

자주 묻는 질문

플러그인 함수와 클래스에 적합한 접두사를 선택하는 방법은 무엇인가요?

모든 플러그인 내의 전역 함수, 클래스, 변수, 상수에는 다른 플러그인이나 테마와의 이름 충돌을 방지하기 위해 고유한 접두사를 사용해야 합니다. 접두사는 일반적으로 플러그인의 약어나 줄임말로 구성됩니다. 예를 들어, 플러그인의 이름이 “My First Plugin”인 경우, 접두사로 “MfP_”를 사용할 수 있습니다.mfp_또는myfirstplugin_일관성을 유지하는 것이 매우 중요합니다.

왜 반드시 `wp_enqueue_script`를 사용하여 스크립트를 추가해야 할까요?

활용wp_enqueue_script()그리고wp_enqueue_style()이 방법은 WordPress 공식에서 추천하는 방법입니다. 이 방법을 사용하면 스크립트 의존성(JQuery 등)을 올바르게 처리할 수 있으며, 동일한 스크립트가 중복으로 로드되는 것을 방지할 수 있습니다. 또한 다른 플러그인이나 테마가 해당 스크립트를 사용할 수 있도록 허용합니다.wp_deregister_script()스크립트를 안전하게 제거하거나 교체하려면 바로 사용하세요.태그를 삽입하면 이러한 관리상의 이점을 누릴 수 없으며, 충돌이 발생할 수도 있습니다.

플러그인을 개발할 때 고려해야 할 중요한 보안 지침은 무엇인가요?

가장 중요한 원칙은 이것입니다: 사용자가 입력한 내용을 절대 신뢰하지 마십시오. 모든 사용자 입력 데이터에 대해…$_GET$_POST$_REQUEST또는 데이터베이스에서 가져온 데이터를 검증, 정리, 엔티티 코딩하는 과정을 거친 후 HTML로 출력합니다.esc_html()esc_attr()출력은 URL에 사용됩니다.esc_url()SQL 쿼리에서는 반드시 해당 기능을 사용해야 합니다.$wpdb->prepare()파라미터화된 쿼리를 사용하여 SQL 인젝션을 방지하세요. 또한, 해당 기능을 적극적으로 활용하십시오.current_user_can()사용자 권한을 확인하세요.

내 플러그인에 국제화 지원을 추가하려면 어떻게 해야 하나요?

먼저, 플러그인의 헤더 정보에서 올바르게 설정해야 합니다.Text Domain그리고Domain Path그런 다음, 코드 내에서 번역이 필요한 모든 문자열이 있는 위치에 해당 번역 내용을 사용하십시오.()Please provide the text you would like to have translated._e()“进行回显翻译”의 번역은 “Perform echo translation”입니다.( ‘Hello World’, ‘my-first-plugin’ )마지막으로, Poedit와 같은 도구를 사용하여 코드를 스캔하고 결과를 생성하세요..pot템플릿 파일을 준비하고, 다양한 언어에 맞게 해당 파일들을 생성하세요..po그리고.mo변역된 파일을 해당 위치에 저장하세요./languages카테고리 아래에.