示例:
http://localhost/mysite/pagename?user=myname
intohttp://localhost/mysite/pagename/myname
如何在wordpress自定义主题中使用functions.php
文件实现这一目标?
http://localhost/mysite/pagename?user=myname
intohttp://localhost/mysite/pagename/myname
如何在wordpress自定义主题中使用functions.php
文件实现这一目标?
查看rewrite_rules_array
似乎是不必要的 - 它更适用于重写规则的删除而不是添加规则...
functions.php
使用WordPress主题函数(functions.php
),在任何重写规则更改后,将基于斜杠的URL作为GET
参数传递给页面,需要2个步骤:
刷新重写规则 == 在管理中重新保存固定链接设置!
当尝试让它工作时,这可能有点令人困惑,因为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' 或 'bottom'。'top' 将优先于WordPress现有规则,而 'bottom' 将首先检查所有其他规则是否匹配。默认值:"bottom"
query_vars
上面的步骤仅仅是一个目标,而不是传递变量本身...
由于WordPress将清除$_GET
参数,只是将它们抛弃掉(因为它找不到任何合适的内容),所以我们需要通过添加我们的自定义query_vars
来告诉WordPress我们想使用它们。
尽管我们仍然无法通过 $_GET
超全局变量来检索它们,但是,
我们将能够使用 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
这里有一份详细的教程,可以帮助你接近目标: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/(你的查询变量名称)仍然包含在内。
add_rewrite_rule('(.*(mypage/user/(.*)?))' , 'index.php?pagename=mypage&user=$matches[1]','top');
但是它将我重定向到[http://example.com/mypage]。 - Jack Ant