AI摘要
小武站
基于对项目代码库的分析,提供完整的子比主题(Zibll)插件开发指南。
🔑 核心钩子和过滤器
1. 支付方式扩展
// 新增支付方式
add_filter('zibpay_payment_methods', 'my_custom_payment_method', 10, 2);
function my_custom_payment_method($methods, $pay_type) {
// 自定义支付方式逻辑
return $methods;
}
// 允许余额支付
add_filter('zibpay_is_allow_balance_pay', 'my_balance_pay_filter', 10, 2);
function my_balance_pay_filter($is_allow, $pay_type) {
// 逻辑判断
return $is_allow;
}
2. 订单处理钩子
// 订单创建后
add_action('order_created', 'my_order_created_callback', 10, 1);
// 订单支付成功
add_action('payment_order_success', 'my_payment_success_callback', 10, 2);
// 订单关闭
add_action('order_closed', 'my_order_closed_callback', 10, 1);
// 订单退款
add_action('order_refunded', 'my_order_refunded_callback', 10, 1);
3. 商城功能钩子
// 商品添加到购物车
add_action('shop_add_to_cart', 'my_cart_add_callback', 10, 1);
// 购物车更新
add_action('shop_cart_updated', 'my_cart_update_callback', 10, 1);
// 订单发货
add_action('shop_order_shipped', 'my_shipping_callback', 10, 1);
💳 示例1:添加新的支付网关
<?php
/**
* 自定义支付方式示例
*/
// 注册支付方式
add_filter('zibpay_payment_methods', 'custom_register_payment', 10, 2);
function custom_register_payment($methods, $pay_type) {
$methods['custom_pay'] = [
'name' => '自定义支付',
'img' => '<img src="/path/to/logo.png" alt="Custom Pay">',
];
return $methods;
}
// 处理支付请求
add_action('wp_ajax_initiate_custom_pay', 'custom_initiate_payment');
add_action('wp_ajax_nopriv_initiate_custom_pay', 'custom_initiate_payment');
function custom_initiate_payment() {
// 验证nonce
check_ajax_referer('custom_pay_nonce');
// 获取订单数据
$payment_id = isset($_POST['payment_id']) ? intval($_POST['payment_id']) : 0;
if (!$payment_id) {
wp_send_json_error(['msg' => '参数错误']);
}
// 获取支付数据
$payment_data = zibpay::get_payment($payment_id);
if (!$payment_data || $payment_data['status'] != 0) {
wp_send_json_error(['msg' => '订单无效']);
}
// 构建支付参数
$pay_args = [
'order_id' => $payment_data['order_num'],
'amount' => $payment_data['pay_price'],
'notify_url' => home_url('/custom-pay/notify'),
'return_url' => home_url('/custom-pay/return'),
// 其他支付参数
];
// 调用支付接口
$pay_url = custom_build_payment_url($pay_args);
wp_send_json_success([
'pay_url' => $pay_url,
'type' => 'redirect', // redirect 或 qrcode
]);
}
// 支付异步通知处理
add_action('template_redirect', 'custom_pay_notify_handler');
function custom_pay_notify_handler() {
if (!isset($_GET['custom_pay_notify'])) {
return;
}
// 验证签名
if (!custom_verify_signature($_POST)) {
echo 'FAIL';
exit;
}
// 获取订单号
$order_num = sanitize_text_field($_POST['order_id']);
// 获取订单
$payment = zibpay::get_payment_by_order_num($order_num);
if (!$payment || $payment['status'] == 1) {
echo 'SUCCESS';
exit;
}
// 更新订单状态
zibpay::payment_success($payment['id'], 'custom_pay');
echo 'SUCCESS';
exit;
}
// 支付返回处理
add_action('template_redirect', 'custom_pay_return_handler');
function custom_pay_return_handler() {
if (!isset($_GET['custom_pay_return'])) {
return;
}
$order_num = sanitize_text_field($_GET['order_id']);
// 跳转到订单页面
wp_safe_redirect(zib_get_user_center_url('orders'));
exit;
}
示例2:商城功能扩展
<?php
/**
* 商城功能扩展示例
*/
// 添加自定义商品字段
add_action('shop_product_options', 'custom_add_product_field');
function custom_add_product_field() {
?>
<div class="mb10">
<label class="mb6 block">自定义库存字段</label>
<input type="text" name="custom_stock" class="form-control" value="<?php echo esc_attr(get_post_meta(get_the_ID(), '_custom_stock', true)); ?>">
</div>
<?php
}
// 保存自定义字段
add_action('shop_save_product', 'custom_save_product_field');
function custom_save_product_field($post_id) {
if (isset($_POST['custom_stock'])) {
update_post_meta($post_id, '_custom_stock', sanitize_text_field($_POST['custom_stock']));
}
}
// 修改商品显示
add_filter('shop_product_display', 'custom_modify_product_display', 10, 2);
function custom_modify_product_display($content, $product_id) {
$custom_stock = get_post_meta($product_id, '_custom_stock', true);
if ($custom_stock) {
$content .= '<div class="custom-stock-info">自定义库存: ' . esc_html($custom_stock) . '</div>';
}
return $content;
}
// 订单创建时添加自定义逻辑
add_action('order_created', 'custom_order_created_logic', 10, 1);
function custom_order_created_logic($order) {
if ($order['order_type'] != 10) { // 10 = 商城订单
return;
}
$product_id = $order['post_id'];
$custom_stock = get_post_meta($product_id, '_custom_stock', true);
// 自定义库存处理逻辑
if ($custom_stock) {
// 更新自定义库存
update_post_meta($product_id, '_custom_stock', intval($custom_stock) - $order['count']);
}
}
🎖️ 示例3:会员功能扩展
<?php
/**
* 会员功能扩展示例
*/
// 添加会员专属功能
add_action('user_vip_purchased', 'custom_vip_purchased_callback', 10, 3);
function custom_vip_purchased_callback($user_id, $vip_level, $expire_time) {
// 会员购买后的处理逻辑
// 例如:发送欢迎邮件、添加专属徽章等
update_user_meta($user_id, '_custom_vip_badge', true);
}
// 添加会员专属内容
add_action('wp_head', 'custom_vip_content_check');
function custom_vip_content_check() {
if (is_single()) {
$post_id = get_the_ID();
$is_vip_only = get_post_meta($post_id, '_vip_only', true);
if ($is_vip_only == 'yes' && !zib_is_vip()) {
// 非会员显示提示
add_filter('the_content', 'custom_vip_only_content');
}
}
}
function custom_vip_only_content($content) {
return '<div class="vip-only-notice">
<div class="muted-box padding-20 text-center">
<i class="fa fa-lock fa-3x c-yellow mb10"></i>
<h3 class="mb10">此内容仅限会员查看</h3>
<p>购买会员即可解锁全部内容</p>
<a href="' . esc_url(zib_get_user_center_url('vip')) . '" class="but jb-yellow mt10">立即开通</a>
</div>
</div>';
}
📁 推荐的插件结构
zibll-custom-plugin/
├── zibll-custom-plugin.php # 主插件文件
├── includes/
│ ├── payment-gateway.php # 支付网关
│ ├── shop-extension.php # 商城扩展
│ ├── vip-extension.php # 会员扩展
│ └── functions.php # 通用函数
├── assets/
│ ├── css/
│ └── js/
└── templates/
└── custom-template.php
🔧 开发建议
1.使用子比主题内置函数:
zib_opt() – 获取主题选项
zibpay::get_order() – 获取订单
zib_is_vip() – 判断会员状态
zib_get_user_center_url() – 获取用户中心链接
2.遵循WordPress最佳实践:
使用正确的钩子和过滤器
做好安全验证(nonce, sanitize)
使用WordPress数据库API
3.兼容性检查:
if (!function_exists('zib_opt')) {
// 子比主题未激活的处理
}
📝 快速开始模板
创建一个新插件的主文件模板:
<?php
/**
* Plugin Name: 你的插件名称
* Plugin URI: https://your-site.com
* Description: 为子比主题开发的插件
* Version: 1.0.0
* Author: Your Name
* License: GPL v2 or later
*/
if (!defined('ABSPATH')) {
exit;
}
// 检查子比主题
if (!function_exists('zib_opt')) {
add_action('admin_notices', function() {
echo '<div class="notice notice-error"><p>请先激活子比主题!</p></div>';
});
return;
}
// 你的插件代码...
若您发现内容有误或已失效,请在下方 留言 反馈,我会及时核实更新。
© 版权声明
本网站部分文件及内容来自互联网,版权归原作者所有。转载需授权,侵权必究。部分内容受《网络出版服务管理规定》保护,未经许可禁止商业使用。
THE END








暂无评论内容