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

时间:2015-03-16 12:19:33

标签: wordpress url themes rewrite query-string

我正在尝试将参数传递给wordpress页面。我不想将其作为查询字符串传递。我想以基于斜线的URL传递。

示例:

http://localhost/mysite/pagename?user=myname

http://localhost/mysite/pagename/myname

如何使用wordpress自定义主题中的functions.php文件实现此目的?

2 个答案:

答案 0 :(得分:10)

通过rewrite_rules_array似乎不需要 - 重写规则kill / remove比添加规则更重要...

使用functions.php

使用WordPress主题函数(functions.php),在任何重写规则更改后,有两个步骤将基于斜杠的url作为GET参数传递给页面: 刷新重写规则==在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'
   );   
});

参数/参数:

  1. 正则表达式(" regexp")以匹配特定的网址结构
  2. 重写您应该定位index.php的模板(如果它不是外部链接),因为WordPress中的所有网址重写都是通过它来实现的
    • 使用pagename GET参数设置您的页面slug
    • 使用占位符$matches[indexStartingFrom1]进行正则表达式匹配 - 实际上 只是一个占位符! ==> 使用单引号来包装此字符串!
  3.   

    '顶部'或者'底部'。 '顶部'将优先于WordPress的现有规则,其中' bottom'将首先检查所有其他规则匹配。默认值:"底部"

  4. 第2步 - add query_vars

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

    由于WordPress会清除$_GET参数"因为"然后扔掉它们(因为它找不到适合它的东西),我们需要通过添加custom query_vars 告诉 WordPress我们想要使用它们。

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

    来获取它们

    我们通过添加 GET 过滤器

    告诉WordPress我们想要使用这些query_vars参数
    add_filter('query_vars', function( $vars ){
        $vars[] = 'pagename'; 
        $vars[] = 'user'; 
        return $vars;
    });
    

    最后一步:FLUSH REWRITE RULES ==保留PERMALINK设置!

    用法

    然后获取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');

将它们挂钩到WordPress中

但是,按照该链接的示例,您生成的网址为http://localhost/mysite/pagename/user/myname - 请注意 / user / (查询变量的名称)仍然包含在内。< / p>