플러그인 개발 전 준비 작업
코딩을 시작하기 전에 적합한 개발 환경을 설정하고 WordPress 플러그인의 기본 구조를 이해해야 합니다. 이에는 서버 환경, 텍스트 편집기나 통합 개발 환경의 선택, 그리고 플러그인 파일 구조에 대한 명확한 이해가 포함됩니다.
개발 환경 설정
효율적인 로컬 개발 환경은 매우 중요합니다. PHP, MySQL 및 Apache/Nginx를 포함하는 로컬 서버를 신속하게 설정하려면 XAMPP, MAMP 또는 Local by Flywheel 등의 도구를 사용하는 것이 좋습니다. 이러한 도구는 생산 웹사이트에 영향을 미치지 않고 개발 및 디버깅을 수행할 수 있도록 온라인 환경을 시뮬레이션할 수 있습니다. 동시에 Visual Studio Code 또는 PhpStorm과 같은 강력한 코드 편집기를 선택하십시오. 이들은 PHP, HTML, JavaScript 및 CSS에 대한 우수한 구문 강조, 코드 완성 및 디버깅 지원을 제공합니다.
플러그인의 기본 구조를 이해하세요.
워드프레스 플러그인은 기본적으로 하나 이상의 파일로 구성되어 있습니다. /wp-content/plugins/ 카테고리 아래에 있는 PHP 파일들. 각 플러그인은 적어도 하나의 주 파일을 필요로 하며, 그 파일들은 일반적으로 고유의 이름을 가지고 있습니다, 예를 들면 my-first-plugin.php이 주 파일의 헤더에는 “플러그인 헤더 정보'라고 불리는 특정 주석이 포함되어 있으며, WordPress는 이 정보를 읽어서 백엔드 관리 인터페이스에서 당신의 플러그인을 인식하고 표시합니다. 좋은 플러그인 구조는 서로 다른 기능의 코드를 서로 다른 하위 디렉토리에 구성하는 것을 고려해야 합니다. 예를 들어, /includes/ 핵심 클래스 파일을 저장하는 데 사용됩니다./js/ 그리고 /css/ 프론트엔드 리소스를 저장하는 데 사용됩니다./languages/ 국제화된 문서를 위한 용도.
추천 읽기 워드프레스 플러그인 개발을 위한 완전한 가이드: 기초부터 출시까지。
첫 번째 플러그인 파일을 만드세요.
자, 첫 번째 플러그인의 핵심 파일을 만들어 보자. 우리는 플러그인 헤더 정보를 작성하여 시작할 것이며, 플러그인이 제대로 작동하는지 확인하기 위한 간단한 기능을 추가할 것입니다.
플러그인의 헤더 정보를 작성하세요.
플러그인의 주 파일은 표준 헤더 주석으로 시작되어야 합니다. 이 주석 블록은 WordPress에게 플러그인 이름, 설명, 버전, 작성자 등에 대한 메타 데이터를 제공합니다. 아래는 가장 기본적인 예입니다:
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://yourwebsite.com/my-first-plugin
* Description: 这是一个用于学习的简单 WordPress 插件,它将在文章底部添加一段自定义文本。
* Version: 1.0.0
* Author: 你的名字
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ 이 코드는 플러그인 주요 PHP 파일의 상단에 위치해야 합니다. 이 파일을 저장하십시오. /wp-content/plugins/my-first-plugin/my-first-plugin.php 다음으로, WordPress 관리 페이지의 “플러그인” 페이지에 접속하면 “제 첫 번째 플러그인'이라는 새 플러그인이 나타나야 하며, 이를 활성화할 수 있습니다. 현재 이 플러그인은 아무런 기능도 가지고 있지 않습니다.
첫 번째 간단한 기능을 구현하십시오.
플러그인을 활성화한 후 우리는 모든 게시물의 끝에 자동으로 사용자 정의 텍스트를 추가하는 클래식한 기능을 구현할 것입니다. 우리는 the_content 필터. 주 파일을 수정하고 헤더 정보 아래에 다음 코드를 추가하세요:
/**
* 在文章内容末尾添加自定义文本
*
* @param string $content 文章原始内容。
* @return string 修改后的内容。
*/
function mfp_add_footer_text( $content ) {
// 仅在主查询的单篇文章页面显示
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_text = '<p><em>읽어주셔서 감사합니다! 이 글은 [제 첫 번째 플러그인]에서 제공됩니다.</em></p>'만일 페이지나 게시물에 사용자 정의 텍스트를 추가하려는 경우, 아래와 같이 코드를 수정해야 합니다.
```php
function mfp_add_footer_text( $content ) {
$custom_text = get_option( ‘mfp_custom_text’ );
if ( ! empty( $custom_text ) ) {
$content .= '\n';
$content .= $custom_text;
}
return $content;
}
// 사용자 정의 함수를 'the_content' 필터에 추가하기
add_filter( 'the_content', 'mfp_add_footer_text' );
```; 파일을 저장한 후 백그라운드를 새로 고치지 않고 그저 웹사이트의 임의의 글을 방문하면, 우리가 추가한 텍스트가 글의 끝에 나타나는 것을 볼 수 있습니다. 이 예시는 WordPress 플러그인 개발의 핵심 패턴 중 하나인, WordPress의 핵심 프로세스에 개입하기 위한 후크(Hooks)의 사용을 보여줍니다.add_filter 그것은 필터를 연결하는 함수입니다, 그리고 the_content 그것은 내용을 수정하는 데 사용할 수 있는 여러 필터 중 하나입니다.
추천 읽기 WordPress 플러그인 개발 궁극 가이드: 제로에서 프로페셔널 플러그인까지 구축하기。
플러그인의 핵심 기능 개발
기본 지식을 습득한 후 관리 페이지를 만들고 코드를 클래스로 구성하는 등 더 강력한 기능을 탐구할 수 있습니다. 이는 더 복잡하고 유지 보수하기 쉬운 플러그인을 만드는 데 도움이 됩니다.
플러그인 관리 메뉴와 설정 페이지를 만들기
많은 플러그인은 사용자에게 구성 옵션을 제공해야 합니다. 이는 일반적으로 WordPress 관리자에 메뉴 페이지를 추가하여 달성됩니다. 아래에서는 최상위 메뉴 페이지를 추가하는 예를 보여 드리겠습니다:
/**
* 在后台管理菜单中添加一个顶级菜单项
*/
function mfp_add_admin_menu() {
add_menu_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限要求
'mfp-settings-page', // 菜单 slug
'mfp_render_settings_page', // 用于渲染页面的回调函数
'dashicons-admin-generic', // 图标(可选)
80 // 菜单位置(可选)
);
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );
/**
* 渲染设置页面的回调函数
*/
function mfp_render_settings_page() {
?>
<div class="wrap">
<h1></h1>
<form action="/ko/options.php/" method="post" data-trp-original-action="options.php">
<?php
// 输出安全隐藏字段
settings_fields( 'mfp_settings_group' );
// 输出设置区块
do_settings_sections( 'mfp-settings-page' );
// 输出保存按钮
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="ko"/></form>
</div>
<?php
} 이 코드는 다음과 같은 기능을 사용합니다: add_menu_page 함수는 새 메뉴 항목을 추가하고 지정된 내용을 제공합니다. mfp_render_settings_page 페이지 HTML을 생성하는 함수입니다. 페이지에 저장할 수 있는 양식 필드를 추가하려면 다른 함수와 함께 사용해야 합니다. register_setting, add_settings_section 그리고 add_settings_field 설정 항목을 등록하고 정의하려면 setState 및 useEffect 함수를 사용해야 합니다.
객체 지향 프로그래밍을 이용해 코드를 구조화하십시오.
조금 더 복잡한 플러그인의 경우, 객체 지향 방식을 사용하여 데이터와 기능을 클래스에 포함시키면 코드 구조가 더 분명해지고 이름 충돌이 줄어듭니다. 아래는 간단한 클래스 구조 예입니다:
class MyFirstPlugin {
/**
* 构造方法,用于初始化钩子
*/
public function __construct() {
add_action( 'init', array( $this, 'init' ) );
add_filter( 'the_content', array( $this, 'modify_content' ) );
}
/**
* ‘init’ 钩子的回调函数
*/
public function init() {
// 插件初始化代码,例如注册短代码、自定义文章类型等
load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
/**
* 修改文章内容的回调函数
*/
public function modify_content( $content ) {
// 类内部实现功能逻辑
if ( is_single() ) {
$content .= '<p>이것은 클래스 메서드에 의해 추가된 내용입니다.</p>';
}
return $content;
}
}
// 实例化插件类
new MyFirstPlugin(); 기능을 캡슐화하여, MyFirstPlugin 클래스에서는 모든 관련 속성과 메서드가 같은 범위 내에 집중되어 있습니다. 사용하려면 array( $this, ‘method_name’ ) 이 구문은 클래스 메서드를 WordPress의 후크에 매핑할 수 있게 해줍니다. 이 패턴은 대규모의 플러그인을 구축할 때 권장되는 방법입니다.
플러그인 출시 및 유지보수
개발이 완료된 후에는 플러그인이 안전하고 효율적이며 다른 사용자들에게 배포할 준비가 되어 있는지 확인해야 합니다. 이는 보안 코딩, 성능 최적화 및 최종 출시 준비에 관련되어 있습니다.
추천 읽기 입문부터 전문가 수준까지: WordPress 플러그인 개발을 위한 완벽한 가이드 및 실전 튜토리얼。
보안성과 데이터 검증(Security and Data Validation)
플러그인 보안은 최우선입니다. 사용자 입력 또는 데이터베이스에서 직접 검색한 데이터를 절대 신뢰하지 마십시오. 모든 데이터를 처리하기 전에 검증, 정리 및 에스케이프가 필요합니다.
* 검증(Validation): 데이터가 예상된 형식에 따르는지 여부를 확인합니다(예: 이메일, 숫자 등). 이를 위해 다음과 같은 방법을 사용할 수 있습니다. filter_var 또는 WordPress의 sanitize_* 시리즈 함수들. (Series of functions.)
* 清理 (Sanitization):在将数据存入数据库或用于输出前,移除其中不安全的字符。例如,使用 sanitize_text_field 텍스트 입력을 처리하십시오.
* 에스케이핑(Escaping): HTML, JavaScript, 또는 URL로 데이터를 출력할 때, 크로스 사이트 스크립트 공격을 방지하기 위해 상황에 따라 에스케이핑을 해야 합니다. WordPress는 < 에스케이핑 기능을 제공합니다. esc_html, esc_js, esc_url 그리고 esc_attr 등의 함수들입니다.
예를 들어, 데이터베이스에서 가져온 변수를 출력할 경우:
// 假设 $user_input 是从数据库获取的文本
echo '<div class="message">'`. esc_html($user_input)`.'</div>'혹은 HTML 속성에 사용하실 수 있습니다.'<input type="text" value="' . esc_attr( $user_input ) . '">'; 성능 최적화 및 모범 사례
우수한 플러그인은 웹사이트 성능에 최소한 영향을 미워야 합니다. 다음 최고 실천 방법을 따르십시오:
* 필요에 따라 리소스 로드: 사용하세요 wp_enqueue_script 그리고 wp_enqueue_style 함수를 사용하고, 필요한 페이지에서만 당신의 CSS 및 JavaScript 파일을 로드하십시오. 이를 통해 wp_enqueue_scripts 후크(프론트엔드)와 admin_enqueue_scripts 후크(백그라운드)를 통해 설치하세요.
* 후크의 적당한 사용: 페이지가 로드될 때마다 불필요한 코드를 실행하지 않도록 하십시오. 당신의 함수를 가장 적합한 후크에 연결하고 조건부 태그(예: <)를 사용하십시오. is_admin(), is_single()코드 실행 범위를 제한하기 위해서입니다.
* 데이터베이스 질의 최적화: 직접 SQL 질의를 최대한 줄이고 WordPress의 API를 우선적으로 사용하십시오 (예: WP_Query, get_posts만약 사용자 정의 쿼리를 수행해야 한다면, 반드시 적절한 방법을 사용해야 합니다. $wpdb 클래스를 정의하고 검색 캐시를 설정하십시오.
* 제거 및 정리 옵션 제공: 사용자가 플러그인을 제거할 때 플러그인이 생성한 데이터(예: 데이터베이스 테이블, 옵션 등)를 정리해야 하는지 여부를 고려하십시오. 이는 별도의 파일에 등록된 제거 후크를 통해 구현할 수 있습니다.
요약
이 글은 워드프레스 플러그인 개발의 핵심 여정을 안내해 줍니다. 개발 환경 설정 및 기본 구조 이해에서 시작하여 첫 번째 기능을 가진 플러그인 파일을 만들고, 백엔드 관리 인터페이스 추가, 객체 지향 방식으로 코드 구조화 등 고급 주제를 탐구하며, 마지막으로 보안, 성능 및 출시 준비의 중요성을 강조합니다. 기억하세요, 플러그인 개발의 핵심은 워드프레스의 방대한 후크 시스템을 영리하게 사용하여 기능을 확장하는 것입니다. 보안 코딩 표준을 준수하고, 성능을 최적화하며, 코드를 깨끗히 유지하면 강력하고 신뢰할 수 있는 플러그인을 만들 수 있으며, 전 세계 워드프레스 커뮤니티에 기여할 수 있습니다. 실습을 계속하고, 코어 코드와 다른 우수한 플러그인의 소스 코드를 읽는 것은 기술을 향상시키는 최고의 방법입니다.
자주 묻는 질문
WordPress 플러그인을 개발하려면 PHP에 대한 전문 지식이 필요한가요?
전문가 수준에 도달할 필요는 없지만, 扎실한 PHP 기반은 필수적입니다. WordPress 코어, 플러그인, 테마 등이 PHP로 작성되어 있기 때문에 PHP 문법, 함수, 배열, 객체 지향 프로그래밍 등의 개념을 이해해야 합니다. 또한, 프론트엔드 상호 작용이 있는 플러그인을 개발할 경우 HTML, CSS, JavaScript에 대한 지식도 매우 중요합니다.
내 WordPress 플러그인을 어떻게 디버깅하나요?
먼저, 귀하의 시스템 또는 환경에서 필요한 설정들이 모두 제대로 되어 있는지 확인하십시오. wp-config.php 파일에서 WordPress 디버깅 모드를 활성화하세요. WP_DEBUG 상수를 `true`로 설정하면 PHP 오류, 경고, 알림이 화면에 표시되거나 로그 파일에 기록됩니다. 다음으로, 사용하십시오… error_log 변수 값과 실행 프로세스를 추적하는 함수나 도구인 Query Monitor 플러그인과 같은 도구도 있습니다. 브라우저의 개발자 도구(콘솔 및 네트워크 탭)도 JavaScript 및 AJAX 요청을 디버깅하는 데 필수적입니다.
제 플러그인은 어떻게 서로 다른 워드프레스 버전과 호환되나요?
개발 단계에서는 서로 다른 버전의 함수 제거 및 변경 상황을 이해하기 위해 정기적으로 공식 문서를 참조해야 합니다. 조건부 논리와 버전 확인을 통해 역호환성을 제공할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다. function_exists() 특정 함수가 사용 가능한지 확인하고 사용 불가능한 경우에는 대체 구현 방법을 제공하십시오. 또한, readme.txt 파일에서 테스트한 워드프레스 버전의 범위를 명확히 하십시오.
제 플러그인을 국제화하는 방법은 무엇인가요?
워드프레스는 GNU gettext 기술 스택을 사용하여 국제화를 구현합니다. 당신은 __() 또는 _e() 모든 번역이 필요한 문자열을 함수로 래핑한 다음, POT 파일 생성 도구(예: Poedit)를 사용하여 번역자들이 .mo 및 .po 파일을 생성할 수 있도록 번역 템플릿을 만듭니다. 마지막으로, load_plugin_textdomain() 함수는 플러그인을 초기화할 때 언어 파일을 로드합니다.
다음 단계는 무엇인가요?
확장된 독서 및 실무 지식
다음은 이 도움말의 주제와 관련이 있으며 더 깊이 있게 읽기에 적합합니다. 현재 문제와 가장 가까운 문서부터 시작하여 점차 주변 주제로 확장하는 것이 우선순위를 정하는 것이 좋습니다.