$uid, 'display_name' => sanitize_text_field( $_POST['nickname'] ) ] ); } if ( isset( $_POST['description'] ) ) { wp_update_user( [ 'ID' => $uid, 'description' => sanitize_textarea_field( $_POST['description'] ) ] ); } $contacts = []; if ( isset( $_POST['contacts'] ) && is_array( $_POST['contacts'] ) ) { foreach ( $_POST['contacts'] as $c ) { $u = isset( $c['url'] ) ? esc_url_raw( $c['url'] ) : ''; $i = isset( $c['icon'] ) ? sanitize_key( $c['icon'] ) : ''; // 清理 FA5 类名前缀:fab fa-xxx / fabfa-xxx / fa-xxx → xxx $i = preg_replace('/^(fab|fas|far)[\s-]*/', '', $i); $i = preg_replace('/^fa[\s-]*/', '', $i); $i = preg_replace('/^[\s-]+/', '', $i); $i = trim( $i, '- ' ); if ( ! $u || ! $i ) continue; $n = aksrt_icon_key_to_name( $i ); $contacts[] = [ 'name' => $n, 'url' => $u, 'icon' => $i ]; } } update_user_meta( $uid, 'aksrt_user_contacts', $contacts ); } wp_safe_redirect( add_query_arg( 'saved', '1', aksrt_get_user_center_url() ) ); exit; } // ─── 确定目标用户 ───────────────────────────────────────────── // 来源: /user/{昵称} (自定义重写规则) // 注意: get_queried_object_id() 在页面中返回的是页面 ID 而非用户 ID $target_user_id = 0; $target_user_nicename = get_query_var('user_nicename'); if ( $target_user_nicename ) { $user = get_user_by( 'slug', $target_user_nicename ); if ( $user ) { $target_user_id = $user->ID; } } // 兜底:检查 queried object if ( ! $target_user_id ) { $qid = get_queried_object_id(); if ( $qid && get_userdata( $qid ) ) { $target_user_id = $qid; } } $current_user = wp_get_current_user(); $target_user = $target_user_id ? get_userdata( $target_user_id ) : null; $is_own_profile = false; if ( ! $target_user ) { if ( is_user_logged_in() ) { $target_user = $current_user; $target_user_id = $current_user->ID; $is_own_profile = true; } else { wp_safe_redirect( aksrt_get_login_url( aksrt_get_user_center_url() ) ); exit; } } elseif ( is_user_logged_in() && (int) $current_user->ID === (int) $target_user->ID ) { $is_own_profile = true; } if ( $target_user_nicename && ! $is_own_profile && function_exists( 'aksrt_get_user_home_url' ) ) { wp_safe_redirect( aksrt_get_user_home_url( $target_user ) ); exit; } $user_id = $target_user->ID; $post_count = (int) count_user_posts( $user_id, 'post', true ); $comment_count = (int) get_comments( [ 'user_id' => $user_id, 'count' => true, 'status' => 'approve' ] ); // 加载用户自定义联系方式 $user_contacts = get_user_meta( $user_id, 'aksrt_user_contacts', true ) ?: []; if ( ! is_array( $user_contacts ) ) $user_contacts = []; $user_center_settings = class_exists( 'AKSRT_Settings' ) ? AKSRT_Settings::get_user_center_settings() : [ 'tabs' => [ 'profile', 'posts', 'comments', 'favorites' ], 'avatar_upload' => true, 'cover_upload' => true, 'social_links' => true, ]; $user_home_settings = class_exists( 'AKSRT_Settings' ) ? AKSRT_Settings::get_user_home_settings() : [ 'tabs' => [ 'posts', 'comments', 'favorites' ], 'sidebar' => true, 'cover' => true, 'follow' => true, 'posts_per_page' => 10, ]; $user_home_manager = class_exists( 'AKSRT_User_Home' ) ? AKSRT_User_Home::get_instance() : null; $profile_signals = $user_home_manager ? $user_home_manager->get_profile_signals( $user_id ) : []; $profile_notice = $user_home_manager ? $user_home_manager->get_profile_notice( $user_id ) : []; $show_report_button = $user_home_manager ? $user_home_manager->show_report_entry() : false; $public_visible_tabs = $user_home_manager ? $user_home_manager->get_visible_tabs( false ) : [ 'posts' => [ 'label' => __( '文章', 'aksrt' ) ], 'comments' => [ 'label' => __( '评论', 'aksrt' ) ], 'favorites' => [ 'label' => __( '收藏', 'aksrt' ) ], ]; // 用户自定义背景图 $user_background_url = get_user_meta( $user_id, 'aksrt_background_image', true ) ?: ''; $allow_bg_upload = $is_own_profile && ! empty( $user_center_settings['cover_upload'] ) && class_exists( 'AKSRT_Settings' ) && aksrt_get_setting( 'allow_background_upload', false ); $show_avatar_edit = $is_own_profile && ! empty( $user_center_settings['avatar_upload'] ); $avatar_settings_url = admin_url( 'profile.php' ); $public_home_url = function_exists( 'aksrt_get_user_home_url' ) ? aksrt_get_user_home_url( $target_user ) : home_url( '/' ); $favorite_post_ids = function_exists( 'aksrt_get_user_interaction_posts' ) ? aksrt_get_user_interaction_posts( '_aksrt_favorite_posts', $user_id ) : []; $favorite_count = count( $favorite_post_ids ); $notification_unread_count = $is_own_profile && function_exists( 'aksrt_get_user_unread_notification_count' ) ? aksrt_get_user_unread_notification_count( $user_id ) : 0; $dashboard_tabs = class_exists( 'AKSRT_User_Center' ) ? AKSRT_User_Center::get_instance()->get_dashboard_tabs() : [ 'profile' => [ 'label' => __( '个人信息', 'aksrt' ), 'icon' => 'user' ], 'posts' => [ 'label' => __( '我的文章', 'aksrt' ), 'icon' => 'file-alt' ], 'comments' => [ 'label' => __( '我的评论', 'aksrt' ), 'icon' => 'comment' ], 'favorites' => [ 'label' => __( '我的收藏', 'aksrt' ), 'icon' => 'star' ], 'settings' => [ 'label' => __( '账号设置', 'aksrt' ), 'icon' => 'cog' ], ]; $dashboard_tab_keys = array_keys( $dashboard_tabs ); $public_tab_keys = array_keys( $public_visible_tabs ); if ( empty( $public_tab_keys ) ) { $public_visible_tabs = [ 'posts' => [ 'label' => __( '文章', 'aksrt' ) ], 'comments' => [ 'label' => __( '评论', 'aksrt' ) ], 'favorites' => [ 'label' => __( '收藏', 'aksrt' ) ], ]; $public_tab_keys = array_keys( $public_visible_tabs ); } $public_tab_labels = [ 'posts' => __( '文章', 'aksrt' ), 'comments' => __( '评论', 'aksrt' ), 'favorites' => __( '收藏', 'aksrt' ), ]; foreach ( $public_visible_tabs as $public_tab_key => $public_tab_config ) { if ( ! empty( $public_tab_config['label'] ) ) { $public_tab_labels[ $public_tab_key ] = (string) $public_tab_config['label']; } } $public_tab_counts = [ 'posts' => $post_count, 'comments' => $comment_count, 'favorites' => $favorite_count, ]; // 消息中心页面 URL $messages_page = get_pages( [ 'meta_key' => '_wp_page_template', 'meta_value' => 'templates/pages/page-messages.php', 'number' => 1 ] ); $messages_url = ! empty( $messages_page ) ? get_permalink( $messages_page[0] ) : aksrt_get_user_center_url( 'notif' ); // ─── 文章状态计数(仅自己模式;用于状态筛选 chip) ──────────── $user_status_counts = [ 'publish' => 0, 'draft' => 0, 'pending' => 0, 'private' => 0, ]; if ( $is_own_profile ) { global $wpdb; $rows = $wpdb->get_results( $wpdb->prepare( "SELECT post_status, COUNT(*) AS num FROM {$wpdb->posts} WHERE post_author = %d AND post_type = 'post' AND post_status IN ('publish','draft','pending','private') GROUP BY post_status", $user_id ) ); foreach ( (array) $rows as $row ) { $user_status_counts[ $row->post_status ] = (int) $row->num; } $post_count = (int) array_sum( $user_status_counts ); } // ─── 分页与筛选参数(自己 / 他人 共享) ──────────────────────── $per_page = $is_own_profile ? 10 : max( 5, (int) ( $user_home_settings['posts_per_page'] ?? 10 ) ); $default_dashboard_tab = in_array( 'profile', $dashboard_tab_keys, true ) ? 'profile' : ( $dashboard_tab_keys[0] ?? 'profile' ); $active_tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : $default_dashboard_tab; $public_default_tab = $public_tab_keys[0] ?? 'posts'; $public_active_tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : $public_default_tab; // 兼容旧链接:签到 / 邀请已经并入新面板 if ( 'signin' === $active_tab ) { $active_tab = 'credits'; } elseif ( 'invite' === $active_tab ) { $active_tab = 'settings'; } if ( ! in_array( $active_tab, $dashboard_tab_keys, true ) ) { $active_tab = $default_dashboard_tab; } if ( ! in_array( $public_active_tab, $public_tab_keys, true ) ) { $public_active_tab = $public_default_tab; } $posts_page = max( 1, isset( $_GET['posts_page'] ) ? (int) $_GET['posts_page'] : 1 ); $comments_page = max( 1, isset( $_GET['comments_page'] ) ? (int) $_GET['comments_page'] : 1 ); $favorites_page = max( 1, isset( $_GET['favorites_page'] ) ? (int) $_GET['favorites_page'] : 1 ); $valid_post_status = [ 'all', 'publish', 'draft', 'pending', 'private' ]; $post_status_filter = isset( $_GET['post_status'] ) ? sanitize_key( wp_unslash( $_GET['post_status'] ) ) : 'publish'; if ( ! in_array( $post_status_filter, $valid_post_status, true ) ) { $post_status_filter = 'publish'; } // 空状态图标 SVG(提取以减少重复) $svg_empty_post = ''; $svg_empty_comment = ''; $svg_empty_favorite = ''; ?>
'GitHub', 'gitee' => 'Gitee', 'qq' => 'QQ', 'google' => 'Google', ]; ?>
display_name ); ?>

display_name ); ?>

description ) : ?>

description ); ?>

user_login ); ?> user_email ) : ?> user_email ); ?>
$tab ) : ?>
>

$contact ) : ?>
>

__( '已发布', 'aksrt' ), 'draft' => __( '草稿', 'aksrt' ), 'pending' => __( '待审', 'aksrt' ), 'private' => __( '私密', 'aksrt' ), 'all' => __( '全部', 'aksrt' ), ]; ?>
$status_text ) : $count_for_chip = ( 'all' === $status_key ) ? $post_count : ( $user_status_counts[ $status_key ] ?? 0 ); if ( 'publish' !== $status_key && 'all' !== $status_key && $count_for_chip < 1 ) { continue; } $chip_url = add_query_arg( [ 'tab' => 'posts', 'post_status' => $status_key, 'posts_page' => 1, ], remove_query_arg( [ 'posts_page' ] ) ); $chip_active = ( $post_status_filter === $status_key ); ?>
$user_id, 'post_status' => ( 'all' === $post_status_filter ) ? [ 'publish', 'draft', 'pending', 'private' ] : $post_status_filter, 'posts_per_page' => $per_page, 'paged' => $posts_page, 'no_found_rows' => false, 'update_post_meta_cache' => false, 'update_post_term_cache' => true, ]; $q = new WP_Query( $ps_args ); if ( $q->have_posts() ) : ?>
have_posts() ) : $q->the_post(); $st = get_post_status(); $status_label = ''; if ( 'publish' !== $st ) { $st_map = [ 'draft' => __( '草稿', 'aksrt' ), 'pending' => __( '待审', 'aksrt' ), 'private' => __( '私密', 'aksrt' ), 'future' => __( '定时', 'aksrt' ), ]; $status_label = $st_map[ $st ] ?? $st; } set_query_var( 'aksrt_profile_item_status', $status_label ); $edit_link = get_edit_post_link(); set_query_var( 'aksrt_profile_item_action', $edit_link ? [ 'type' => 'edit', 'url' => $edit_link, 'label' => __( '编辑', 'aksrt' ), ] : [] ); get_template_part( 'templates/parts/content', 'profile-list-item' ); endwhile; ?>
max_num_pages, $posts_page, 'posts_page' ); ?>
>

$user_id, 'number' => $per_page, 'offset' => ( $comments_page - 1 ) * $per_page, 'status' => 'approve', 'update_comment_meta_cache' => false, ] ); if ( $cs ) : ?>
>

'post', 'post_status' => 'publish', 'post__in' => $favorite_post_ids, 'orderby' => 'post__in', 'posts_per_page' => $per_page, 'paged' => $favorites_page, 'ignore_sticky_posts' => true, 'no_found_rows' => false, 'update_post_meta_cache' => false, ] ); if ( $favorites_query->have_posts() ) : ?>
have_posts() ) : $favorites_query->the_post(); set_query_var( 'aksrt_profile_item_action', [ 'type' => 'unfavorite', 'url' => '#', 'label' => __( '取消收藏', 'aksrt' ), ] ); set_query_var( 'aksrt_profile_item_status', '' ); get_template_part( 'templates/parts/content', 'profile-list-item' ); endwhile; ?>
max_num_pages, $favorites_page, 'favorites_page' ); ?>
>

get_recent_signins($user_id, 30); $signin_dates = array_map(function ($entry) { return $entry['signin_date'] ?? ''; }, $signin_log); $signin_dates = array_filter($signin_dates); } ?>

$user_id, 'page' => $credits_page, 'per_page' => 10 ] ); } else { $log = [ 'items' => [], 'total' => 0 ]; } if ( ! empty( $log['items'] ) ) : ?>
= 0 ? 'is-positive' : 'is-negative'; ?>
()
0 ? '+' : '' ) . $delta ); ?>
1 ) { aksrt_render_profile_pagination( $total_pages, $credits_page, 'credits_page' ); } ?>

> get_frontend_bindings_data($user_id); $user_email = $target_user->user_email ?: ''; $binding_name_map = [ 'github' => 'GitHub', 'gitee' => 'Gitee', 'qq' => 'QQ', 'google' => 'Google', ]; $binding_rows = []; foreach ( (array) ( $oauth_data['bindings'] ?? [] ) as $binding ) { $key = $binding['key'] ?? ''; if ( ! $key ) continue; $binding_rows[ $key ] = [ 'key' => $key, 'name' => $binding_name_map[ $key ] ?? ( $binding['name'] ?? ucfirst( $key ) ), 'icon' => $binding['icon'] ?? '', 'is_bound' => true, 'url' => '', ]; } foreach ( (array) ( $oauth_data['available'] ?? [] ) as $binding ) { $key = $binding['key'] ?? ''; if ( ! $key ) continue; $binding_rows[ $key ] = [ 'key' => $key, 'name' => $binding_name_map[ $key ] ?? ( $binding['name'] ?? ucfirst( $key ) ), 'icon' => $binding['icon'] ?? '', 'is_bound' => false, 'url' => $binding['url'] ?? '', ]; } ?>

--
0
0
0

>
display_name ); ?>

display_name ); ?>

description ) : ?>

description ) ); ?>

> $user_id, 'posts_per_page' => $per_page, 'post_status' => 'publish', 'paged' => $posts_page, 'no_found_rows' => false, 'update_post_meta_cache' => false, ] ); if ( $author_posts->have_posts() ) : ?>
have_posts() ) : $author_posts->the_post(); set_query_var( 'aksrt_profile_item_action', [ 'type' => 'view', 'url' => get_permalink(), 'label' => __( '阅读', 'aksrt' ), ] ); set_query_var( 'aksrt_profile_item_status', '' ); get_template_part( 'templates/parts/content', 'profile-list-item' ); endwhile; ?>
max_num_pages, $posts_page, 'posts_page' ); wp_reset_postdata(); set_query_var( 'aksrt_profile_item_action', [] ); else : aksrt_render_profile_empty( $svg_empty_post, __( 'TA 还没有发布文章', 'aksrt' ) ); endif; ?>
> $user_id, 'status' => 'approve', 'number' => $per_page, 'offset' => ( $comments_page - 1 ) * $per_page, 'type' => 'comment', 'update_comment_meta_cache' => false, ] ); if ( $user_comments ) : ?>
> 'post', 'post__in' => $favorite_post_ids, 'orderby' => 'post__in', 'posts_per_page' => $per_page, 'paged' => $favorites_page, 'no_found_rows' => false, 'update_post_meta_cache' => false, ] ); } else { $favorite_query = null; } if ( $favorite_query && $favorite_query->have_posts() ) : ?>
have_posts() ) : $favorite_query->the_post(); set_query_var( 'aksrt_profile_item_action', [ 'type' => 'view', 'url' => get_permalink(), 'label' => __( '阅读', 'aksrt' ), ] ); set_query_var( 'aksrt_profile_item_status', '' ); get_template_part( 'templates/parts/content', 'profile-list-item' ); endwhile; ?>
max_num_pages, $favorites_page, 'favorites_page' ); wp_reset_postdata(); set_query_var( 'aksrt_profile_item_action', [] ); else : aksrt_render_profile_empty( $svg_empty_favorite, __( 'TA 还没有公开收藏内容', 'aksrt' ) ); endif; ?>