WordPress创建自定义URL页面模板

张子凡 WordPress 6个月前 (09-22) 阅读(3285) 评论(13)

WordPress创建模板的其实都非常的简单,而WordPress添加自定义页面一般有两种方法,一种是使用自定义模板,另外一种是使用template_redirect动作钩子来实现自定义页面。这也是子凡最近在开发博客导航中屡试不爽的一个功能,其中主要就是为了完成博客导航中URL的一个统一及规范,所以这就成了最好的一个方法了。

WordPress

WordPress自定义创建页面模板其实非常的简单,但是也比较的有局限性,因为WordPress在page页面类型中的url是不支持同名存在的,所以一旦与分类目录活着标签别名相同后,自定义固定链接使用文章名的链接就会出现错误,这也使得不能规范博客导航中的URL链接,所以这就成了子凡在开发博客导航中一直纠结的一个梗,所以最后不得不弃用WordPress自定义模板的这个功能。

template_redirect 动作钩子很有用,因为它是WordPress知道用户正在浏览的页面的关键。它在特定的页面选择 theme template 之前执行。在只在网站的前端触发,并不在管理员页面触发。直接调用 WordPress 的 API. 来解决这个问题。

老规矩,在当前主题functions.php中添加一下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//自定义页面模板
function loadCustomTemplate($template) {
	global $wp_query;
	if(!file_exists($template))return;
	$wp_query->is_page = true;
	$wp_query->is_single = false;
	$wp_query->is_home = false;
	$wp_query->comments = false;
	// if we have a 404 status
	if ($wp_query->is_404) {
		// set status of 404 to false
		unset($wp_query->query["error"]);
		$wp_query->query_vars["error"]="";
		$wp_query->is_404=false;
	}
	// change the header to 200 OK
	header("HTTP/1.1 200 OK");
	//load our template
	include($template);
	exit;
}
function templateRedirect() {
	$basename = basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']);
	loadCustomTemplate(TEMPLATEPATH.'/blogs/'."/$basename.php");
}
add_action('template_redirect', 'templateRedirect');

这样就实现了WordPress查找主题文件夹下/blogs 文件夹下的 php 文件,并且将相匹配的 URL 请求转交给对应的 php 文件来处理的效果,与此同时,这个 php 文件还保持了对 WordPress API 的调用,因此留给我们的空间非常大。

如果我们需要自定义某个页面链接的模板,就需要在主题文件夹下的/blogs目录创建一个xxx.php的php文件。这里页面的内容子凡就不提供代码示例了。

那么最后我们就只需要输入 domain.com/xxx 就能显示这个xxx.php的文件内容了,并且xxx.php这个文件是支持所有WordPress函数的,具有主题的框架和CSS样式,非常方便好用。

除非注明,否则均为泪雪博客原创文章,转载请以链接形式标明本文地址

本文链接:https://zhangzifan.com/wordpress-template-redirect.html

发表评论

  1. 松松软文发布
    1楼
    松松软文发布 6个月前 (09-28)

    博客不错哈,,,支持

  2. 任务易
    2楼
    任务易 6个月前 (09-25)

    为什么不让坐沙发~来了几次了

  3. 任务易
    3楼
    任务易 6个月前 (09-25)

    可以沙发吗凡凡 哈哈 不太懂的竟然认真看完了

  4. 机友窝
    4楼
    机友窝 6个月前 (09-23)

    分享了

  5. 卢松松商城
    5楼
    卢松松商城 6个月前 (09-22)

    我竟然在博主的页面上看到了浮动的弹幕。。

    • 张子凡
      回复
      张子凡 6个月前 (09-22)
      回复 @卢松松商城 :来了这么多次,终于被你发现了
  6. 增达信购
    6楼
    增达信购 6个月前 (09-22)

    我对你博客的爱,你永远不会明白!

    • 张子凡
      回复
      张子凡 6个月前 (09-22)
      回复 @增达信购 :哈哈哈,你不说我怎么能明白呢
  7. 买家秀
    7楼
    买家秀 6个月前 (09-22)

    网站刚改版,之前是wordpress 定位原因换掉了!!!来支持博主!!

    • 张子凡
      回复
      张子凡 6个月前 (09-22)
      回复 @买家秀 :好的,欢迎欢迎
  8. 百度你好
    8楼
    百度你好 6个月前 (09-21)

    谢谢分享的了,wordpress 看到很多人在用,下次也试试