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 传递的主要内容,如果未能解决你的问题,请参考以下文章