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

WordPress中如何实现页面跳转时保留URL可变参数?

WordPress保留URL可变参数实现方案

核心需求是用户首次访问携带的pid、prid参数,在后续所有站内跳转、按钮点击时都不丢失,以下是两种可直接落地的实现方案:

方案1:PHP服务端实现(推荐,兼容性最优)

将以下代码添加到WordPress主题的functions.php文件,或者自定义功能插件中即可生效:

// 保存需要保留的参数到session
add_action('init', 'save_custom_url_params');
function save_custom_url_params() {
    if (!session_id()) session_start();
    $allowed_params = ['pid', 'prid']; // 可自定义需要保留的参数列表
    foreach ($allowed_params as $param) {
        if (isset($_GET[$param])) {
            $_SESSION[$param] = sanitize_text_field($_GET[$param]);
        }
    }
}

// 给所有站内链接自动追加参数
add_filter('post_type_link', 'append_custom_params_to_url', 10, 1);
add_filter('page_link', 'append_custom_params_to_url', 10, 1);
add_filter('term_link', 'append_custom_params_to_url', 10, 1);
add_filter('home_url', 'append_custom_params_to_url', 10, 1);
function append_custom_params_to_url($url) {
    if (!session_id()) session_start();
    $allowed_params = ['pid', 'prid'];
    $params = [];
    foreach ($allowed_params as $param) {
        if (isset($_SESSION[$param]) && !empty($_SESSION[$param])) {
            $params[$param] = $_SESSION[$param];
        }
    }
    if (!empty($params)) {
        $url = add_query_arg($params, $url);
    }
    return $url;
}

// 跳转时也保留参数
add_filter('wp_redirect', 'append_custom_params_to_url', 10, 1);

方案2:前端JS实现(无后端修改要求,适配缓存站点)

如果站点开启了页面缓存,服务端修改会受缓存影响,可使用JS方案,将以下代码添加到主题自定义JS区域,或者通过「自定义HTML」小工具插入到页脚全局位置:

// 读取并存储参数
const allowedParams = ['pid', 'prid'];
const currentUrl = new URL(window.location.href);
let savedParams = {};

// 优先从当前URL取参数,没有的话从localStorage取
allowedParams.forEach(param => {
    if (currentUrl.searchParams.has(param)) {
        savedParams[param] = currentUrl.searchParams.get(param);
        localStorage.setItem(param, savedParams[param]);
    } else if (localStorage.getItem(param)) {
        savedParams[param] = localStorage.getItem(param);
    }
});

// 给所有站内a标签追加参数
if (Object.keys(savedParams).length > 0) {
    document.querySelectorAll('a').forEach(link => {
        try {
            const linkUrl = new URL(link.href);
            // 只处理站内链接
            if (linkUrl.host === window.location.host) {
                Object.keys(savedParams).forEach(param => {
                    linkUrl.searchParams.set(param, savedParams[param]);
                });
                link.href = linkUrl.toString();
            }
        } catch (e) {}
    });

    // 处理动态生成的元素点击
    document.addEventListener('click', function(e) {
        const target = e.target.closest('a');
        if (target && target.host === window.location.host) {
            const linkUrl = new URL(target.href);
            Object.keys(savedParams).forEach(param => {
                linkUrl.searchParams.set(param, savedParams[param]);
            });
            target.href = linkUrl.toString();
        }
    });
}

注意事项

  • 两种方案默认只保留pid和prid两个参数,如需保留其他参数,修改代码中allowed_params(PHP)或allowedParams(JS)的数组值即可
  • 无缓存站点优先使用PHP方案,不会出现参数延迟加载的问题;有全页缓存的站点使用JS方案兼容性更好
  • 两种方案都默认不对外部站点链接追加参数,不会影响外域跳转逻辑

内容的提问来源于stack exchange,提问作者Marcel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:03