Wordpress - 将查询字符串作为基于斜杠的 URL 传递

Posted

技术标签:

【中文标题】Wordpress - 将查询字符串作为基于斜杠的 URL 传递【英文标题】:Wordpress - Pass Query string as slash based URL 【发布时间】:2015-05-18 13:23:19 【问题描述】:

我正在尝试将参数传递给 wordpress 页面。我不想将它作为查询字符串传递。我想作为基于斜杠的 url 传递。

例子:

http://localhost/mysite/pagename?user=myname

进入

http://localhost/mysite/pagename/myname

如何在 wordpress 自定义主题中使用我的 functions.php 文件来实现这一点?

【问题讨论】:

【参考方案1】:

似乎不需要通过rewrite_rules_array - 重写规则杀死/删除比添加规则更多...

使用functions.php

使用 WordPress 主题函数 (functions.php),在任何重写规则更改后,将基于斜杠的 url 作为 GET 参数传递给页面有 2 个步骤: 刷新重写规则 == 在管理员中重新保存永久链接设置!

第 1 步 - add_rewrite_rule(...)

当试图让它工作时,这可能有点令人困惑,因为add_rewrite_rule(...) 的文档对于重写的目标位置以及如何通过 slug 定位页面并不十分清楚......而且只有一个 重要请注意,每次更改类似内容时都需要刷新重写规则...

这对我有用(WP 4.3.3)

add_action('init', function()
   add_rewrite_rule( 
      '^yourPageSlug/([^/]+)([/]?)(.*)', 
      //!IMPORTANT! THIS MUST BE IN SINGLE QUOTES!:
      'index.php?pagename=yourPageSlug&user=$matches[1]', 
      'top'
   );   
);

参数/参数:

    正则表达式(“regexp”)匹配特定的 url 结构 重写模板,您应该在其中定位index.php(如果它不是外部链接),因为 WordPress 中的所有 url 重写都来自它 使用pagename GET 参数设置为你的页面slug 使用占位符 $matches[indexStartingFrom1] 进行正则表达式匹配 - 这真的只是一个占位符! ==> 用单引号包裹这个字符串!

    “顶部”或“底部”。 'top' 将优先于 WordPress 的现有规则,其中 'bottom' 将首先检查所有其他规则是否匹配。默认值:“底部”

第 2 步 - add query_vars

上面的步骤只是一个定位,没有传递变量本身......

由于 WordPress 会“按原样”清除 $_GET 参数并将它们扔掉(因为它找不到任何适合它的东西),我们需要告诉我们想要的 WordPress通过添加我们的custom query_vars 来使用它们。

我们仍然无法通过$_GET superglobal 检索它们,但是,我们将能够使用get_query_var(...) 获取它们

我们通过添加 query_vars 过滤器告诉 WordPress 我们想要使用这些 GET 参数

add_filter('query_vars', function( $vars )
    $vars[] = 'pagename'; 
    $vars[] = 'user'; 
    return $vars;
);

最后一步:刷新重写规则 == 保存永久链接设置!

用法

然后获取GET参数“user”的值使用:

get_query_var( 'user' ) 


使用.htaccess

如果可以,您也可以使用.htaccess 规则(考虑到,/mysite/ 是您的重写基础

RewriteRule ^pagename/([^/]+)$  pagename?user=$1

【讨论】:

非常感谢;我一直在试图弄清楚我们有一段时间【参考方案2】:

这是一个接近的详尽教程:http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/

简而言之,你定义了一些新的重写规则,然后通过add_filter('rewrite_rules_array', 'my_rewrite_rules');将它们挂接到WordPress

但是,按照该链接的示例,您的结果 URL 将是 http://localhost/mysite/pagename/user/myname - 请注意,仍然包含 /user/(您的查询变量的名称)。

【讨论】:

您好,感谢您的回复...我在网址中应用了该方法。我可以看到通过打印 get_option('rewrite_rules'); 将重写规则添加到 wordpress,但是当我输入 url localhost/mysite/pagename/user/myname 时,我得到 404 page not found 错误。请帮忙。 更新:似乎代码对我的页面有一些影响。但是,重写规则不会正确重定向。这就是我所拥有的 add_rewrite_rule('(.*(mypage/user/(.*)?))' , 'index.php?pagename=mypage&user=$matches[1]','top'); 但它会将我重定向到 [example.com/mypage]。 和我一样@Jack Ant

以上是关于Wordpress - 将查询字符串作为基于斜杠的 URL 传递的主要内容,如果未能解决你的问题,请参考以下文章

包含斜杠的 SQL Server 2012 查询字符串

如何阻止 jQuery ajax 向 JSON 字符串添加斜杠?

将文字反斜杠后跟一个字符转换为相应的转义序列

从查询字符串 Apache 中删除尾部斜杠

如何在字符串中使用反斜杠 (\)?

可以在查询字符串之前跳过斜杠吗?