WordPress子比主题(zibll)开发指南(二):核心函数、类与数据库

发布于 更新于
10

一、核心函数 (Functions) 参考

子比主题封装了大量实用函数,您可以直接调用以获取数据或执行操作。

1.1 主题核心函数

函数名 说明 示例
_pz($option_name, $default) 获取主题选项值(快捷函数) $logo = _pz('logo_ico');
zib_get_option($option_name, $default) 获取主题选项值(完整函数) $site_name = zib_get_option('name');
zib_send_json_success($data) 发送成功的AJAX JSON响应 zib_send_json_success(['msg' => '操作成功']);
zib_send_json_error($message) 发送错误的AJAX JSON响应 zib_send_json_error('参数错误');

1.2 支付相关函数

函数名 说明
zibpay_initiate_pay($order_data) 发起支付,返回支付参数
zibpay_get_order_status($order_id) 获取指定订单的状态
zibpay_get_user_balance($user_id) 获取用户余额
zibpay_get_user_points($user_id) 获取用户积分
zibpay_get_user_vip_level($user_id) 获取用户VIP等级

1.3 用户与内容函数

函数名 说明
zib_get_user_center_url($user_id) 获取用户中心链接
zib_get_user_avatar($user_id, $size) 获取用户头像
zib_get_user_cover_img($user_id) 获取用户封面图片
zib_get_post_like_count($post_id) 获取文章点赞数
zibpay_is_posts_paid($post_id) 判断当前用户是否已付费购买文章

函数调用示例:

// 获取当前用户信息
$user_id = get_current_user_id();
if($user_id) {
$user_name = zib_get_user_name($user_id);
$user_avatar = zib_get_user_avatar($user_id, 50);
$vip_level = zibpay_get_user_vip_level($user_id);
echo "欢迎,{$user_name}(VIP{$vip_level})";
}

// 检查文章付费状态并显示相应内容
if (zibpay_is_posts_paid(get_the_ID())) {
the_content(); // 显示完整内容
} else {
echo zibpay_get_posts_pay_button(get_the_ID()); // 显示购买按钮
}

二、核心类 (Classes)

子比主题使用面向对象的方式封装了核心功能模块,以下是主要的类及其方法。

2.1 订单管理类 ZibOrder

用于处理所有支付订单的创建、查询、更新。

静态方法 说明
ZibOrder::create_db() 创建订单数据表(安装时调用)
ZibOrder::get_row($where) 获取单条订单记录
ZibOrder::update_order($order_id, $data) 更新订单信息
ZibOrder::payment_order($order_id, $payment_data) 处理订单支付成功逻辑
ZibOrder::close_order($order_id) 关闭订单

使用示例:

// 查询订单
$order = ZibOrder::get_row(['order_num' => '20231001123456']);
if($order) {
echo "订单状态:" . $order->status;
}

// 更新订单
ZibOrder::update_order($order_id, [
'status' => 'completed',
'pay_time' => current_time('mysql')
]);

2.2 消息管理类 ZibMsg

用于处理用户间的消息通知。

静态方法 说明
ZibMsg::add($msg_data) 添加一条新消息
ZibMsg::get_row($where) 获取单条消息
ZibMsg::get_count($user_id, $read = false) 获取用户未读/全部消息数

使用示例:

// 给用户发送系统通知
ZibMsg::add([
'send_user' => 0, // 0 代表系统
'receive_user' => $user_id,
'type' => 'system',
'title' => '积分到账通知',
'content' => '您收到了100积分奖励。',
]);

2.3 数据库操作类 ZibDb

提供了流畅的查询构造器,用于安全地进行数据库操作。

方法 说明 示例
::name($table_name) 指定表名 ZibDb::name('order')
::where($conditions) 添加查询条件 ->where(['status' => 1])
::get() 执行查询,返回结果集 ->get()
::find() 执行查询,返回单条记录 ->find()
::insert($data) 插入数据 ->insert($order_data)
::update($data) 更新数据 ->update(['status'=>2])

链式调用示例:

// 查询用户最近10条已支付的订单
$orders = ZibDb::name('order')
->where(['user_id' => $user_id, 'status' => 'paid'])
->orderBy('pay_time', 'DESC')
->limit(10)
->get();

// 更新卡密状态为已使用
ZibDb::name('card_password')
->where(['card' => $card_number, 'password' => $password])
->update(['status' => 'used', 'use_time' => current_time('mysql')]);

三、数据库表结构

了解核心数据表结构有助于进行高级自定义查询和数据操作。

3.1 核心数据表概览

表名 主要用途
zibpay_order 存储所有支付订单
zibpay_order_meta 存储订单的扩展元数据
zibpay_card_password 存储卡密信息
zib_message 存储用户消息和系统通知

3.2 zibpay_order 订单表结构

这是最重要的表之一,主要字段如下:

字段名 类型 说明
id BIGINT 自增主键,订单ID
order_num VARCHAR(32) 唯一订单号,用于业务查询
user_id BIGINT 下单用户ID
order_type VARCHAR(20) 订单类型:vipyuedushop
order_price DECIMAL(10,2) 订单金额
status VARCHAR(20) 状态:pending(待支付)、paid(已支付)、closed(已关闭)等
create_time DATETIME 订单创建时间
pay_time DATETIME 支付成功时间

3.3 zib_message 消息表结构

字段名 类型 说明
id BIGINT 自增主键,消息ID
send_user BIGINT 发送者用户ID,0为系统
receive_user BIGINT 接收者用户ID
type VARCHAR(20) 消息类型:systemusercomment
title VARCHAR(255) 消息标题
content TEXT 消息内容
status INT 阅读状态:0=未读,1=已读

3.4 自定义查询示例

global $wpdb;
// 查询今日订单总额
$today_start = date('Y-m-d 00:00:00');
$today_revenue = $wpdb->get_var($wpdb->prepare(
"SELECT SUM(order_price) FROM {$wpdb->prefix}zibpay_order WHERE status = 'paid' AND pay_time >= %s",
$today_start
));

// 查询用户的订单统计
$user_order_stats = $wpdb->get_row($wpdb->prepare(
"SELECT 
COUNT(*) as total_orders,
SUM(CASE WHEN status = 'paid' THEN order_price ELSE 0 END) as total_paid
FROM {$wpdb->prefix}zibpay_order 
WHERE user_id = %d",
$user_id
));

四、性能优化机制

子比主题内置了完善的缓存机制以提升性能,开发者应充分利用。

4.1 对象缓存 (Object Cache)

主题使用WordPress对象缓存API来缓存频繁查询的数据。

// 缓存读取模式
$cache_data = wp_cache_get($cache_key, 'zib_cache_group');
if (false !== $cache_data) {
return $cache_data; // 命中缓存,直接返回
}

// 未命中缓存,执行数据库查询
$data = expensive_database_query();

// 将结果写入缓存,有效期1小时
wp_cache_set($cache_key, $data, 'zib_cache_group', 3600);
return $data;

主要缓存组:

  • post_pay_cuont - 文章付费次数
  • user_order_data - 用户订单数据
  • zibpay_ordermeta - 订单元数据

4.2 静态变量缓存

对于单次请求内多次调用的函数,使用静态变量缓存。

function zibpay_get_pay_mark() {
// 静态变量,只在第一次调用时查询选项
static $pay_mark = null;
if (is_null($pay_mark)) {
$pay_mark = _pz('pay_mark') ?: '¥';
}
return $pay_mark;
}

五、开发注意事项

  1. 安全性:所有用户输入必须使用 sanitize_text_field()intval() 等函数处理,数据库查询使用 prepare() 语句。
  2. 兼容性检查:在调用主题函数前,使用 function_exists() 进行检查。
  3. 缓存清理:当自定义代码修改了数据时,记得清理相关缓存 wp_cache_delete($key, $group)
  4. 错误处理:使用主题提供的 zib_send_json_error() 或 zib_send_json_success() 返回AJAX响应。

示例:安全的AJAX处理函数

add_action('wp_ajax_my_custom_action', 'handle_my_custom_action');
function handle_my_custom_action() {
// 1. 验证Nonce
if (!wp_verify_nonce($_POST['nonce'], 'my_action_nonce')) {
zib_send_json_error('安全验证失败');
}

// 2. 验证权限
if (!current_user_can('edit_posts')) {
zib_send_json_error('权限不足');
}

// 3. 清理输入
$post_id = intval($_POST['post_id']);
$action = sanitize_text_field($_POST['action_type']);

// 4. 执行业务逻辑...

// 5. 返回标准响应
zib_send_json_success(['message' => '操作成功', 'data' => $result]);
}

(未完待续,下一部分将详细介绍API调用、自定义内容类型开发与实战示例)

0 赞
0 收藏
分享
0 讨论
反馈
© 版权声明
0 / 600
0 条评论
热门最新
我的会员
加入会员后,您将获得更多权益!