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

秋末残雪 · 发布于 2015-04-26 · 字数6620 · 浏览 3898 · 评论 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

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

相关文章

  • 2014-12-11设计之道:Factory Method 模式介绍
  • 2016-04-07在CSS中使用自定义字体
  • 2016-05-12OhAuth基于Node.js简化OAuth的认证开发支持
  • 2016-05-16向设计前辈学习!9个小技巧让你的设计更专业
  • 2016-06-22FTP被动/主动模式介绍和FTP工具设置方法
  • 2016-07-04Trianglify唯美的几何图形背景生成插件
  • 2016-07-05angularAMD使用RequireJS和AngularJS快速构建WebApp
  • 2016-07-06Java Web的安全验证机制
  • 发布评论

    为您推荐

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

    JavaScript中变量的作用域和位置提升

    我希望这篇文章能够给JavaScript程序员最容易困惑的部分一些启示。我尽力写的全面,以免引起更多的困惑。如果我写错了或是漏掉了某些重要的东西,请一定让我知道…

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

    Pjax无刷新加载插件和运行原理介绍

    现在很多网站( facebook, twitter) 都支持这样的一种浏览方式, 当你点击一个站内的链接的时候, 不是做页面跳转, 而是只是站内页面刷新。 这样…


    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/34323_0_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1608

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc/wp-content) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: imagejpeg(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/34323_0_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/class-wp-image-editor.php on line 420

    Warning: imagejpeg(../uedsc/wp-content/uploads/post-thumbnail/34323_0_thumbnail.jpg): failed to open stream: Operation not permitted in /home/wwwroot/uedsc.com/wp-includes/class-wp-image-editor.php on line 420

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/34323_1_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1608

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc/wp-content) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: imagejpeg(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/34323_1_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/class-wp-image-editor.php on line 420

    Warning: imagejpeg(../uedsc/wp-content/uploads/post-thumbnail/34323_1_thumbnail.jpg): failed to open stream: Operation not permitted in /home/wwwroot/uedsc.com/wp-includes/class-wp-image-editor.php on line 420

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/34323_2_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1608

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc/wp-content) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: imagejpeg(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/34323_2_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/class-wp-image-editor.php on line 420

    Warning: imagejpeg(../uedsc/wp-content/uploads/post-thumbnail/34323_2_thumbnail.jpg): failed to open stream: Operation not permitted in /home/wwwroot/uedsc.com/wp-includes/class-wp-image-editor.php on line 420

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/34323_3_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1608

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc/wp-content) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(../uedsc) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: is_dir(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/functions.php on line 1613

    Warning: imagejpeg(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/34323_3_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-includes/class-wp-image-editor.php on line 420

    Warning: imagejpeg(../uedsc/wp-content/uploads/post-thumbnail/34323_3_thumbnail.jpg): failed to open stream: Operation not permitted in /home/wwwroot/uedsc.com/wp-includes/class-wp-image-editor.php on line 420

    Redactor.js轻量级jQuery富文本编辑器

    Redactor 是一个 jQuery 的插件,实现在线所见即所得的 HTML 编辑器。界面简洁加载速度快。不过不支持 IE6 浏览器,如果你不需要考虑 IE6…

    • Redactor.js轻量级jQuery富文本编辑器
    • Redactor.js轻量级jQuery富文本编辑器
    • Redactor.js轻量级jQuery富文本编辑器
    • Redactor.js轻量级jQuery富文本编辑器
    问说网 · 发布于 2016-05-10 · 浏览 2297 · 评论 0

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/36919_0_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/36919_1_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/36919_2_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/36919_3_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    缤纷上新!30个美艳绝伦的葡萄酒网站设计欣赏

    今天的葡萄酒网站质量非常高,有的强调性价比,有的想突显尊贵身份,但设计师们都干得很漂亮,完美地契合了产品的特点,如果有饮品相关设计项目的同学,这组网站非常有参考…

    • 缤纷上新!30个美艳绝伦的葡萄酒网站设计欣赏
    • 缤纷上新!30个美艳绝伦的葡萄酒网站设计欣赏
    • 缤纷上新!30个美艳绝伦的葡萄酒网站设计欣赏
    • 缤纷上新!30个美艳绝伦的葡萄酒网站设计欣赏
    EmmieKaren · 发布于 2016-05-16 · 浏览 1111 · 评论 0

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/37678_0_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/37678_1_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/37678_2_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Warning: file_exists(): open_basedir restriction in effect. File(../uedsc/wp-content/uploads/post-thumbnail/37678_3_thumbnail.jpg) is not within the allowed path(s): (/home/wwwroot/uedsc.com/:/tmp/:/proc/) in /home/wwwroot/uedsc.com/wp-content/themes/mwst/loop.php on line 15

    Illustrator绘制可爱的猪脸图标

    通过这个小猪的练习,可以很好的掌握Illustrator的一些技巧,比如说路径工具,渐变色,阴影,混合模式等等。 如何在Adobe Illustrator画一个…

    • Illustrator绘制可爱的猪脸图标
    • Illustrator绘制可爱的猪脸图标
    • Illustrator绘制可爱的猪脸图标
    • Illustrator绘制可爱的猪脸图标
    唐秀 · 发布于 2016-05-17 · 浏览 1174 · 评论 0
    问说网 · 发布于 2016-06-30

    io.js衍生自Node.js并兼容npm的开发平台

    io.js 是一个衍生自 Node.js™,并兼容 npm 的开发平台,io.js与Node.js项目再次合并,不会有任何进一步的io.js释放。在io.js所…

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

    刷流量的注意了使用流量宝可能会中毒!

    相信大家都知道刷流量的有很多软件,最著名的就是流量精灵和流量宝,而我一直使用的流量宝,两个软件的使用基本差不多,可是你知道吗?使用流量刷流量可能会中毒,这不是危…

    Vincent · 发布于 2016-07-06

    类和对象

    定义 1. 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态属性(attibute)和动态行为(method) 2. 类可以看成一…

    问说网手机版

    躺着 站着 跪着轻松访问

    更多详情 关于作者

    秋末残雪

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

    106 文章
    0 评论
    人气

    更多 热门话题

    APP界面

    关注 APP界面

    文章 41506 · 浏览 3468

    APP欣赏

    关注 APP欣赏

    文章 41427 · 浏览 3195

    APP手机界面

    关注 APP手机界面

    文章 41417 · 浏览 3361

    图片素材

    关注 图片素材

    文章 29463 · 浏览 2720

    高清图片

    关注 高清图片

    文章 26530 · 浏览 2945

    更多 推荐作者

    关注 秋天的孤寂

    文章 99 · 评论 0

    关注 惢碎葬爱

    文章 96 · 评论 0

    关注 怎麽继续

    文章 90 · 评论 2

    关注 溫柔的溫柔

    文章 91 · 评论 0

    关注 走了留下什么

    文章 110 · 评论 0

    关注 莪很迷茫

    文章 97 · 评论 0

    
    顶部 反馈 评论 底部

    意见反馈

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

    您的反馈我们已收到!

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