返回首页

钩子大全

钩子(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'] 注册)