WordPress不仅可以做博客,还能做其他类型的网站,例如企业网站、电子商务网站等等。这些网站的首页不能是博客的样子,需要更加定制化一些。Genesis框架给我们提供了利用钩子函数修改模板的方法,那么有没有更直观的方法呢?

现在我们尝试修改首页的样子,后台->设置->阅读中可以设定首页为一个静态页面,只要定制这个静态页的模板就好。但还有另一种方式,也是很多主题再用的方式,在主题目录中创建一个文件叫home.php,根据WordPress的结构优先级,这个文件是优先级最高的首页文件,即使后台设定使用blog作为首页,有了这个文件首页也会被它替代。

我们就采用home.php的方法。

如果你打开Genesis Framework下的index.php或page.php等模板文件,你会发现里面只有一句代码

genesis();

这句代码有什么用?看一看源代码便知,genesis()函数的源代码位于lib/framework.php中,如下

function genesis() {

	get_header();

	do_action( 'genesis_before_content_sidebar_wrap' );
	?>
	<div id="content-sidebar-wrap">
		<?php do_action( 'genesis_before_content' ); ?>
		<div id="content" class="hfeed">
			<?php
				do_action( 'genesis_before_loop' );
				do_action( 'genesis_loop' );
				do_action( 'genesis_after_loop' );
			?>
		</div><!-- end #content -->
		<?php do_action( 'genesis_after_content' ); ?>
	</div><!-- end #content-sidebar-wrap -->
	<?php
	do_action( 'genesis_after_content_sidebar_wrap' );

	get_footer();

}

原来这个函数负责输出本该写在模板文件里的代码,那么思路就有了,把函数的内容拷贝到home.php中,把我们需要修改的地方替换成自己写的代码,我们就用genesis提供的sample child theme作为例子,在child目录下放一个home.php,拷贝下面的代码

<?php
//content of home.php

get_header();

do_action('genesis_before_content_sidebar_wrap');
?>
<div id="content-sidebar-wrap"><?php do_action('genesis_before_content'); ?>

    <div class="hfeed" id="content">
        <?php
        //这里本来是输出博客内容的<br />
        //我们把它换成自己的代码<br />
        echo '这是我自定义的内容';
        ?></div>
    <!-- end #content -->
    <?php do_action('genesis_after_content'); ?></p>
</div>
<!-- end #content-sidebar-wrap -->
<?php
do_action('genesis_after_content_sidebar_wrap');
get_footer();

访问首页,可以看到页面已经变成了下面的样子,虽然我没做任何设置上的更改

删掉的部分就是一篇一篇的显示blog文章的代码,把这部分换成slideshow加一些widget(特色文章,目录文章、产品展示等等),就可以做成企业主题或cms主题。而其他部分不需要更改,就留在那里,非常方便。