自定义WordPress的URL参数以及设置路由规则

秋末残雪 · 发布于 2015-04-26 · 字数6620 · 浏览 3724 · 评论 0

我们知道通过URL传参数很简单,加上类似?name=aa&city=bb这样的形式就可以了,获取参数直接用$_GET['name']方法,这当然没错。但是在WordPress中,我们要用到它的路由功能,使得链接更加美观,就不能采用这种形式,但是原理还是一样的。

那么在WordPress中怎么传值,要用到它自带的方法,再使用路由规则进行解析。在网上找了很多文章,找到这篇英文的教程,讲得非常到位。

不一定英语要多么好才能看懂,你只要看得懂那么大概的意思,看看代码就知道讲的是什么了,很多东西老外的网站上比国内的全。特此分享这篇文章。

从JR关于自定义分类法得到的有用信息:

我正在寻找一个解决方案的几天,终于找到一个方法去自定义分类页面,进一步细化的结果:post_type。这是重要的当你有一个情况与一个服务于多个文档类型的分类。我希望能拯救他人的恶化显然评论文章关闭。

用于更新JR谢谢!

它可能不会立即明显一些,这样的技术可能会派上用场。所以我用最近的一个项目为例。这个项目是为公司的子公司,是辛辛那提最著名的制造业公司。我们发展工业流体:添加剂,防锈剂和金属加工液是他们的一些主要产品线和产品页面,我们会使用这个教程。

要求

他们已经有了一个网站,但是请我们处理SEO。参与这一过程的一部分清理站点的URL结构的产品网页的URL查询字符串中去除。我将在本教程涵盖特定网页。如果你访问这个链接,点击任何类别列在页面的左边你会看到你发送到一个网页,看起来相同,但在URL的类别名称。

事实上,所有的页面通过WordPress都是一样的,而内容显示在这些网页的每一个由一个从URL的最后部分解析查询字符串的确定。这让我们有丰富的关键字的URL的产品类别,而无需创建每个类别分开的WordPress页面。

问题

与这件事在WordPress中最大的问题,我提到在最后一段,是即使有相当的permalinks启用,我们就不得不创造一个独特的为每个这些产品类别模板的一个新的WordPress页面。只有15个产品类别的时候,那不会是一个单调乏味的任务,直到你考虑的事实,它使添加类别有点麻烦,因为我们要创建一个新的WordPress网页和网页模板的任何公司需要添加类别。而这将意味着更多的工作时间对我们来说,它不如果可以成为客户的最佳利益。

解决方案

值得庆幸的是,它是可以避免的。而不是创建一堆网页和各自的网页模板,每次添加新的类别,我们可以使用WordPress的重写URL规则指定自定义的重写规则通过查询字符串作为URL的一部分,使用一个单一的网页和网页模板来显示所有的产品类别。

过程

第一步是创建一个函数变量添加到WordPress的查询字符串,然后添加到函数为query_vars的Hook。

接下来,我们创建了一个函数WordPress的现有数组的重写规则和钩子函数为rewrite_rules_array钩添加规则。

最后在网页模板中,我们使用$wp_query对象的query_vars属性获得从URL查询字符串。

代码

所以让我们来编写代码吧,首先我们要创建一个函数来告诉WordPress来跟踪我们的新的查询变量。这个函数会在你的主题functions.php文件。

function add_query_vars($aVars) {
  $aVars[] = "msds_pif_cat"; 
  // represents the name of the product category as shown in the URL
  return $aVars;
}
// hook add_query_vars function into query_vars
add_filter('query_vars', 'add_query_vars');

上述过程是相当简单的。当函数被钩入query_vars的WordPress查询变量,通过现有的数组函数。我们只需添加“msds_pif_cat”作为另一个查询变量并将数组返回到WordPress。

现在的WordPress的人都知道,除了它的现有的查询变量,它应添加一个称为“msds_pif_cat“我们将使用存储类产品名称,URL中指定的。

然而这一点不会做的伎俩。我们还需要告诉WordPress如何处理查询变量。在我们的案例中,我们想要的产品类别网页的URL看起来像这样:http://www.cimcool.com/msds-pif/category-name/。所以,我们需要告诉WordPress的时候发现一个URL匹配的结构,使用的最后部分,类别名称,来查询我们的新的“msds_pif_cat”变量。这样做我们需要添加一个自定义的重写规则。

我们做到这一点,我们的主题functions.php文件的另一个功能:

function add_rewrite_rules($aRules) {
    $aNewRules = array('msds-pif/([^/]+)/?$' => 'index.php?pagename=msds-pif&msds_pif_cat=$matches[1]');
    $aRules = $aNewRules + $aRules;
    return $aRules;
}
// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules');

函数连接到rewrite_rules_array,那么WordPress通过现有的重写规则作为一个数组的函数,然后检索$aRules变量。

然后我们在一个数组的形式添加新规则:array('msds-pif/([^/]+)/?$' => 'index.php?pagename=msds-pif&msds_pif_cat=$matches[1]')

这条规则告诉WordPress的时候发现一个URL,包括“msds-pif/”,其次是比其他任何一个正斜杠,其次是另一个(可选)正斜杠,捕捉到的URL的最后部分(括号内的部分),和服务页面的“index.php?pagename=msds-pif&msds_pif_cat=$matches[1]”。

默认情况下,WordPress会将所捕获的部分数组中称为匹配的URL。如果我们有一个URL请求”http://www.cimcool.com/msds-pif/industrial-cleaners/“,WordPress会在“index.php?pagename=msds-pif&msds_pif_cat=industrial-cleaners”。

这使我们能够捕捉msds_pif_cat变量对msds-pif页面模板和不同的内容取决于该变量的内容。

要查询变量

我们不能只使用$_GET全局获取我们的msds_pif_cat查询变量。相反我们要访问$wp_query对象的 query_vars 属性。

所以,在我们的msds-pif网页模板,我们将使用下面的代码访问该变量:

if(isset($wp_query->query_vars['msds_pif_cat'])) {
    $sMsdsCat = urldecode($wp_query->query_vars['msds_pif_cat']);
}

接下来的步骤

在我们的例子中,我们把所有的产品相匹配的类别名称从数据库存储在 $sMsdsCat 显示在页。显然你做什么和该变量是由你,从这一点上没有不同,如果你使用PHP的 $_GET 得到非WordPress的网页查询变量。

有一件事我应该在这里提到的是 rewrite_rules_array Hook就是当你更新或保存您的永久链接结构,所以在你做出这些改变,你必须重新保存的永久链接看到更改生效。

更多的例子

把上面的链接我们看到这一切行动一看。对使用多个自定义查询变量的一个例子,在屏幕上创新的经销商一看,我们用相似的方法来显示页面上的经销商对于一个给定的国家,使用搜索引擎友好的网址,而不需要创建一百个左右的站点和文件的网页模板。

最后,看看下面的关于WordPress URL重写更多的信息资源:

http://codex.wordpress.org/Function_Reference/WP_Query
http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html
http://www.seodenver.com/custom-rss-feed-in-wordpress/

原文:http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpressurl

本文系作者 秋末残雪 授权问说网发表,并经问说网编辑,转载请注明出处和 本文链接

相关文章

  • 2015-06-30Joomla和Dokuwiki会员帐号整合方案
  • 2016-12-02FlyJSONP轻量级的跨域AJAX请求插件
  • 2016-12-02Response JS创建高性能的支持移动设备的网站
  • 2016-05-15酷比了!Whats APP黑色版界面设计欣赏
  • 2016-06-30io.js衍生自Node.js并兼容npm的开发平台
  • 2016-07-05angularAMD使用RequireJS和AngularJS快速构建WebApp
  • 2016-07-06Java初识
  • 2016-07-06SVN
  • 发布评论

    为您推荐

    2个很少使用的CSS2.1版本的属性
    问说网 · 发布于 2015-09-28

    编写CSS代码规范总结

    首先需要规划样式并分为共有样式和页面个性化样式,然后才开始编码,编码的同时进行Debug,Validate和代码片断的总结,而不是在所有模板都完成后才进行这三个…

    问说网 · 发布于 2016-12-02

    FlyJSONP轻量级的跨域AJAX请求插件

    FlyJSONP是一个JavaScript库,用于实现跨域GET和POST请求服务,支持JSONP,并取得一个JSON格式的数据响应,这个Library具有易于…

    问说网 · 发布于 2016-05-13

    UX与UI两者有什么区别?

    这是一个很多人都讨论过的话题,UX和UI两者有什么区别?我们关于这个话题讨论了太多太多,就像一个陷阱。

    问说网 · 发布于 2016-12-02

    Response JS创建高性能的支持移动设备的网站

    Response JS 是一个轻量级的 jQuery 插件,用来创建高性能的支持移动设备的网站。它提供了一套语法用来根据不同的设备环境动态替换HTML代码。例如…

    做人生的赢家!设计师如何掌握主动权

    但是认真感受这些烦恼之后,发现一个更严重的问题就是:大部分设计师都没有设计的主动权。图是设计师在做,但是设计的过程和结果却不是设计师自己能够掌控的。于是我就在想…

    • 做人生的赢家!设计师如何掌握主动权
    • 做人生的赢家!设计师如何掌握主动权
    • 做人生的赢家!设计师如何掌握主动权
    • 做人生的赢家!设计师如何掌握主动权
    NicholasElliot · 发布于 2016-05-16 · 浏览 1132 · 评论 0
    问说网 · 发布于 2016-05-08

    Flex 4中的Spark组件介绍

    Flex 4 的不可植皮的容器类,它能够包含图像子组件,例如 UIComponents 、利用 Adobe Flash Professional 创建的 Fle…

    问说网 · 发布于 2016-03-08

    Actionscript在Worker中共享传递数据

    虽然 Worker 在单独的执行线程中执行其代码,但如果完全将其相互隔离,它们将不具有任何优势。Worker之间的通信最终意味着在 Worker 之间传递数据。…

    angularAMD使用RequireJS和AngularJS快速构建WebApp
    问说网 · 发布于 2016-07-05

    angularAMD使用RequireJS和AngularJS快速构建WebApp

    angularAMD是作者 marcoslin 使用 RequireJS + AngularJS开发的前端mvvm框架,因此你可以使用它快速创建一款Web Ap…

    问说网手机版

    躺着 站着 跪着轻松访问

    更多详情 关于作者

    秋末残雪

    问说网开源项目文档作者,关注WordPress、网站建设

    106 文章
    0 评论
    人气

    更多 热门话题

    APP界面

    关注 APP界面

    文章 41506 · 浏览 3251

    APP欣赏

    关注 APP欣赏

    文章 41427 · 浏览 2997

    APP手机界面

    关注 APP手机界面

    文章 41417 · 浏览 3129

    图片素材

    关注 图片素材

    文章 29463 · 浏览 2529

    高清图片

    关注 高清图片

    文章 26530 · 浏览 2749

    更多 推荐作者

    关注 秋天的孤寂

    文章 99 · 评论 0

    关注 溫柔的溫柔

    文章 91 · 评论 0

    关注 走了留下什么

    文章 110 · 评论 0

    关注 流浪的脚步

    文章 86 · 评论 0

    关注 籹孒不认输

    文章 94 · 评论 0

    关注 凉城梦镜

    文章 79 · 评论 0

    
    顶部 反馈 评论 底部

    意见反馈

    感谢您对问说网的支持,提出您在使用过程中遇到的问题或宝贵建议,您的反馈对我们产品的完善有很大帮助。

    您的反馈我们已收到!

    感谢您提供的宝贵意见,我们会在1-2个工作日,通过您留下的联系方式将处理结果反馈给您!