在WordPress 博客主题有个功能文件functions.php,这是个所有WP主题都具有的文件。functions.php在WordPress 中也是个很神奇且很强大的文件,使用WordPress的时候,博主或主题设计者可以在functions.php文件里面添加各种函数来实现博主对WordPress博客的各种不同需求。
什么是功能文件?
在WordPress里,所有主题都会有一个叫做functions.php的文件,这个文件负责为主题调用各种PHP函数。 functions.php与插件功能类似。此外,每当某个主题被激活,WordPress都会自动加载functions.php文件。使用父/子主题 时设置时,则会同时加载父/子主题de functions.php文件。
只要有足够的想象力和PHP技巧,我们可以通过functions.php文件实现自己需要的所有WordPress效果。
(虽然功能文件的工作机制类似于插件,但它并不是插件。)
创建主题功能文件
首先在主题里新建一个空白的functions.php文件。所有的自定义代码都会装入这个文件。新建文件后,在文件里添加下面的代码:
<?php /* 自定义代码 */ /* 自定义代码*/ ?> |
给函数名称添加前缀
在进行下一步前有一件事需要我们注意:给所有函数添加前缀。
这是一个简单而实际的规则,虽然有很多主题制作者并没有这样的习惯。假设你有一个自定义主题函数comment_output(),它的常见形式通常是:
function comment_output() { /* 自定义代码 */ } |
这段代码存在不安全因素。如果某天WordPress或者某个插件添加了一个同样名为comment_output()的函数,而它们没有为自己使用的函数添加前缀的习惯,那么我们就会遇到致命错误。
假设你的主题名是Browncoats,你可以在所有自定义函数前加上bowncoats_。那么上面那段代码应该是:
function browncoats_comment_output() { /* 自定义代码 */ } |
这是一个简单的变化,也是预防将来出现问题的有效措施。
(这个规则不仅适用于函数名称,对全局变量、常量以及类名称也同样适用。)
新建一个主题设置功能
这里我们想要达到下面几个目标:
WordPress有一个叫做after_setup_theme的动作hook。一旦父/子主题的功能文件加载完毕,这个hook也会被执行。 after_setup_theme是一个非常实用的hook,WordPress默认主题TwentyTen也使用了这个hook。
add_action( 'after_setup_theme', 'browncoats_theme_setup' ); function browncoats_theme_setup() { /* 添加各种过滤器(filter),动作(action),以及主题支持的功能 */ } |
这样我们就开始了对functions.php文件的整理。上面这段代码可以用来:
下面我们来看一个比较规范的functions.php文件:
<?php add_action( 'after_setup_theme', 'browncoats_theme_setup' ); function browncoats_theme_setup() { /* 添加主题支持的给你功能 */ add_theme_support( 'automatic-feed-links' ); /* 添加自定义动作 */ add_action( 'widgets_init', 'browncoats_register_sidebars' ); /* 添加自定义过滤器 */ add_filter( 'the_content', 'browncoats_highlight_words' ); } function browncoats_register_sidebars() { /* 示例 */ } function browncoats_highlight_words( $content ) { return $content; } ?> |
上面的代码其实很简单,涉及三个操作:
规范功能文件小贴士
functions.php文件示例
下面是一个符合WordPress主题检测规范的functions.php文件示范,文件中使用了hooks并编写了主题的一些常用功能。
<?php add_action( 'after_setup_theme', 'browncoats_theme_setup' ); function browncoats_theme_setup() { global $content_width; /* 为嵌入的视频等设置$content_width */ if ( !isset( $content_width ) ) $content_width = 600; /* 使主题支持自动feed链接 */ add_theme_support( 'automatic-feed-links' ); /* 使主题支持文章缩略图(推荐图片) */ add_theme_support( 'post-thumbnails' ); /* 使主题支持自定义背景 */ add_custom_background(); /* 向 'init' 动作hook添加导航菜单功能 */ add_action( 'init', 'browncoats_register_menus' ); /* 向 'widgets_init' 动作hook添加侧栏功能 */ add_action( 'widgets_init', 'browncoats_register_sidebars' ); /* 在 'template_rediret' 动作hook上加载JS文件 */ add_action( 'template_redirect', 'browncoats_load_scripts' ); } function browncoats_register_menus() { /* 通过register_nav_menu() 或register_nav_menus() 登记导航菜单 */ } function browncoats_register_sidebars() { /* 通过register_sidebar()登记动态侧栏 */ } function browncoats_load_scripts() { /* 通过wp_enqueue_script()存储自定义JAVASCRIPT */ /* 加载评论回复javascript */ if ( is_singular() && get_option( 'thread_comments' ) && comments_open() ) wp_enqueue_script( 'comment-reply' ); } ?> |
提示:本文摘自WordPress啦