준비 작업 및 환경 구축
코드를 작성하기 시작하기 전에, 적합한 개발 환경이 필요합니다. 여기에는 로컬에 설치된 WordPress, 코드 편집기, 그리고 기본적인 PHP 지식이 포함됩니다. 로컬 개발 환경으로는 XAMPP, MAMP, Local by Flywheel과 같은 도구를 사용하는 것이 추천됩니다. 이러한 도구들을 사용하면 로컬 컴퓨터에서 PHP와 MySQL을 포함한 서버 환경을 빠르게 설정할 수 있습니다.
플러그인의 기본 디렉터리와 파일을 생성합니다.
모든 WordPress 플러그인은 플러그인의 시작점이 되는 메인 파일을 가지고 있어야 합니다. 먼저, WordPress에서… wp-content/plugins 디렉터리 내에 새로운 폴더를 생성하세요. 예를 들어, `new_folder`라는 이름으로 폴더를 만들 수 있습니다. my-first-plugin그런 다음, 해당 폴더 내에 주 PHP 파일을 생성하세요. 이 파일의 이름은 보통 폴더의 이름과 동일합니다. my-first-plugin.php。
이 주 파일의 시작 부분에는 반드시 표준적인 플러그인 정보 관련 주석이 포함되어 있어야 합니다. WordPress는 이러한 정보를 읽어서 백엔드 관리 인터페이스에서 해당 플러그인을 식별하고 표시합니다.
추천 읽기 제로에서 원까지: WordPress 플러그인 개발의 핵심 기술을 단계별로 배우세요.。
<?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
*/ 워드프레스 플러그인 개발의 기본 구조를 이해하세요.
기능이 완전한 플러그인은 보통 하나의 파일로 이루어지지 않습니다. 메인 파일 외에도 JavaScript, CSS, 이미지와 같은 리소스 파일들과 국제화를 위한 언어 파일들이 있을 수 있습니다. 적절한 디렉터리 구조는 코드의 조직화와 유지보수에 도움이 됩니다.
권장되는 구조는 다음과 같습니다:
- my-first-plugin/ (플러그인 루트 디렉터리)
- my-first-plugin.php (주 파일)
- includes/ (핵심 기능 클래스나 함수 파일을 저장하는 곳)
- admin/ (백엔드 관리 인터페이스 관련 코드가 저장되어 있습니다.)
- public/ (프론트엔드 디스플레이 관련 코드가 저장된 곳)
- assets/ (CSS, JavaScript, 이미지 등의 리소스를 저장하는 곳)
- languages/ (국제화 번역 파일이 저장된 위치)
핵심 PHP 코드 작성
플러그인의 모든 기능 로직은 PHP 코드를 통해 구현됩니다. WordPress는 다양한 기능을 제공합니다.动作钩子그리고过滤器钩子이것은 플러그인이 WordPress 코어와 상호작용하는 데 있어 핵심적인 기반이 됩니다.
간단한 쇼트코드 기능을 구현해 보겠습니다.
단축 코드(short code)는 사용자가 기사나 페이지에 플러그인 기능을 쉽게 삽입할 수 있도록 해주는 강력한 도구입니다. 이제 간단한 단축 코드를 만들어 보겠습니다. 이 단축 코드는 페이지에 인사말을 표시해 줍니다.
당신의 메인 파일에서… my-first-plugin.php 헤더 주석 아래에 다음 함수와 훅을 추가하세요:
추천 읽기 WordPress 플러그인 개발에 대한 심층 분석: 첫 번째 기능 확장을 구축하는 것부터 시작하기。
// 注册短代码
function mfp_greeting_shortcode( $atts ) {
// 使用 shortcode_atts 设置默认参数并合并用户传入的参数
$atts = shortcode_atts( array(
'name' => '访客',
), $atts, 'mfp_greeting' );
// 返回要显示的内容
return '<p>안녕하세요, '. esc_html($atts['name'])'. ‘! 제 첫 번째 플러그인을 사용해 주셔서 감사합니다.</p>'php
add_shortcode('mfp_greeting', 'mfp_greeting_shortcode'); 이제 사용자는 기사 편집기에서 내용을 입력할 수 있습니다. [mfp_greeting name=“小明”]그러면 프론트엔드에 “안녕하세요, 소명! 제 첫 번째 플러그인을 사용해 주셔서 감사합니다.”라는 메시지가 표시됩니다.”
백엔드에 설정 옵션을 추가하세요.
플러그인 기능을 설정 가능하게 하기 위해서는 일반적으로 설정 페이지를 추가해야 합니다. 여기에서는 “설정” 메뉴에 하위 메뉴 페이지를 어떻게 추가하는지를 보여줍니다.
먼저, 우리는 사용합니다. add_action 후크는 관리자가 시스템을 초기화할 때 등록 및 설정됩니다.
// 初始化插件设置
function mfp_settings_init() {
// 注册一个新的设置 section
add_settings_section(
'mfp_settings_section', // section ID
'我的插件设置', // 标题
'mfp_settings_section_callback', // 回调函数,用于输出 section 描述
'general' // 显示在哪个设置页,这里是“常规”设置页
);
// 在 section 内注册一个字段
add_settings_field(
'mfp_default_greeting', // 字段 ID
'默认问候人名', // 字段标题
'mfp_default_greeting_callback', // 渲染字段输入框的回调函数
'general', // 设置页面
'mfp_settings_section' // 所属 section
);
// 在 WordPress 的 `option` 表中注册这个设置
register_setting( 'general', 'mfp_default_greeting' );
}
add_action( 'admin_init', 'mfp_settings_init' ); 그런 다음, 위에서 사용된 두 개의 콜백 함수를 정의하여 인터페이스를 렌더링합니다:
// Section 描述的回调函数
function mfp_settings_section_callback() {
echo '<p>여기서 제 첫 번째 플러그인에 관한 설정 옵션들을 구성합니다.</p>';
}
// 字段输入框的回调函数
function mfp_default_greeting_callback() {
// 从数据库获取已保存的值,如果没有则使用默认值
$option = get_option( 'mfp_default_greeting', 'WordPress 用户' );
// 输出一个输入框
echo '<input type="text" name="mfp_default_greeting" value="' . esc_attr( $option ) . '" />';
} 이제 WordPress 관리자의 “설정 -> 일반” 페이지 하단에서 이 설정 옵션을 확인할 수 있습니다.
프론트엔드 리소스 관리 및 Ajax 상호작용
현대적인 플러그인들은 대부분 자체적인 스타일과 상호작용 로직을 필요로 합니다. WordPress는 CSS 및 JavaScript 파일을 안전하게 등록하고 로드할 수 있는 표준적인 방법을 제공합니다.
추천 읽기 제로에서 시작하기: 왜 WordPress 플러그인 개발을 선택해야 할까요?。
CSS와 JavaScript를 안전하게 로드하기
절대로 PHP 파일 내에서 직접 다음과 같은 작업을 하지 마세요: <link> 또는 <script> 태그에 리소스 경로를 하드코딩하는 것은 좋지 않습니다. 대신 다음과 같은 방법을 사용하는 것이 좋습니다: wp_enqueue_style 그리고 wp_enqueue_script 함수.
// 注册并加载前端资源
function mfp_enqueue_public_assets() {
// 加载一个 CSS 文件
wp_enqueue_style(
'mfp-public-style', // 样式表句柄
plugin_dir_url( __FILE__ ) . 'assets/css/public-style.css', // 样式表 URL
array(), // 依赖项
'1.0.0' // 版本号,可用于清除缓存
);
// 加载一个 JavaScript 文件
wp_enqueue_script(
'mfp-public-script', // 脚本句柄
plugin_dir_url( __FILE__ ) . 'assets/js/public-script.js', // 脚本 URL
array( 'jquery' ), // 依赖项,这里依赖 jQuery
'1.0.0',
true // 是否在页面底部加载
);
// 重要:将 PHP 变量安全地传递到 JavaScript
wp_localize_script(
'mfp-public-script',
'mfp_ajax_object', // 在 JS 中访问的对象名
array(
'ajax_url' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'mfp_ajax_nonce' ),
'default_name' => get_option( 'mfp_default_greeting', 'WordPress 用户' )
)
);
}
// 在前端页面加载资源
add_action( 'wp_enqueue_scripts', 'mfp_enqueue_public_assets' );
// 在后台管理页面加载资源(如果需要)
// add_action( 'admin_enqueue_scripts', 'mfp_enqueue_admin_assets' ); 간단한 Ajax 요청을 실현하기
Ajax를 사용하면 페이지를 새로 고치지 않고도 서버와 상호작용할 수 있습니다. WordPress에는 내장된 Ajax 처리 기능이 있습니다.
먼저, 프론트엔드 JavaScript 파일에서… public-script.js 요청을 보냅니다:
jQuery(document).ready(function($) {
$('#my-button').on('click', function(e) {
e.preventDefault();
$.post(
mfp_ajax_object.ajax_url, // WordPress 提供的 Ajax URL
{
action: 'mfp_get_server_time', // 触发的 PHP 钩子标识
nonce: mfp_ajax_object.nonce, // 安全随机数
},
function(response) {
if (response.success) {
$('#result-container').html('服务器时间:' + response.data);
} else {
alert('请求失败:' + response.data);
}
}
);
});
}); 그런 다음, PHP 측에서 이 요청을 처리해야 합니다. 로그인한 사용자와 로그인하지 않은 사용자에게 각각(또는 동시에) 적용되는 등록 처리 함수가 필요합니다.
// 处理 Ajax 请求的函数
function mfp_ajax_get_server_time() {
// 验证 nonce,防止 CSRF 攻击
check_ajax_referer( 'mfp_ajax_nonce', 'nonce' );
// 处理逻辑
$server_time = current_time( 'mysql' );
// 返回成功响应(JSON 格式)
wp_send_json_success( $server_time );
}
// 为登录用户注册处理函数
add_action( 'wp_ajax_mfp_get_server_time', 'mfp_ajax_get_server_time' );
// 为未登录用户注册处理函数(如果功能允许)
add_action( 'wp_ajax_nopriv_mfp_get_server_time', 'mfp_ajax_get_server_time' ); 플러그인의 국제화 및 배포 준비
당신의 플러그인을 전 세계의 WordPress 사용자들이 사용할 수 있도록 하기 위해서는 국제화(i18n)가 필수적인 단계입니다. 또한, 출시 전에 충분한 테스트와 최적화를 거치는 것도 매우 중요합니다.
gettext 함수를 사용하여 텍스트를 번역합니다.
WordPress는 번역을 위해 GNU gettext 프레임워크를 사용합니다. 사용자에게 표시되는 모든 문자열을 특정 함수로 감싸야 합니다.
이전의 간단한 코드 함수를 수정하여 번역 기능을 지원하도록 만드세요.
function mfp_greeting_shortcode_i18n( $atts ) {
$atts = shortcode_atts( array(
'name' => __( '访客', 'my-first-plugin' ), // 默认值也可翻译
), $atts, 'mfp_greeting' );
// 使用 sprintf 和 __ 函数组合翻译字符串
return '<p>' . sprintf( __( '你好,%s!欢迎使用我的第一个插件。', 'my-first-plugin' ), esc_html( $atts['name'] ) ) . '</p>'자세한 내용은 다음과 같습니다: \n';
add_shortcode( 'mfp_greeting', 'mfp_greeting_shortcode_i18n' ); Poedit와 같은 도구를 사용하여 플러그인 내에 있는 모든 유사한 내용을 스캔해야 합니다. __(‘文本’, ‘my-first-plugin’) 문자열을 생성하려면 먼저 해당 문자열을 정의해야 합니다. 문자열은 문자, 숫자, 기호 등으로 구성된 일련의 데이터입니다. 예를 들어, “Hello, world!”와 같은 문자열이 있습니다. 이 문자열을 사용하여 다양한 작업을 수행할 수 있습니다. .pot 템플릿 파일을 준비한 다음, 중국어와 같은 각 언어에 맞는 파일을 생성합니다. .po 그리고 컴파일된 후 .mo 파일을 가져와서 그곳에 넣으세요. /languages 카탈로그.
최종 테스트를 수행하고 코드를 정리합니다.
플러그인을 배포하기 전에 반드시 다음과 같은 점들을 확인해 주세요:
1. 기능 테스트: 새로 설치한 WordPress에 플러그인을 활성화한 후, 모든 기능(쇼트코드, 설정, Ajax 등)이 예상대로 작동하는지 테스트합니다.
2. 코드 리뷰: 모든 사용자 입력이 적절하게 처리되었는지 확인합니다. esc_html, esc_attr, wp_kses_post 이러한 함수들을 사용하여 데이터를 안전하게 이스케이프 처리해야 합니다. 모든 데이터베이스 쿼리에서 이러한 처리가 반드시 이루어지고 있는지 확인해 주세요. $wpdb 클래스에 예방 적용을 위한 문장을 추가하여 SQL 삽입 공격을 방지합니다.
3. 성능 검사: 스크립트와 스타일이 필요한 페이지에서만 로드되도록 하십시오. 이를 위해 조건부 태그(예: `if`, `else if`, `else`)를 사용할 수 있습니다. is_admin(), is_single() (판단을 내립니다.) 페이지가 로드될 때마다 불필요한 데이터베이스 쿼리를 실행하지 않도록 주의하세요.
4. 파일 정리: 개발 과정에서 사용된 디버깅 코드, 불필요한 주석, 그리고 사용되지 않는 파일들을 삭제하세요.
5. README 파일: 상세한 내용을 포함하는 README 파일을 작성하세요. readme.txt 이 파일은 WordPress.org의 요구 사항을 준수하는 형식으로 작성되어야 하며, 플러그인에 대한 설명, 설치 방법, 자주 묻는 질문 등의 내용을 포함해야 합니다. 이 파일은 플러그인을 공식 디렉터리에 제출하는 데 필수적입니다.
요약
이 가이드를 통해 여러분은 비어 있는 파일에서 짧은 코드, 백엔드 설정, 프론트엔드 리소스 로딩, Ajax 상호 작용 및 국제화 지원이 포함된 완전한 WordPress 플러그인을 구축하는 여정을 완료할 것입니다. 핵심 단계는 환경 설정 및 표준 헤더가 포함된 주 파일 생성, 동작 후크 및 필터 후크를 통한 기능 추가, 리소스 파일 안전 관리, 프론트엔드와 백엔드 간의 비동기 통신 구현 및 글로벌 출시를 위한 번역 및 테스트 준비입니다. 기억하세요, 보안(이스케이프, 검증, 노운스), 성능(필요에 따라 로딩) 및 표준(WordPress 코딩 표준 준수)은 고품질 플러그인 개발의 3대 기둥입니다. 지속적인 학습 및 고급 API(사용자 정의 게시물 유형, REST API, 블록 편집기 개발)의 실습은 플러그인을 더 강력하게 만들 것입니다.
자주 묻는 질문
플러그인 개발에 반드시 객체 지향 프로그래밍을 사용해야 합니까?
꼭 그런 것은 아닙니다. 간단한 플러그인의 경우 프로세스형 프로그래밍(함수들의 집합)을 사용하는 것이 충분히 가능하며, 더 간단하고 직관적이기도 합니다. 하지만 중대형이고 복잡한 플러그인의 경우 객체지향 프로그래밍(OOP)과 클래스 구조를 사용하면 코드를 더 잘 조직화할 수 있으며, 캡슐화와 재사용을 실현할 수 있어서 명명 충돌을 줄일 수 있습니다. 따라서 이러한 방식이 더 추천됩니다.
WordPress 플러그인에서 문제가 발생했을 때 어떻게 디버깅할 수 있을까요?
먼저, 반드시 다음 사항을 확인하십시오: wp-config.php 파일에서 활성화합니다. WP_DEBUG 그리고 WP_DEBUG_LOG 상수로 설정하면 오류 메시지가 기록됩니다. /wp-content/debug.log 이 파일은 사용자에게 표시되지 않고 파일 내부에만 저장됩니다. 둘째로, 다음과 같은 방법을 사용할 수 있습니다. error_log() 함수가 변수의 값을 로그에 출력합니다. Ajax나 복잡한 로직의 경우, 브라우저 개발자 도구의 “네트워크” 및 “콘솔” 패널은 필수적인 디버깅 도구입니다.
제 플러그인을 테마나 다른 플러그인들과 어떻게 호환시킬 수 있을까요?
호환성을 유지하는 최선의 방법은 WordPress 공식 API 및 코딩 표준을 엄격히 준수하고 함수, 클래스, 액션 후크 이름에 고유의 접두사(예: prefix)를 추가하는 것입니다. mfp_) 충돌을 피하기 위해; 모든 전역 변수나 함수를 사용하기 전에 그것들이 존재하는지 확인하십시오(사용하기). function_exists() 또는 class_exists()) 그리고 문서에 자신이 만든 플러그인이 생성한 데이터베이스 테이블에 대해 명확하게 설명해 주세요.选项또는 用户元数据。
플러그인을 WordPress.org 디렉터리에 제출하려면 어떤 조건이 필요한가요?
워드프레스.org 계정이 필요하며, 플러그인이 공식 요구사항을 완전히 준수해야 합니다. 이에는 GPL 호환 라이선스(일반적으로 GPLv2+)에 따른 코드, 기능 核心을 실행하는데 외부 유료 서비스에 의존하지 않는 오픈 소스 플러그인, 표준 형식의 포함 파일 등이 포함됩니다. readme.txt 파일 및 코드에 악성코드나 불필요한 내용이 없으며, 인공 심사 팀의 검토도 통과했습니다. 제출하기 전에 공식 플러그인 개발 매뉴얼과 제출 가이드를 반드시 자세히 읽어주시기 바랍니다.
다음 단계는 무엇인가요?
확장된 독서 및 실무 지식
다음은 이 도움말의 주제와 관련이 있으며 더 깊이 있게 읽기에 적합합니다. 현재 문제와 가장 가까운 문서부터 시작하여 점차 주변 주제로 확장하는 것이 우선순위를 정하는 것이 좋습니다.