render_commerce_column($user_id); } if ($column_name !== 'aksrt_credits_balance') { return $output; } if (!class_exists('AKSRT_Credits')) { return '—'; } $balance = AKSRT_Credits::balance($user_id); return '' . esc_html((string) $balance) . ''; } /** * Compact commerce snapshot: VIP, revenue, rebate, download logs link. */ private function render_commerce_column(int $user_id): string { $bits = []; if (function_exists('aksrt_get_user_vip_level')) { $lv = (int) aksrt_get_user_vip_level($user_id); if ($lv > 0) { $bits[] = 'VIP' . esc_html((string) $lv) . ''; } } if (class_exists('AKSRT_Revenue')) { $stats = AKSRT_Revenue::get_instance()->get_stats($user_id); $pending = (float) ($stats['pending'] ?? 0); $total = (float) ($stats['total'] ?? 0); if ($total > 0 || $pending > 0) { $bits[] = sprintf( /* translators: 1 total 2 pending */ esc_html__('分成 ¥%1$s(待结 ¥%2$s)', 'aksrt'), number_format($total, 2), number_format($pending, 2) ); $bits[] = '' . esc_html__('分成明细', 'aksrt') . ''; } } if (class_exists('AKSRT_Rebate')) { $list = AKSRT_Rebate::get_instance()->get_list(['user_id' => $user_id, 'limit' => 1]); $total_r = (int) ($list['total'] ?? 0); if ($total_r > 0) { $bits[] = sprintf(esc_html__('返佣 %d 笔', 'aksrt'), $total_r); $bits[] = '' . esc_html__('返佣', 'aksrt') . ''; } } $bits[] = '' . esc_html__('下载记录', 'aksrt') . ''; $bits[] = '' . esc_html__('订单', 'aksrt') . ''; if (!$bits) { return '—'; } return '
' . implode('
', $bits) . '
'; } public function make_balance_sortable(array $columns): array { $columns['aksrt_credits_balance'] = 'aksrt_credits_balance'; return $columns; } public function sort_users_by_credits($query): void { if (!is_admin()) { return; } if ($query->get('orderby') !== 'aksrt_credits_balance') { return; } $query->set('meta_key', 'aksrt_credits'); $query->set('orderby', 'meta_value_num'); } // ========== 用户列表:行操作 ========== public function add_row_actions(array $actions, WP_User $user): array { if (!$this->can_manage_credits()) { return $actions; } $edit_url = get_edit_user_link($user->ID); if ($edit_url) { $currency_name = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_currency_name() : __('积分', 'aksrt'); $actions['aksrt_edit_credits'] = sprintf( '%s', esc_url($edit_url), esc_html(sprintf(__('调整%s', 'aksrt'), $currency_name)) ); } $actions['aksrt_user_dl_logs'] = sprintf( '%s', esc_url(admin_url('admin.php?page=aksrt_download_logs&user_id=' . (int) $user->ID)), esc_html__('下载记录', 'aksrt') ); return $actions; } // ========== 用户编辑页:积分管理区块 ========== public function render_user_credits_section(WP_User $user): void { if (!class_exists('AKSRT_Credits')) { return; } $balance = AKSRT_Credits::balance((int) $user->ID); $can_manage = $this->can_manage_credits(); $currency_name = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_currency_name() : __('积分', 'aksrt'); ?>

(int) $user->ID, 'page' => 1, 'per_page' => 20]); $items = $log['items'] ?? []; $reason_labels = [ 'register' => __('注册赠送', 'aksrt'), 'signin' => __('每日签到', 'aksrt'), 'comment' => __('评论奖励', 'aksrt'), 'invite' => __('邀请奖励', 'aksrt'), 'invitee' => __('被邀请奖励', 'aksrt'), 'download' => __('下载消费', 'aksrt'), 'admin' => __('管理员调整', 'aksrt'), ]; ?>

0 ? '+' : '') . $delta); ?>

can_manage_credits() || !class_exists('AKSRT_Credits')) { return; } if (!current_user_can('edit_user', $user_id)) { return; } if (!isset($_POST['_aksrt_credits_nonce'])) { return; } $nonce = sanitize_text_field((string) $_POST['_aksrt_credits_nonce']); if (!wp_verify_nonce($nonce, 'aksrt_user_credits_adjust_' . $user_id)) { return; } $delta = isset($_POST['aksrt_credits_delta']) ? (int) $_POST['aksrt_credits_delta'] : 0; $reason = isset($_POST['aksrt_credits_reason']) ? sanitize_text_field((string) wp_unslash($_POST['aksrt_credits_reason'])) : ''; if ($delta === 0) { return; } $currency_name = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_currency_name() : __('积分', 'aksrt'); if ($reason === '') { set_transient('aksrt_admin_notice_' . get_current_user_id(), [[ 'type' => 'error', 'msg' => sprintf(__('调整%s时请填写原因。', 'aksrt'), $currency_name), ]], 30); return; } if ($delta > 0) { $result = AKSRT_Credits::add($user_id, $delta, 'admin', ['type' => 'user', 'id' => get_current_user_id()], $reason); } else { $result = AKSRT_Credits::deduct($user_id, abs($delta), 'admin', ['type' => 'user', 'id' => get_current_user_id()], $reason); } if (is_wp_error($result)) { set_transient('aksrt_admin_notice_' . get_current_user_id(), [[ 'type' => 'error', 'msg' => $result->get_error_message(), ]], 30); return; } set_transient('aksrt_admin_notice_' . get_current_user_id(), [[ 'type' => 'success', 'msg' => sprintf(__('%s调整成功,当前余额:%d', 'aksrt'), $currency_name, (int) $result), ]], 30); } }