如何为WordPress前台URL添加refpin参数并排除静态资源
解决WordPress中refpin参数被添加到CSS/JS等静态资源URL的问题
原代码的问题在于template_redirect钩子会在所有WordPress请求(包括静态资源、后台页面、API请求)中触发,导致CSS、JS这类静态资源的URL被附加refpin参数,进而引发加载异常。我们需要添加条件判断,仅在前台用户访问的页面中执行参数添加逻辑。
修改后的代码
function wprdcv_param_redirect(){ // 仅在前台非特殊请求中执行 if (is_user_logged_in() && !is_admin() && !wp_doing_ajax() && !is_feed() && !is_robots() && !is_trackback()) { $referalpin = $_GET['refpin']; if (!$referalpin) { // 排除静态资源请求(CSS/JS/图片等) $current_uri = $_SERVER['REQUEST_URI']; $static_extensions = array('.css', '.js', '.jpg', '.jpeg', '.png', '.gif', '.ico', '.svg'); $is_static_resource = false; foreach ($static_extensions as $ext) { if (strpos($current_uri, $ext) !== false) { $is_static_resource = true; break; } } if (!$is_static_resource) { $ioppin = bp_get_profile_field_data('field=211&user_id=' . bp_loggedin_user_id()); $location = add_query_arg(array('refpin' => $ioppin)); wp_redirect($location); exit; // 重定向后必须退出,避免后续代码执行 } } } } add_action('template_redirect', 'wprdcv_param_redirect');
关键修改说明
- 添加多条件过滤:
!is_admin():排除WordPress后台页面的请求!wp_doing_ajax():排除AJAX异步请求!is_feed() && !is_robots() && !is_trackback():排除订阅源、robots.txt、引用通知等特殊页面请求
- 静态资源判断:通过检查请求URI的后缀,排除CSS、JS、图片等静态资源,避免参数被附加到这些资源URL上
- 添加exit语句:重定向后必须调用
exit,防止WordPress继续执行后续代码,确保重定向生效
内容的提问来源于stack exchange,提问作者Jamie Warren
相关产品推荐
相关产品推荐

