我正在尝试将参数传递给 wordpress 页面。我不想将它作为查询字符串传递。我想作为基于斜杠的 url 传递。
例子:
http://localhost/mysite/pagename?user=myname
进入
http://localhost/mysite/pagename/myname
如何使用我的
functions.php
实现此目的? wordpress 自定义主题中的文件?
最佳答案
正在经历 rewrite_rules_array
似乎不需要 - 重写规则杀死/删除比添加规则更多......
使用 functions.php
使用 WordPress 主题函数 ( functions.php
),有 2 个步骤将基于斜杠的 url 传递为 GET
任何重写规则更改后的页面参数:
刷新重写规则 == 在管理员中重新保存永久链接设置!
第 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'
);
});
参数/参数:
index.php
(如果它不是外部链接),因为 WordPress 中所有的 url 重写都是通过它来的pagename
GET
参数设置为您的页面 slug $matches[indexStartingFrom1]
对于正则表达式匹配 - 真正的 只是一个占位符! ==> 使用单引号包裹这个字符串! 'top' or 'bottom'. 'top' will take precedence over WordPress's existing rules, where 'bottom' will check all other rules match first. Default: "bottom"
第 2 步 - add
query_vars
上面的步骤只是一个目标,而不是传递变量本身......
由于 WordPress 会清除
$_GET
参数“按原样”扔掉(因为它找不到任何适合它的东西),我们需要通过添加我们的 custom query_vars
来告诉 WordPress 我们想要使用它们。 .我们仍然无法通过
$_GET
检索它们超全局,但是,我们将能够使用 get_query_var(...)
获取它们我们告诉 WordPress 我们想要使用那些
GET
通过添加 参数query_vars
筛选add_filter('query_vars', function( $vars ){
$vars[] = 'pagename';
$vars[] = 'user';
return $vars;
});
最后一步:刷新重写规则 == 保存永久链接设置!
用法
然后得到
GET
的值参数“用户”使用:get_query_var( 'user' )
使用
.htaccess
如果可以,也可以使用
.htaccess
规则(考虑到 /mysite/
是您的重写基础)RewriteRule ^pagename/([^/]+)$ pagename?user=$1
关于Wordpress - 将查询字符串作为基于斜杠的 URL 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29076665/