You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress登录重定向中保留锚点标签(ID类)?

如何让Easy Login for WooCommerce重定向时保留锚点标签

在使用Easy Login for WooCommerce插件时,重定向功能正常,但原链接中的锚点标签会被丢弃。插件处理重定向的核心代码如下:

function xoo_el_redirect_endpoints(){
    
    if( xoo_el_helper()->get_general_option( 'm-ep-success' ) !== "yes" ) return;

    add_filter( 'xoo_el_login_redirect', function( $redirect ){
        return add_query_arg( 'login', 'success', $redirect );
    } );
     
    add_filter( 'xoo_el_register_redirect', function( $redirect ){
        return add_query_arg( 'login', 'success', $redirect );
    } );
}
add_action( 'init', 'xoo_el_redirect_endpoints' );

之前尝试添加固定锚点的测试代码导致全站重定向到/#gids,代码如下:

function xoo_cu_el_redirect($url){
    return $url .'/#gids';
    }
    
    add_filter( 'xoo_el_login_redirect', 'xoo_cu_el_redirect' ); //for login
    add_filter( 'xoo_el_registration_redirect', 'xoo_cu_el_redirect' ); // for registration

问题原因

  1. WordPress的add_query_arg()函数默认会丢弃URL中的锚点部分,只处理查询参数。
  2. 测试代码未对重定向URL做空值判断,也未限制锚点添加的场景,导致全站触发重定向时都加上了锚点。
  3. 钩子名错误:插件使用的注册重定向钩子是xoo_el_register_redirect,但测试代码用了xoo_el_registration_redirect,导致逻辑失效。

解决方案

方案1:保留原URL的锚点标签

以下代码会提取原重定向URL中的锚点,添加插件所需的查询参数后再将锚点拼接回去:

function xoo_cu_el_preserve_anchor_redirect($redirect_url) {
    // 空URL直接返回,避免异常重定向
    if (empty($redirect_url)) {
        return $redirect_url;
    }

    // 解析URL,提取原锚点部分
    $url_components = parse_url($redirect_url);
    $original_anchor = isset($url_components['fragment']) ? '#' . $url_components['fragment'] : '';

    // 添加插件要求的"login=success"查询参数
    $url_with_query = add_query_arg('login', 'success', $redirect_url);

    // 移除add_query_arg自动剥离后可能残留的锚点,再拼接原锚点
    $final_redirect = strtok($url_with_query, '#') . $original_anchor;

    return $final_redirect;
}

// 使用与插件一致的钩子名
add_filter('xoo_el_login_redirect', 'xoo_cu_el_preserve_anchor_redirect');
add_filter('xoo_el_register_redirect', 'xoo_cu_el_preserve_anchor_redirect');

方案2:自定义添加固定锚点(仅特定场景)

如果需要给特定页面的重定向添加固定锚点(比如#gids),需限制触发条件,避免全站重定向异常:

function xoo_cu_el_add_custom_anchor_redirect($redirect_url) {
    if (empty($redirect_url)) {
        return $redirect_url;
    }

    // 仅在重定向到购物车页面时添加锚点,可根据需求修改目标页面
    if (strpos($redirect_url, wc_get_cart_url()) !== false) {
        // 移除原有锚点,添加自定义锚点
        $redirect_url = strtok($redirect_url, '#') . '#gids';
    }

    // 保留插件的查询参数添加逻辑
    return add_query_arg('login', 'success', $redirect_url);
}

add_filter('xoo_el_login_redirect', 'xoo_cu_el_add_custom_anchor_redirect');
add_filter('xoo_el_register_redirect', 'xoo_cu_el_add_custom_anchor_redirect');

注意事项

  • 将代码添加到主题的functions.php文件或自定义插件中,避免直接修改原插件代码(更新插件后会丢失修改)。
  • 测试前请备份网站数据,避免出现异常重定向问题。

内容的提问来源于stack exchange,提问作者Kayla-May Smit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:30:44