WordPress如何获取URL参数?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 参数 正文

核心概念:URL 参数的类型

我们需要区分 URL 中常见的两种参数:

wordpress获取url参数
(图片来源网络,侵删)
  1. 查询字符串参数:通过 分隔,多个参数用 & 连接。

    • 示例:https://example.com/blog?category=tech&author=john
    • 在这个例子中,categoryauthor 就是查询字符串参数。
  2. URL 片段/路径参数:是 URL 路径的一部分,通常用于自定义文章类型、分类法或页面结构。

    • 示例:https://example.com/profile/user-123
    • 在这个例子中,user-123 是一个路径参数,它表示要查看 ID 为 123 的用户资料。

使用 get_query_var() (最推荐)

这是 WordPress 官方推荐且最安全的方法,专门用于获取 查询字符串参数,它不仅会直接从 URL 中获取,还会考虑 WordPress 的 Rewrite 规则,能正确处理被重写的 URL。

适用场景:获取 URL 中的 ?key=value 参数,或者通过 add_rewrite_rule() 自定义的 Rewrite 规则中的参数。

wordpress获取url参数
(图片来源网络,侵删)

示例 1:获取标准查询参数

假设你的 URL 是 https://example.com/?s=wordpress&year=2025

// 在主题的 functions.php 文件或自定义插件中
// 获取搜索关键词 's'
$search_query = get_query_var('s');
echo "搜索关键词: " . $search_query; // 输出: 搜索关键词: wordpress
// 获取自定义参数 'year'
$year = get_query_var('year');
echo "年份: " . $year; // 输出: 年份: 2025

示例 2:获取自定义查询参数

假设你想创建一个按作者筛选文章的页面,URL 是 https://example.com/blog?author_name=john

// 在主题的 functions.php 文件或自定义插件中
// 获取自定义参数 'author_name'
$author_slug = get_query_var('author_name');
if ($author_slug) {
    // 根据 slug 获取作者对象
    $author = get_user_by('slug', $author_slug);
    if ($author) {
        echo "正在查看作者: " . $author->display_name;
    } else {
        echo "未找到该作者。";
    }
}

示例 3:获取分页参数

分页参数(如 ?paged=2)是 WordPress 内置的,get_query_var() 也能完美处理。

$paged = get_query_var('paged');
if ($paged > 1) {
    echo "当前是第 " . $paged . " 页。";
} else {
    echo "这是首页。";
}

使用 $_GET 超全局变量

这是一种直接的 PHP 方法,可以获取所有通过 传递的查询字符串参数。但请注意,这种方法不经过 WordPress 的过滤和转义,直接使用有安全风险。

wordpress获取url参数
(图片来源网络,侵删)

适用场景:当你确定参数是纯数据,并且需要进行严格的过滤和转义时,对于 WordPress 开发,get_query_var() 通常是更好的选择。

示例

// 获取参数 'id'
$id = isset($_GET['id']) ? intval($_GET['id']) : 0; // 使用 intval() 确保是整数
// 获取参数 'name'
$name = isset($_GET['name']) ? sanitize_text_field($_GET['name']) : ''; // 使用 sanitize_text_field() 清理文本
echo "ID: " . $id . ", Name: " . $name;

重要提示:如果你直接输出 $_GET 的值,一定要记得使用 esc_html()esc_attr() 等函数进行转义,以防止 XSS 攻击。

// 错误示范 (有安全风险)
echo $_GET['user_input']; 
// 正确示范 (安全)
echo esc_html($_GET['user_input']);

获取 URL 片段/路径参数 (高级)

对于像 https://example.com/profile/user-123 这样的 URL,WordPress 的 Rewrite 规则会将 profile/user-123 映射到某个页面模板,你需要先注册这个规则,然后在模板文件中解析。

这个过程比查询字符串要复杂一些。

步骤 1:注册 Rewrite 规则

functions.php 中,你需要告诉 WordPress 如何处理这个新的 URL 结构。

// 在 functions.php 中
add_action('init', 'my_custom_rewrite_rule');
function my_custom_rewrite_rule() {
    // 添加重写规则
    // 正则表达式 'profile/([^/]+)/?$' 匹配 profile/ 后面跟任意非斜杠字符,直到 URL 
    // 'index.php?profile_page=$matches[1]' 将匹配到的部分(用户ID)作为参数 'profile_page' 传递给 index.php
    add_rewrite_rule('^profile/([^/]+)/?$', 'index.php?profile_page=$matches[1]', 'top');
    // 因为这是一个新的查询变量,WordPress 需要知道它的存在
    add_filter('query_vars', 'my_custom_query_vars');
    // (可选) 但为了确保它能正常工作,最好也刷新一下规则。
    // 注意:这个函数只在需要时运行一次,例如在主题激活时。
    // flush_rewrite_rules(); 
}
function my_custom_query_vars($vars) {
    // 将 'profile_page' 添加到 WordPress 识别的查询变量列表中
    $vars[] = 'profile_page';
    return $vars;
}

重要:添加或修改了 Rewrite 规则后,你需要 刷新固定链接,只需进入 WordPress 后台 -> 设置 -> 固定链接,点击“保存更改”即可,这会自动调用 flush_rewrite_rules()

步骤 2:创建页面模板

  1. 在 WordPress 后台创建一个普通的页面(标题为“Profile”,可以留空内容)。
  2. 在主题根目录下创建一个文件,命名为 page-profile.php,WordPress 会自动将这个模板应用于所有标题为“Profile”的页面。

步骤 3:在模板文件中获取参数

page-profile.php 文件中,使用 get_query_var() 来获取我们注册的参数。

// 在 page-profile.php 文件中
// 获取 'profile_page' 参数
$user_id = get_query_var('profile_page');
if ($user_id) {
    // 现在你可以使用 $user_id 来查询数据库或调用函数
    $user = get_user_by('id', $user_id);
    if ($user) {
        echo "<h1>" . esc_html($user->display_name) . " 的资料</h1>";
        echo "<p>用户名: " . esc_html($user->user_login) . "</p>";
    } else {
        echo "<p>未找到该用户。</p>";
    }
} else {
    echo "<p>请提供一个有效的用户 ID。</p>";
}

当你访问 https://yoursite.com/profile/123 时,page-profile.php 模板就会被加载,$user_id 的值会是 123


总结与最佳实践

方法 适用场景 优点 缺点 推荐度
get_query_var() 获取查询字符串参数 (包括自定义的) 官方推荐,安全,考虑 Rewrite 规则 不能直接获取原始 URL 片段 ⭐⭐⭐⭐⭐
$_GET 获取原始查询字符串 直接,简单 不安全,不处理 Rewrite 规则,需要手动过滤 ⭐⭐
Rewrite + get_query_var() 获取 URL 片段/路径参数 创建干净、SEO 友好的 URL 设置复杂,需要刷新固定链接 ⭐⭐⭐⭐

核心建议:

  1. 优先使用 get_query_var(),对于 95% 的获取 URL 参数的需求,这都是正确且安全的选择。
  2. 永远不要直接输出 $_GET 的值,如果必须使用,请务必配合 intval(), sanitize_text_field(), esc_html() 等函数进行数据处理和转义。
  3. 对于复杂的 URL 结构(如 /profile/123),请使用 Rewrite 规则 + get_query_var() 的组合,这是构建自定义 URL 的标准 WordPress 方式。
-- 展开阅读全文 --
头像
2012千元智能手机哪款最值得买?
« 上一篇 2025-12-28
latitude e5570 拆机
下一篇 » 2025-12-28

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]