欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

WordPress自定义页面(非模版)

  这种方法的自由度较高,并且可以创建非WordPress格式的URL,非常有用。比如我们要把 /test 转交给主题文件夹下的 /custom/test.php 来处理,就可以用这种方式来处理。这种方法用到 template redirect 钩子,template redirect 是 WordPress 在预处理好所有参数设置之后决定调用主题模板的时候调用的。

  我们只需在主题的 function.php 文件的尾部加上:

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.'/custom/'."/$basename.php");
}
  
add_action('template_redirect', 'templateRedirect');

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

  例如如果我们在 /custom 文件夹下创建一个 test.php 的文件如下:

<?php get_header();?>
<div id="main">
	<div id="content">
		<div id="post-999" class="page type-page status-publish hentry">
			<h2 class="post-title">Iteblog page</h2>
			<div class="post-content">
				<?php echo "test"; ?>
				<div class="clear"></div>
			</div><!-- END .post-content -->
			<div class="clear"></div>
		</div><!-- #post-## -->
	</div><!-- END #content -->
	<?php get_sidebar(); ?>
	<div class="clear"></div>
</div><!-- END #main -->
<?php get_footer(); ?>

  那么只要输入/test 就能显示test,并且具有主题的框架和 CSS 样式,非常方便好用。

本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【WordPress自定义页面(非模版)】(https://www.iteblog.com/archives/1200.html)
喜欢 (4)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!
(2)个小伙伴在吐槽
  1. 这个不错

    Ray2014-12-31 10:54 回复
    • 是的,可以很方便的自定义页面。

      w3970907702014-12-31 12:37 回复