WordPress模板函数functions.php中加入函数的调用方式

WordPress之所以强大,一方面是更新非常及时,大版本、小版本更新不断;另外一方面有数以万计的插件、主题等可供选择。此外可定制性也是非常强,甚至可以无需懂得太多的代码,例如俺这样的,也可以放心大胆的对WordPress进行修改。这里也涉及到一个插件跟使用代码的区别了,实际上,个人感觉,两者的差别并不大。哪个顺手就用哪个。所谓的性能差异,也是以讹传讹,真没有见过用数据、实践来说话的。而通过在functions.php文件中添加代码来更新自定义功能,更是常见的操作了。例如前面WordPress文章页段落首行缩进2字符的处理 Wordpress百度搜索自动推送代码的优化改进   也多次提到怎么来调用新调整的代码。

functions.php文件位于主题文件夹中,就是说每个主题都有一个相应的文件。因此在functions.php中做的的修改,都是针对当前主题的,一旦切换主题,相应的操作都会失效。虽然可以把functions.php当成一个强大的WordPress插件来看待,但实际上functions.php还是具有一定的局限性。当然优点也是比较明显的,可以在WordPress后台使用内置的主题编辑器来编辑functions.php,并且在更新的时候WordPress对相应的操作会进行检查,出现问题会阻止更新,避免出现整个站都倒掉的困境。注意修改完操作,务必点击更新文件,这样才会使得新的模版函数生效。

图1.在WordPress后台使用theme editor进行编辑

在后台编辑functions.php是一个方式,另外当然也可以在本地或者服务器端直接打开文件,使用文本编辑器notepad++等软件进行编辑,然后直接保存。当然风险性也是比较高的,一不留神就会使得站点停止运行。所以备份是非常有必要的了。

如上所述为第一种方法,即直接在functions.php文件中贴上相应的代码,但前面也提到更换更换主题、或者主题升级就会导致代码生效的问题。这里就引入了一个php文件调用的问题。有三种方式可以处理,都是利用了WordPress的特性。

方式一、使用独立文件调用:

functions.php可以引入其他php文件,使用的是如下代码,即在路径中将要调整操作的代码另存为一个正常的php文件,并在/functions-test.php 替换为完整的路径,可以是相对路径,也可以是绝对路径。这样,程序执行到这里时,会再调用执行相应的php文件。这样如果都放到同一php中,则一行就行,多个php文件则需要多行。该代码同样需要加入到functions.php最后一个?>之前。

// 引入其它functions.php文件
@include(TEMPLATEPATH.'/functions-test.php');

方式二、使用文件夹调用:

像上面所述的操作,一般情况,增加一个功能,或者修改,希望独立放到一个php文件中出现问题也好查证,修改。这样可以借用如下代码:

define('functions', TEMPLATEPATH.'/functions');
IncludeAll(functions );
function IncludeAll($dir){
    $dir = realpath($dir);
    if($dir){
        $files = scandir($dir);
        sort($files);
        foreach($files as $file){
            if($file == '.' || $file == '..'){
                continue;
            }elseif(preg_match('/.php$/i', $file)){
                include_once $dir.'/'.$file;
            }}}}

在主题下新建functions文件夹,把所有需要调用的代码函数的php文件都保存在其中。Php执行的时候会把该文件夹下的所有php文件进行执行。其后有新增的,直接保存到该文件夹就行;有不需要的,从该文件夹中删除即可。这样的话就比较简单,快捷,出了问题也能非常快的查证、解决。实在找不出原因,直接把对应的php文件删除就行。

方式三、使用子主题模式:

WordPress的主题是支持子主题模式的。子主题依赖父主题,但是可以对父主题进行修改。按照WordPress的规则,子主题中的functions.php的优先级高过父主题,运行的时候会先执行子主题,再执行父主题的functions.php。所以这样就可以使用建立一个子主题,然后再将相应的代码、函数放到子主题的functions.php中即可。即使主题升级也不会受到影响。

原文:https://codex.wordpress.org/zh-cn:%E5%AD%90%E4%B8%BB%E9%A2%98

图2.官方网站上对子主题functions.php的介绍

这样子,无疑有多种可以选择的方式来解决自定义代码与函数的问题了。