wordpress实现自定义URL到自定义页面

一直有如此的需求,比如用wordpress搭建一个公司门户,需要一个产品列表的页面,这个页面需要完全自定义的程序去实现,无法实现为一篇文章或者一个页面,这在wordpress原来的系统中似乎很难实现。

其实这个功能唯一需求的地方,就是能够自定义一个URL然后映射到主题中自定义的一个页面中即可,对于数据库的读写还有其他的逻辑实现,完全可以在主题文件中用PHP代码随心所欲地实现,数据库表也可以随意建,这些都不是问题。但是wordpress就是没有提供额外的URL映射功能,有一个add_rewrite_rule()函数,只是可以自定义新的URL映射到原来的URL,并没有添加URL映射到主题文件的机制。

只能从源码入手,很快可以找到在wp-includes/template-loader.php中,是URL路由到主题文件的入口,所以当我们设置一个新的URL,比如: /production,将它映射到主题目录下的production.php。wordpress会认为 /production 是一个Page的URL,但是扫描数据库后发现没有对应的Page的静态url符合,所以is_404()就返回了true,然后$template被设置为主题对应的404页面。

这样就简单了,在template-loader.php中一堆if和elseif的后面,include( $template );的前面,我们加入以下代码,就可以实现我们的目的:

 

 代码如下 复制代码
else :
 $template = get_index_template();
endif;
// hacked
if(is_404()){        //新的URL一定会被认为是404页面
 if($wp_query->query_vars['pagename'] == 'production'){  //从404结果中找到我们的特殊URL
  $template = get_query_template('production');  //映射到自定义的主题文件
 }
} //www.111cn.net
// end
if ( $template = apply_filters( 'template_include', $template ) )
 include( $template );
return;

这样我们就从404的结果中,找到了我们自定义的URL路径,并将其映射到了主题目录中的production.php文件,这样就是完全自定义的URL和自定义的主题文件了,为所欲为吧亲!

时间: 2024-09-27 21:15:32

wordpress实现自定义URL到自定义页面的相关文章

使用有趣的自定义标记来布局页面

页面 今天我们来学习,如何使用有趣的自定义标记来布局页面.有的朋友可能有这样的疑问,自己随便定义的标记浏览器怎么能正确的认识呢? 这里我们就要用到文档的命名空间,那么命名空间又是指什么? 大家知道XML有一个很大的特点就是他的可扩展性.你可以创建你自己的标记或使用别人创建的标记,这里就存在了一个问题,即你所定义的标 记和别人定义的标识有可能相同,但他们各自所表示的意义却不同. 打一个形象的比喻,比如有两个人名字都叫蓝色,一个人在经典,一个人在天涯,如果你要找他们就可以这样说明,天涯:蓝色.经典:

struts2.0-Struts2 自定义转换器无法转换页面object数据

问题描述 Struts2 自定义转换器无法转换页面object数据 测试了下可以转换Double类型,可见转换器配置正确.前台QueryString Parameters 如下 id[materialName]:aaa id[type]:b instockQty:333 costPrice:111 createUser: outstockQty:111 id_1:ss returnQty:222 createDate[nanos]:0 createDate[time]:1453342211000

thinkphp 栏目-thinkphp栏目如何实现自定义url

问题描述 thinkphp栏目如何实现自定义url 问题:thinkphp我现在已经设置好了栏目表和栏目所属模型表,新建了自定义标签库实现栏目名称和链接的前台输出,但是链接没有实现自定义url,也就是根据栏目所属的模型访问相应的tp控制器模板.比如:前台有 网站首页(外部链接).公司介绍(单页模型).新闻动态(文章模型).产品展示(产品模型)四个栏目,放在数据库Column表里,当前台点击网站首页(外部链接)时,跳转到Column表填写的链接字段:当前台点击 公司介绍(单页模型)时,跳转到单页控

netbeans-java 自定义jsp标签,页面编译时提示无法找到setter method

问题描述 java 自定义jsp标签,页面编译时提示无法找到setter method 5C 我自己写了个实现分页的自定义jsp标签,该标签有GroupSizePageIndex以及PageSize属性,在jsp页面给这几个属性赋值时,netbeans提示找不到相应属性的setter method编译也通不过,原话如:org.apache.jasper.JasperException: PWC6339: Cannot find a setter method for the attribute

Android开发实现自定义新闻加载页面功能实例

本文实例讲述了Android开发实现自定义新闻加载页面功能.分享给大家供大家参考,具体如下: 一.概述: 1.效果演示: 2.说明:在新闻页面刚加载的时候,一般会出现五种状态 未知状态(STATE_UNKNOW).空状态(STATE_EMPTY).加载中(STATE_LOADING).错误(STATE_ERROT).成功(STATE_SUCCESS) 因为每个Detail页面都会出现,所以我们可以把他们封装成一个LoadPage的自定义view,可以复用 二.实现: 1.首先的定义三个布局,为什

activiti自定义流程之自定义表单(二):创建表单

注:环境配置:activiti自定义流程之自定义表单(一):环境配置 在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ueditor插件的功能在前端进行修改. 由于自己的前端相关技术太渣,因此好多东西都不会用,导致修改实现的过程也是破费了一番功夫,头皮发麻了好几天. 既然是用别人的插件进行修改,那么我想如果只是单独的贴出我修改后的代码,可能没有前后进行对比好理解,因此这里就把原代码和修改后的同时对比着贴出,以便于朋友们能从对比中更快的得到启发.

WordPress中的URL通用的几种形式分析

WordPress是博主常用的建站程序,而此次大赛中WordPress博客也得到了充分的发挥,排名前五的站点中,有四个使用 WordPress建站的,可见WordPress在SEO方面做也是非常优秀的. Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL地址,这种地址可以是本地磁盘,也可以是局域网上的某一台计算机,更多的是Internet上的站点.简单地说,URL就是Web地址,俗称"网址". URL 是统一的,因为它们采用相同的基本语法,无论寻址哪种特定类型的资

activiti自定义流程之自定义表单(三):表单列表及预览和删除

注:(1)环境配置:activiti自定义流程之自定义表单(一):环境配置         (2)创建表单:activiti自定义流程之自定义表单(二):创建表单 自定义表单创建成功,要拿到activiti中使用,自然需要让创建activiti流程的人能够看到究竟有那些表单可用,各表单的效果是什么,因此就需要一个展示页面并提供预览功能.同时,增删改查四大功能是基础,自然都是需要的,我这里没有做表单修改,只简单的实现了删除. 我下载的ueditor插件中有基本的创建和预览代码,因此我就参考这些再度

Groovy探索 自定义Range 三 自定义Range与责任链模式

责任链模式也是我们比较常用的一种模式,我在<Groovy探索之责任链模式>中有个探索.大家也可以在网上搜索,应该有很多这方面的文章. 在这里,我们将使用自定义的Range类来实现责任链模式,使用的例子还是在<Groovy探索之责任链模式>一文中所谈到的"孙悟空大战二郎神"的这个情节.这样,我们可以把这两篇的文字结合起来看,使得我们能够对比这两种开发方式.使得我们能够深入的理解自定义Range类的使用. 在"孙悟空大战二郎神"这个情节里,重点讲