钩子大全
钩子(Hook)是 DCSHOP 的核心扩展机制,允许插件在特定时机执行自定义代码。
钩子使用方法
// 注册钩子回调
addAction('钩子名称', '回调函数名');
// 带优先级的注册(数字越小越先执行)
addAction('钩子名称', '回调函数名', 10);
// 回调函数示例
function my_callback_function($param1, $param2) {
// 处理逻辑
}
addAction('order_paid', 'my_callback_function');
订单相关钩子
| 钩子名称 | 触发时机 | 参数 |
order_created |
订单创建后 |
$order_id, $order_data |
order_paid |
订单支付成功后 |
$order_id, $order |
before_submitting_the_payment |
提交支付前 |
$order_list_data |
deliver |
发货时 |
$db, $prefix, $goods, $order, $child_order |
deliver_after |
发货后 |
$plugin_data |
deliver_complete |
发货完成(含赠品) |
$plugin_data |
订单钩子示例
// 订单支付成功后发送通知
function notify_on_order_paid($order_id, $order) {
$out_trade_no = $order['out_trade_no'];
$amount = $order['amount'] / 100;
// 发送邮件、Webhook等通知
sendNotification("订单 {$out_trade_no} 已支付 ¥{$amount}");
}
addAction('order_paid', 'notify_on_order_paid');
// 发货后记录日志
function log_deliver($plugin_data) {
$order_no = $plugin_data['out_trade_no'];
$goods_name = $plugin_data['goods_name'];
Log::info("订单 {$order_no} 已发货:{$goods_name}");
}
addAction('deliver_after', 'log_deliver');
商品相关钩子
| 钩子名称 | 触发时机 | 参数 |
home_goods_list |
前台商品列表渲染前 |
&$goods_list(引用传递,可修改列表) |
goods_content_echo |
商品详情页渲染前 |
&$goods(引用传递,可修改商品数据) |
goods_created |
商品创建后 |
$goods_id, $data |
goods_updated |
商品更新后 |
$goods_id, $data |
save_goods_after |
商品保存后 |
$goods_id, $data, $cmd |
stock_added |
库存添加后 |
$goods_id, $goods |
stock_low_warning |
库存低于阈值 |
$goods_id, ['goods_title', 'current_stock', 'threshold', 'sku'] |
del_product |
商品删除后 |
$goods_id |
before_del_product |
商品删除前 |
$goods_id |
库存预警示例
// 库存不足时发送预警
function stock_warning_notify($goods_id, $data) {
$title = $data['goods_title'];
$stock = $data['current_stock'];
// 发送预警通知
sendNotification("商品【{$title}】库存不足,当前库存:{$stock}");
}
addAction('stock_low_warning', 'stock_warning_notify');
商品列表过滤示例
// 过滤前台商品列表(如隐藏特定商品)
function filter_goods_list($input, &$goods_list) {
$hiddenIds = ['1', '2', '3']; // 要隐藏的商品ID
foreach ($goods_list as $key => $item) {
$goodsId = $item['goods_id'] ?? $item['id'] ?? '0';
if (in_array((string)$goodsId, $hiddenIds)) {
unset($goods_list[$key]);
}
}
$goods_list = array_values($goods_list);
}
addAction('home_goods_list', 'filter_goods_list');
// 修改商品详情数据(如过滤规格)
function modify_goods_detail($input, &$goods) {
// 移除某个规格值
if (!empty($goods['spec'])) {
foreach ($goods['spec'] as $groupIdx => $specGroup) {
foreach ($specGroup['sku_values'] as $valIdx => $val) {
if ($val['id'] == 10) { // 移除ID为10的规格值
unset($goods['spec'][$groupIdx]['sku_values'][$valIdx]);
}
}
$goods['spec'][$groupIdx]['sku_values'] = array_values($goods['spec'][$groupIdx]['sku_values']);
}
}
}
addAction('goods_content_echo', 'modify_goods_detail');
用户相关钩子
| 钩子名称 | 触发时机 | 参数 |
user_login_submit |
用户登录提交时 |
- |
user_login_success |
用户登录成功后 |
$uid, ['type', 'ip'] |
user_register_submit |
用户注册提交时 |
- |
user_register_after |
用户注册成功后 |
$account, $type |
user_profile_update |
用户资料更新后 |
$uid, $userData |
user_balance_change |
用户余额变动时 |
$user_id, ['type', 'amount', 'balance_before', 'balance_after', 'message'] |
提现相关钩子
| 钩子名称 | 触发时机 | 参数 |
withdraw_created |
提现申请创建后 |
$withdraw_id, $withdraw_data |
withdraw_approved |
提现审核通过后 |
$id, $withdraw |
withdraw_rejected |
提现审核拒绝后 |
$id, $withdraw |
售后相关钩子
| 钩子名称 | 触发时机 | 参数 |
aftersale_created |
售后申请创建后 |
$aftersale_id, ['order_id', 'type', 'reason', ...] |
aftersale_closed |
售后关闭后 |
$aftersale_id, ['order_id', 'closed_by', ...] |
aftersale_status_change |
售后状态变更后 |
$id, ['old_status', 'new_status', 'handle_remark', ...] |
分站相关钩子
| 钩子名称 | 触发时机 | 参数 |
station_created |
分站开通后 |
$station_id, ['user_id', 'level_id', 'amount', 'pid'] |
页面输出钩子
| 钩子名称 | 位置 | 用途 |
adm_head | 后台 <head> 内 | 添加后台CSS/JS |
adm_footer | 后台 </body> 前 | 添加后台脚本 |
adm_menu | 后台侧边栏菜单 | 添加菜单项 |
page_head | 前台 <head> 内 | 添加前台CSS/JS |
page_footer | 前台 </body> 前 | 添加前台脚本 |
user_footer | 用户中心页脚 | 添加用户中心脚本 |
添加后台菜单示例
function add_my_menu() {
echo '<li class="admin-menu-item">';
echo '<a href="./plugin.php?plugin=my_plugin" class="menu-link">';
echo '<i class="ri-settings-3-line"></i> 我的插件';
echo '</a></li>';
}
addAction('adm_menu', 'add_my_menu');
支付相关钩子
| 钩子名称 | 触发时机 | 参数 |
mode_payment |
获取支付方式列表时 |
-(通过 $GLOBALS['mode_payment'] 注册) |