WordPress开发最佳实践
WordPress主题和插件开发的全面开发指导,遵循2025年标准。
这项技能提供什么
- 编码标准 - 遵循WordPress标准的PHP、JS、CSS约定
- 自定义文章类型 - 完整的CPT注册和管理指南
- 安全性 - 清理、转义、nonces、能力检查
- 性能 - 缓存、查询优化、资产加载
- 钩子和过滤器 - 动作和过滤器参考与示例
- 模板层级 - 主题模板结构和覆盖
快速参考
应该做的
- 使用WordPress API(不要重新发明轮子)
- 清理所有输入(
sanitize_*函数) - 转义所有输出(
esc_*函数) - 使用预处理语句进行SQL(
$wpdb->prepare) - 正确地排队脚本/样式(
wp_enqueue_*) - 使用瞬态存储昂贵的操作
- 遵循模板层级
- 使用钩子而不是修改核心
- 为所有函数、类和全局变量添加前缀
- 使用WP-CLI进行自动化任务
不应该做的
- 修改WordPress核心文件(永远不要)
- 使用
query_posts()- 使用WP_Query代替 - 在没有转义的情况下输出不可信数据
- 以明文选项存储敏感数据
- 对不可信数据使用
extract() - 使用
@操作符抑制错误 - 使用已弃用的函数
- 硬编码URL或文件路径
- 在表单上跳过nonce验证
- 使用
mysql_*函数 - 使用$wpdb
文档
详细文档可在/docs/中找到:
| 文件 | 内容 |
|---|---|
| 编码标准.md | PHP、JS、CSS命名和格式化 |
| 自定义文章类型.md | CPT注册、标签、能力 |
| 安全性.md | 输入/输出处理、nonces、SQL安全 |
| 性能.md | 缓存、优化、延迟加载 |
| 钩子过滤器.md | 常见动作/过滤器示例 |
| 模板层级.md | 模板文件和覆盖 |
代码模板
在/templates/中使用的现成模板:
| 模板 | 目的 |
|---|---|
自定义文章类型.php |
CPT注册样板 |
分类法.php |
自定义分类法注册 |
元框.php |
带有保存处理的管理员元框 |
REST API端点.php |
自定义REST API端点 |
插件骨架/ |
完整的插件启动文件 |
使用示例
创建自定义文章类型
问Claude:
- “为房地产创建一个’Property’自定义文章类型”
- “为团队成员添加一个带有照片字段的自定义文章类型”
- “注册一个带有自定义分类法的’Portfolio’ CPT”
安全性审查
问Claude:
- “审查这个表单处理程序是否存在安全问题”
- “检查这个插件是否遵循WordPress安全最佳实践”
- “为这段代码添加适当的清理和转义”
性能优化
问Claude:
- “优化这个WP_Query以获得更好的性能”
- “为这个昂贵的数据库操作添加缓存”
- “审查这个主题的资产加载”
代码生成
使用脚手架脚本生成样板:
# 生成一个自定义文章类型
python3 /root/.claude/skills/wordpress-dev/scripts/scaffold.py \
--type cpt \
--name "Property" \
--slug "property" \
--output /path/to/theme/inc/
# 生成一个自定义分类法
python3 /root/.claude/skills/wordpress-dev/scripts/scaffold.py \
--type taxonomy \
--name "Property Type" \
--slug "property-type" \
--post-type "property" \
--output /path/to/theme/inc/
WordPress 6.x / 块主题注意事项
全站编辑(FSE)
对于块主题(WordPress 6.0+):
theme/
├── theme.json # 全局样式和设置
├── templates/ # 块模板(HTML)
│ ├── index.html
│ ├── single.html
│ └── page.html
├── parts/ # 块模板部分
│ ├── header.html
│ └── footer.html
└── patterns/ # 块模式
└── hero.php
theme.json最佳实践
{
"$schema": "https://schemas.wp.org/trunk/theme.json",
"version": 2,
"settings": {
"color": {
"palette": [
{"slug": "primary", "color": "#1a1a1a", "name": "Primary"}
]
},
"typography": {
"fontFamilies": [
{"fontFamily": "Inter, sans-serif", "slug": "body", "name": "Body"}
]
},
"spacing": {
"units": ["px", "rem", "%"]
}
}
}
常见模式
安全数据库查询
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->posts} WHERE post_type = %s AND post_status = %s",
'property',
'publish'
)
);
AJAX处理程序
// 注册AJAX动作
add_action('wp_ajax_my_action', 'my_ajax_handler');
add_action('wp_ajax_nopriv_my_action', 'my_ajax_handler');
function my_ajax_handler() {
// 验证nonce
check_ajax_referer('my_nonce', 'security');
// 检查能力
if (!current_user_can('edit_posts')) {
wp_send_json_error('Unauthorized', 403);
}
// 清理输入
$data = sanitize_text_field($_POST['data']);
// 处理并响应
wp_send_json_success(['message' => 'Done']);
}
正确排队脚本
function theme_enqueue_assets() {
// CSS
wp_enqueue_style(
'theme-style',
get_stylesheet_uri(),
[],
filemtime(get_stylesheet_directory() . '/style.css')
);
// JS与依赖性
wp_enqueue_script(
'theme-main',
get_theme_file_uri('/assets/js/main.js'),
['jquery'],
filemtime(get_theme_file_path('/assets/js/main.js')),
true // 在页脚
);
// 本地化AJAX
wp_localize_script('theme-main', 'themeData', [
'ajaxUrl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('theme_nonce'),
]);
}
add_action('wp_enqueue_scripts', 'theme_enqueue_assets');
相关技能
- wordpress-admin: 页面/帖子管理,WP-CLI,REST API
- seo-optimizer: Yoast/Rank Math审核和优化
- visual-qa: 截图测试与动画处理
- brand-guide: 品牌文档生成