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:
@@ -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()) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user