'credits', 'signin' => 'credits', 'revenue' => 'revenue']; $tab = $aliases[$tab] ?? $tab; $path_tab = $tab === 'credits' ? 'balance' : $tab; return get_option('permalink_structure') ? home_url('/user/' . trailingslashit($path_tab)) : add_query_arg(['aksrt_user_center' => '1', 'aksrt_user_center_tab' => $tab], home_url('/')); } endif; if (!function_exists('aksrt_get_new_post_url')) : /** * 前台写文章/投稿页 URL(模板 templates/pages/page-submit.php)。 * * @param int $edit_id 编辑中的文章 ID;0 表示新建。 * @return string 未指派页面时返回空串。 */ function aksrt_get_new_post_url(int $edit_id = 0): string { if (class_exists('\AKSRT\Settings\Settings')) { $submit = \AKSRT\Settings\Settings::get_submit_settings(); if (isset($submit['enabled']) && empty($submit['enabled'])) { return ''; } } $url = function_exists('aksrt_get_template_url') ? aksrt_get_template_url('submit') : home_url('/submit/'); if ($edit_id > 0) { $url = add_query_arg('edit', $edit_id, $url); } return $url; } endif; if (!function_exists('aksrt_get_messages_rewrite_slug')) : /** 获取消息中心当前唯一的重写别名。 */ function aksrt_get_messages_rewrite_slug(): string { $settings = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::notification_settings() : []; $slug = sanitize_key((string) ($settings['slug'] ?? 'message')); return $slug !== '' ? $slug : 'message'; } endif; if (!function_exists('aksrt_get_messages_page_url')) : /** 消息中心 URL。 */ function aksrt_get_messages_page_url(string $view = 'unread'): string { if (class_exists('\AKSRT\Settings\Settings') && !\AKSRT\Settings\Settings::message_enabled()) { return ''; } $suffixes = [ 'unread' => '', 'posts' => 'posts', 'like' => 'like', 'system' => 'system', ]; $view = sanitize_key($view); $suffix = $suffixes[$view] ?? $suffixes['unread']; $path = '/' . aksrt_get_messages_rewrite_slug() . ($suffix !== '' ? '/' . $suffix : '') . '/'; return home_url($path); } endif; if (!function_exists('aksrt_get_user_home_url')) : /** * 获取公开用户主页 URL(/user/{nicename}/) * * @param WP_User|int|string|null $user 用户对象、ID、nicename 或 null(当前用户) * @return string */ function aksrt_get_user_home_url($user = null): string { $target = null; $mode = class_exists('\\AKSRT\\Settings\\Settings') ? (string) (\AKSRT\Settings\Settings::get_user_home_settings()['route_identifier'] ?? 'nicename') : 'nicename'; if ($user instanceof WP_User) { $target = $user; } elseif (is_int($user) && $user > 0) { $target = get_userdata($user); } elseif (is_numeric($user) && (int) $user > 0) { $target = get_userdata((int) $user); } elseif (is_string($user) && $user) { $target = get_user_by('slug', $user); } else { $target = wp_get_current_user(); } if (!$target instanceof WP_User || !$target->ID) { return home_url('/'); } $identifier = $mode === 'uid' ? (string) $target->ID : $target->user_nicename; if (!get_option('permalink_structure')) { return add_query_arg('aksrt_author', rawurlencode($identifier), home_url('/')); } return home_url('/author/' . trailingslashit($identifier)); } endif; if (!function_exists('aksrt_resolve_public_user')) : function aksrt_resolve_public_user(string $identifier): ?WP_User { $mode = class_exists('\\AKSRT\\Settings\\Settings') ? (string) (\AKSRT\Settings\Settings::get_user_home_settings()['route_identifier'] ?? 'nicename') : 'nicename'; if ($mode === 'uid') { return ctype_digit($identifier) && (int) $identifier > 0 ? get_userdata((int) $identifier) ?: null : null; } return get_user_by('slug', sanitize_title($identifier)) ?: null; } endif; if (!function_exists('aksrt_is_user_center_page')) : /** * 判断当前是否为本人中心页面 */ function aksrt_is_user_center_page(): bool { return (bool) get_query_var('aksrt_user_center') || (is_page_template('templates/pages/page-profile.php') && !(bool) get_query_var('aksrt_author_identifier')); } endif; if (!function_exists('aksrt_is_user_home_page')) : /** * 判断当前是否为公开用户主页 */ function aksrt_is_user_home_page(): bool { return (bool) get_query_var('aksrt_author_identifier') || is_page_template('templates/pages/page-user-home.php'); } endif; if (!function_exists('aksrt_get_profile_url')) : /** * 兼容层:获取用户主页 URL * * @deprecated 使用 aksrt_get_user_center_url() 或 aksrt_get_user_home_url() 替代 * @param WP_User|int|string|null $user * @return string */ function aksrt_get_profile_url($user = null): string { // 无参调用 → 当前用户主页(公开页) if ($user === null) { return aksrt_get_user_home_url(); } return aksrt_get_user_home_url($user); } endif; if (!function_exists('aksrt_get_sign_page_url')) : /** * Get the only public authentication page URL. * * @param string $tab * @param array $args */ function aksrt_get_sign_page_url(string $tab = 'signin', array $args = []): string { $tab = aksrt_normalize_auth_tab($tab); return add_query_arg(['tab' => $tab] + $args, home_url('/sign/')); } /** * Determine whether the current request is served by the unified auth experience. */ function aksrt_is_auth_page_request(): bool { return (bool) get_query_var('aksrt_sign') || is_page_template('templates/pages/page-sign.php'); } endif; if (!function_exists('aksrt_get_login_url')) : /** 获取登录页 URL */ function aksrt_get_login_url($redirect = '') { $url = aksrt_get_sign_page_url('signin'); if ($redirect) { $url = add_query_arg('redirect_to', urlencode($redirect), $url); } return $url; } endif; if (!function_exists('aksrt_get_register_url')) : /** 获取注册页 URL */ function aksrt_get_register_url() { return aksrt_get_sign_page_url('signup'); } endif; if (!function_exists('aksrt_get_bind_url')) : /** 获取绑定账号页面 URL */ function aksrt_get_bind_url($transient_key = '') { $url = aksrt_get_sign_page_url('bind'); if ($transient_key) { $url = add_query_arg('obk', $transient_key, $url); } return $url; } endif; if (!function_exists('aksrt_get_logout_url')) : /** 获取唯一退出登录 URL。 */ function aksrt_get_logout_url($redirect = '') { $target = is_string($redirect) && $redirect !== '' ? $redirect : home_url('/'); $url = add_query_arg( ['redirect_to' => $target], home_url('/logout/') ); return wp_nonce_url($url, 'aksrt-logout'); } endif; if (!function_exists('aksrt_get_reset_password_url')) : /** * 获取重置密码页面 URL * * @return string */ function aksrt_get_reset_password_url(): string { return aksrt_get_sign_page_url('resetpassword'); } endif; // Notifications live in the same user/ domain; bootstrap also loads it. if (!class_exists('AKSRT_User_Notifications', false) /* procedural module */ && file_exists(dirname(__DIR__) . '/user-notifications.php')) { require_once dirname(__DIR__) . '/user-notifications.php'; }