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

Jac*_*Ant 5 url wordpress rewrite themes query-string

我试图将参数传递给wordpress页面.我不想将它作为查询字符串传递.我想以基于斜线的网址传递.

例:

http://localhost/mysite/pagename?user=myname
Run Code Online (Sandbox Code Playgroud)

http://localhost/mysite/pagename/myname
Run Code Online (Sandbox Code Playgroud)

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

jav*_*web 11

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

使用 functions.php

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

第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'
   );   
});
Run Code Online (Sandbox Code Playgroud)

参数/参数:

  1. 正则表达式("regexp")以匹配特定的url结构
  2. 重写您应该定位的模板index.php(如果它不是外部链接),因为WordPress中的所有URL重写都是通过它来实现的
    • 使用pagename GET参数设置到页面slug
    • 使用占位符$matches[indexStartingFrom1]的正则表达式匹配-这真的
      只是一个占位符!==> 使用单引号来包装此字符串!
  3. '上还是下'.'top'将优先于WordPress的现有规则,其中'bottom'将首先检查所有其他规则是否匹配.默认值:"bottom"

第2步 - 添加query_vars

上面的步骤只是一个目标,而不是传递变量本身...

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

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

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

add_filter('query_vars', function( $vars ){
    $vars[] = 'pagename'; 
    $vars[] = 'user'; 
    return $vars;
});
Run Code Online (Sandbox Code Playgroud)

最后一步:
FLUSH REWRITE RULES == RESAVE PERMALINK SETTINGS!

用法

然后获得GET参数"用户"使用的价值:

get_query_var( 'user' ) 
Run Code Online (Sandbox Code Playgroud)


使用 .htaccess

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

RewriteRule ^pagename/([^/]+)$  pagename?user=$1
Run Code Online (Sandbox Code Playgroud)


sim*_*mer 1

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

简而言之,您定义一些新的重写规则,然后通过以下方式将它们挂接到 WordPress 中:add_filter('rewrite_rules_array', 'my_rewrite_rules');

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