如何获取非完整URL的来源页?WordPress来源判断代码改写遇阻
WordPress Referer相关问题解答
1. 如何获取不含完整URL的来源页(referer)?
可以借助PHP的parse_url()函数解析wp_get_referer()返回的完整URL,提取你需要的部分:
- 提取路径部分(不含域名、协议和参数):
$referer = wp_get_referer(); if ($referer) { $referer_path = parse_url($referer, PHP_URL_PATH); // $referer_path 示例:/wp-admin/post.php } - 提取查询参数部分:
$referer = wp_get_referer(); if ($referer) { $referer_query = parse_url($referer, PHP_URL_QUERY); // $referer_query 示例:post=12800&action=edit }
如果仅需判断来源是否包含特定路径,也可以直接用strpos()匹配,无需完全解析URL。
2. 来源页判断失效的解决方法
你修改后的代码(wp_get_referer() == (admin_url()))失效的核心原因:admin_url()默认返回后台首页URL(比如https://你的域名/wp-admin/),但实际来源页是文章编辑页(https://你的域名/wp-admin/post.php?post=12800&action=edit),两者完全不相等,导致判断不成立。
根据不同需求,提供两种解决思路:
思路1:判断来源是后台任意页面
若只需验证来源为后台页面,用strpos()检查referer是否包含后台URL前缀:
(strpos(wp_get_referer(), admin_url()) !== false)
思路2:判断来源是任意文章编辑页
若需验证来源为文章编辑页(不限特定文章),可检查URL是否包含编辑页的特征路径与参数:
$referer = wp_get_referer(); if ($referer && strpos($referer, 'post.php?action=edit') !== false) { // 来源是文章编辑页 }
若需要更严谨的参数校验,可解析URL的查询参数:
$referer = wp_get_referer(); if ($referer) { $query_params = []; parse_str(parse_url($referer, PHP_URL_QUERY), $query_params); if (isset($query_params['action']) && $query_params['action'] === 'edit' && isset($query_params['post'])) { // 来源是合法的文章编辑页 } }
内容的提问来源于stack exchange,提问作者Ridwan
相关产品推荐
相关产品推荐

