Merge pull request 'fix(user): enable pretty /user and /profile when permalinks empty' (#302) from worktree-ip-location-display into main

Reviewed-on: CYL/wordpress-theme-aksrt#302
This commit is contained in:
2026-07-25 16:24:35 +08:00
2 changed files with 40 additions and 4 deletions
+30 -3
View File
@@ -166,10 +166,23 @@ add_action('init', function () {
} }
// 统一 flush 检查 — bump when user-home rewrite / author override changes // 统一 flush 检查 — bump when user-home rewrite / author override changes
$rewrite_version = AKSRT_VERSION . ':user-home-profile-routing-v2'; $rewrite_version = AKSRT_VERSION . ':user-home-profile-routing-v3';
$flushed = get_option('aksrt_user_rules_flushed'); $flushed = get_option('aksrt_user_rules_flushed');
if ($flushed !== $rewrite_version) { $rules = get_option('rewrite_rules');
flush_rewrite_rules(false); $need_flush = ($flushed !== $rewrite_version)
|| !is_array($rules)
|| $rules === []
|| !get_option('permalink_structure');
// Dev/plain installs often have empty permalink_structure → pretty /user/ 404s at Apache.
// Force a usable structure so registered rewrite rules actually apply.
if (!get_option('permalink_structure')) {
update_option('permalink_structure', '/%postname%/');
$need_flush = true;
}
if ($need_flush) {
flush_rewrite_rules(true);
update_option('aksrt_user_rules_flushed', $rewrite_version); update_option('aksrt_user_rules_flushed', $rewrite_version);
} }
}); });
@@ -188,9 +201,23 @@ add_filter('author_link', function ($link, $author_id) {
} }
$user = get_userdata($author_id); $user = get_userdata($author_id);
$slug = $user ? $user->user_nicename : ('user-' . max(0, $author_id)); $slug = $user ? $user->user_nicename : ('user-' . max(0, $author_id));
if (!get_option('permalink_structure')) {
return add_query_arg('user_nicename', rawurlencode($slug), home_url('/'));
}
return home_url('/user/' . trailingslashit($slug)); return home_url('/user/' . trailingslashit($slug));
}, 99, 2); }, 99, 2);
// Accept ?user_nicename= when pretty rewrites are unavailable.
add_filter('request', function ($query_vars) {
if (empty($query_vars['user_nicename']) && !empty($_GET['user_nicename'])) {
$query_vars['user_nicename'] = sanitize_title(wp_unslash((string) $_GET['user_nicename']));
}
if (empty($query_vars['aksrt_user_center']) && isset($_GET['aksrt_user_center'])) {
$query_vars['aksrt_user_center'] = '1';
}
return $query_vars;
});
// Pretty-permalink author archives → public user home. // Pretty-permalink author archives → public user home.
add_action('template_redirect', function () { add_action('template_redirect', function () {
if (is_admin() || wp_doing_ajax() || is_feed() || is_embed()) { if (is_admin() || wp_doing_ajax() || is_feed() || is_embed()) {
+10 -1
View File
@@ -134,13 +134,22 @@ function aksrt_get_user_home_url($user = null): string {
} elseif (is_int($user) && $user > 0) { } elseif (is_int($user) && $user > 0) {
$u = get_userdata($user); $u = get_userdata($user);
$slug = $u ? $u->user_nicename : ''; $slug = $u ? $u->user_nicename : '';
} elseif (is_numeric($user) && (int) $user > 0) {
$u = get_userdata((int) $user);
$slug = $u ? $u->user_nicename : '';
} elseif (is_string($user) && $user) { } elseif (is_string($user) && $user) {
$slug = $user; $slug = $user;
} else { } else {
$current = wp_get_current_user(); $current = wp_get_current_user();
$slug = $current->ID ? $current->user_nicename : ''; $slug = $current->ID ? $current->user_nicename : '';
} }
if (!$slug) return home_url('/'); if (!$slug) {
return home_url('/');
}
// Plain permalinks: Apache 404s pretty /user/{slug}/ before WP boots.
if (!get_option('permalink_structure')) {
return add_query_arg('user_nicename', rawurlencode($slug), home_url('/'));
}
return home_url('/user/' . trailingslashit($slug)); return home_url('/user/' . trailingslashit($slug));
} }
endif; endif;