woocommerce/.ai/skills/woocommerce-backend-dev/zh-cn/hooks.md
2026-04-15 10:18:01 +08:00

87 lines
No EOL
1.9 KiB
Markdown

# 使用钩子
## 钩子回调命名规范
钩子回调方法命名:使用 `handle_{钩子名称}` 并添加 `@internal` 注解。
**示例:**
```php
/**
* 处理 woocommerce_init 钩子。
*
* @internal
*/
public function handle_woocommerce_init() {
// 初始化组件
}
/**
* 处理 woocommerce_before_checkout 钩子。
*
* @internal
*
* @param WC_Checkout $checkout 结账对象。
*/
public function handle_woocommerce_before_checkout( $checkout ) {
// 设置结账流程
}
```
## 钩子文档块
如果修改了触发钩子的行但没有文档块:
1. 添加包含描述和 `@param` 标签的文档块
2. 使用 `git log -S "hook_name"` 查找钩子引入的时间
3. 添加包含该版本的 `@since` 注解
```php
/**
* 在订单处理完成后触发。
*
* @param int $order_id 已处理的订单 ID。
* @param array $order_data 订单数据。
*
* @since 8.2.0
*/
do_action( 'woocommerce_order_processed', $order_id, $order_data );
```
## 钩子文档要求
所有钩子必须包含以下内容的文档块:
- 钩子触发时机的描述
- 传递给钩子的每个参数的 `@param` 标签
- 包含版本号的 `@since` 注解(最后一行,前面空一行)
- 对于新钩子:使用 trunk 分支上 `includes/class-woocommerce.php` 中的版本,移除 `-dev` 后缀
- 对于现有钩子:使用 `git log -S "hook_name"` 查找钩子引入的时间
**动作钩子示例:**
```php
/**
* 在产品保存后触发。
*
* @param int $product_id 产品 ID。
* @param WC_Product $product 产品对象。
*
* @since 9.5.0
*/
do_action( 'woocommerce_product_saved', $product_id, $product );
```
**过滤器钩子示例:**
```php
/**
* 在产品价格显示前进行过滤。
*
* @param string $price 格式化后的价格。
* @param WC_Product $product 产品对象。
*
* @since 9.5.0
*/
$price = apply_filters( 'woocommerce_product_price', $price, $product );
```