我正在尝试将参数传递给wordpress页面。我不想将其作为查询字符串传递。我想以基于斜线的URL传递。
示例:
http://localhost/mysite/pagename?user=myname
到
http://localhost/mysite/pagename/myname
如何使用wordpress自定义主题中的functions.php
文件实现此目的?
答案 0 :(得分:10)
通过rewrite_rules_array
似乎不需要 - 重写规则kill / remove比添加规则更重要...
functions.php
使用WordPress主题函数(functions.php
),在任何重写规则更改后,有两个步骤将基于斜杠的url作为GET
参数传递给页面:
刷新重写规则==在admin中重新保存永久链接设置!
这可能有点令人困惑,当试图让它工作时,因为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中的所有网址重写都是通过它来实现的
pagename
GET
参数设置您的页面slug $matches[indexStartingFrom1]
进行正则表达式匹配 - 实际上 只是一个占位符! ==> 使用单引号来包装此字符串! '顶部'或者'底部'。 '顶部'将优先于WordPress的现有规则,其中' bottom'将首先检查所有其他规则匹配。默认值:"底部"
query_vars
上面的步骤只是一个定位,而不是传递变量本身......
由于WordPress会清除$_GET
参数"因为"然后扔掉它们(因为它找不到适合它的东西),我们需要通过添加custom query_vars
告诉 WordPress我们想要使用它们。
我们仍无法通过$_GET
超全局检索它们,然而,我们将能够使用get_query_var(...)
我们通过添加 GET
过滤器
query_vars
参数
add_filter('query_vars', function( $vars ){
$vars[] = 'pagename';
$vars[] = 'user';
return $vars;
});
然后获取GET
param" user"的值使用方法:
get_query_var( 'user' )
<小时/>
.htaccess
如果可以,您还可以使用.htaccess
规则(考虑,/mysite/
是您的重写基础)
RewriteRule ^pagename/([^/]+)$ pagename?user=$1
答案 1 :(得分:0)
这是一个完整的教程:http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/
简而言之,您定义了一些新的重写规则,然后通过add_filter('rewrite_rules_array', 'my_rewrite_rules');
但是,按照该链接的示例,您生成的网址为http://localhost/mysite/pagename/user/myname
- 请注意 / user / (查询变量的名称)仍然包含在内。< / p>