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

秋末残雪 · 发布于 2015-04-26 · 字数6620 · 浏览 4044 · 评论 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-13如何在WordPress插入链接的时候添加nofollow复选框
  • 2016-02-06Swiper开源免费的移动端触摸滑动插件
  • 2016-02-28Windows 7 找不到该项目错误解决方法
  • 2016-05-17设计入门之小清新ICON图标制作
  • 2016-06-22FTP被动/主动模式介绍和FTP工具设置方法
  • 2016-07-12phpStudy帮助手册
  • 2016-07-15Huge Page 是否是拯救性能的万能良药?
  • 2016-08-08为Bash和VIM配置美观奢华的状态提示栏
  • 发布评论

    为您推荐

    浅谈使用HTML5和CSS3制作响应式Web页面

    HTML5与CSS3已经当仁不让的成为了这两年Web界最火爆的词,他们似乎在HTML4和CSS2统治了Web很多年之后的某一天突然爆发,然后一直占据着所有Web…

    • 浅谈使用HTML5和CSS3制作响应式Web页面
    • 浅谈使用HTML5和CSS3制作响应式Web页面
    • 浅谈使用HTML5和CSS3制作响应式Web页面
    • 浅谈使用HTML5和CSS3制作响应式Web页面
    问说网 · 发布于 2016-02-22 · 浏览 1918 · 评论 0

    如何用PS图层样式打造唯美抽象光

    抽象光的制作在广告、海报、游戏场景设计中特别多,这类唯美的光线制作也是学PS时首要掌握的难点。我们今天要学的抽象光,也是在进阶合成技术的过程中必备的另一项技能。

    • 如何用PS图层样式打造唯美抽象光
    • 如何用PS图层样式打造唯美抽象光
    • 如何用PS图层样式打造唯美抽象光
    • 如何用PS图层样式打造唯美抽象光
    AbeCecilia · 发布于 2016-05-16 · 浏览 1194 · 评论 0
    问说网 · 发布于 2016-06-17

    Apache使用Ab命令做性能测试教程

    我们有了自己的服务器,有时候我们需要测试下我们的服务器到底能抗多少数据,这样有利于我们部署和配置服务器,在Apache里面有自带免费的性能测试工具Apache …

    分享20款优秀的Web移动开发框架
    问说网 · 发布于 2016-06-25

    分享20款优秀的Web移动开发框架

    移动开发框架可以帮助开发者快速开发出满足需求的Web移动应用和网站,本文收集了20款针对开发者的移动开发框架,供开发者借鉴使用。

    SVN
    Vincent · 发布于 2016-07-06

    SVN

    下载 Subversion(SVN服务端): 下载地址1 下载地址2 TortoiseSVN(SVN客户端): 下载地址1 下载地址2   安装 SV…

    Vincent · 发布于 2016-07-06

    Java中面向对象的封装和继承以及多态

    封装 封装是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法,封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问 java的…

    Vincent · 发布于 2016-07-06

    Java接口和抽象类

    抽象类 抽象类中的方法既可以有抽象方法,也可以有非抽象方法,可以全部都是抽象方法,也可以全部都是非抽象方法 抽象方法只能出现在抽象类或接口中,不能出现在非抽象类…

    Vincent · 发布于 2016-07-06

    Spring MVC文件上传

    1.    文件配置 SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver来明确告诉Di…

    问说网手机版

    躺着 站着 跪着轻松访问

    更多详情 关于作者

    秋末残雪

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

    106 文章
    0 评论
    人气

    更多 热门话题

    APP界面

    关注 APP界面

    文章 41506 · 浏览 3765

    APP欣赏

    关注 APP欣赏

    文章 41427 · 浏览 3585

    APP手机界面

    关注 APP手机界面

    文章 41417 · 浏览 3810

    图片素材

    关注 图片素材

    文章 29463 · 浏览 3019

    高清图片

    关注 高清图片

    文章 26530 · 浏览 3259

    更多 推荐作者

    关注 倾听寂寞

    文章 83 · 评论 0

    关注 溫柔的溫柔

    文章 91 · 评论 0

    关注 流浪的脚步

    文章 86 · 评论 0

    关注 籹孒不认输

    文章 94 · 评论 0

    关注 思念像咒语

    文章 102 · 评论 0

    关注 呼吸快窒息

    文章 104 · 评论 0

    
    顶部 反馈 评论 底部

    意见反馈

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

    您的反馈我们已收到!

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