WordPress开发最佳实践 wordpress-dev

提供WordPress主题和插件开发的最佳实践指南,包括编码标准、自定义文章类型、安全性、性能优化、钩子和过滤器使用、模板层级结构等,旨在帮助开发者遵循WordPress的最新标准进行高效开发。

后端开发 0 次安装 0 次浏览 更新于 3/3/2026

WordPress开发最佳实践

WordPress主题和插件开发的全面开发指导,遵循2025年标准。

这项技能提供什么

  1. 编码标准 - 遵循WordPress标准的PHP、JS、CSS约定
  2. 自定义文章类型 - 完整的CPT注册和管理指南
  3. 安全性 - 清理、转义、nonces、能力检查
  4. 性能 - 缓存、查询优化、资产加载
  5. 钩子和过滤器 - 动作和过滤器参考与示例
  6. 模板层级 - 主题模板结构和覆盖

快速参考

应该做的

  • 使用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: 品牌文档生成

资源