diff --git a/functions.php b/functions.php index c1b8e16f..5be1371d 100644 --- a/functions.php +++ b/functions.php @@ -360,6 +360,9 @@ if (class_exists('AKSRT_Email_Rollback')) { if (class_exists('AKSRT_User_Credits_Admin')) { AKSRT_User_Credits_Admin::get_instance()->init(); } +if (class_exists('AKSRT_User_Balance_Admin')) { + AKSRT_User_Balance_Admin::get_instance()->init(); +} // WordPress 原生侧栏:支付/订单运营中心(zibll zibpay 对齐) if (is_admin() && class_exists('AKSRT_Admin_Pay_Menus')) { diff --git a/inc/classes/class-aksrt-user-balance-admin.php b/inc/classes/class-aksrt-user-balance-admin.php new file mode 100644 index 00000000..06f6bde5 --- /dev/null +++ b/inc/classes/class-aksrt-user-balance-admin.php @@ -0,0 +1,162 @@ +' . esc_html(AKSRT_Balance::format(AKSRT_Balance::balance($user_id))) . ''; + } + + public function sortable(array $columns): array { + $columns['aksrt_wallet_balance'] = 'aksrt_wallet_balance'; + return $columns; + } + + public function sort_users($query): void { + if (!is_admin() || $query->get('orderby') !== 'aksrt_wallet_balance') { + return; + } + $query->set('meta_key', 'aksrt_balance'); + $query->set('orderby', 'meta_value_num'); + } + + public function render_section(WP_User $user): void { + if (!class_exists('AKSRT_Balance') || !AKSRT_Balance::enabled()) { + return; + } + $balance = AKSRT_Balance::balance((int) $user->ID); + $can = $this->can_manage(); + $log = AKSRT_Balance::get_log(['user_id' => (int) $user->ID, 'page' => 1, 'per_page' => 8]); + ?> + +

+ + + + + + + + + + + + + + + + + can_manage() || !class_exists('AKSRT_Balance') || !AKSRT_Balance::enabled()) { + return; + } + if (empty($_POST['_aksrt_balance_nonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash((string) $_POST['_aksrt_balance_nonce'])), 'aksrt_user_balance_adjust_' . $user_id)) { + return; + } + if (!isset($_POST['aksrt_balance_delta']) || $_POST['aksrt_balance_delta'] === '') { + return; + } + $delta = round((float) wp_unslash($_POST['aksrt_balance_delta']), 2); + if (abs($delta) < 0.0001) { + return; + } + $reason = isset($_POST['aksrt_balance_reason']) + ? sanitize_text_field(wp_unslash((string) $_POST['aksrt_balance_reason'])) + : __('管理员调整', 'aksrt'); + if ($delta > 0) { + $result = AKSRT_Balance::add($user_id, $delta, 'admin', ['type' => 'user', 'id' => get_current_user_id()], $reason); + } else { + $result = AKSRT_Balance::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' => __('现金余额已更新', 'aksrt'), + ]], 30); + } +}