在更新WordPress主题时如何保留functions.php里的自定义代码

相信大家对wordpress主题中的functions.php文件一定不陌生,这个文件是很多人折腾的最多的文件,本站很多教程中的代码也是直接加到 functions.php 就可以使用的,可是每次更新主题时这个文件都会被主题默认的给覆盖,所以更新主题前都得提前备份自定义的代码,这样就有点麻烦了!那么,怎么对 functions.php 进行高效正确的更新呢?

其实办法非常简单,以下有3种方法对functions.php文件进行管理,免去更新主题时复制黏贴大量代码的麻烦!

方法一


实现步骤

为WordPress引入其他functions.php文件,将下面的内容保存为utf-8格式的php文件,并起名为functions-lxtx.php,放入跟主题的functions.php文件同目录;

<?php
/**
 * customize function of theme by xxx
 * @author    xxx
 * @site      xxx
 * @copyright Copyright (c) 2017-2018
 * @link      http://www.xxx.com/
 */
?>
<?php

/* 在下面加入自定义函数 */

?>

然后在functions.php中加入以下代码,在主题更新functions.php文件时保持加入下面这段代码就可以了.

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

最后,和在functions文件里面加代码一样,在这个functions-lxtx.php文件里面最后一个?>前加入自定义功能代码就可以了。

举例

比如,这里有个小功能,就是“后台颜色随机切换”的代码:

// 后台颜色随机切换
function Bing_random_admin_color(){
static $color;
if( isset( $color ) ) return $color;
$color = array_keys( $GLOBALS['_wp_admin_css_colors'] );
$color = $color[array_rand( $color )];
return $color;
}
add_filter( 'get_user_option_admin_color', 'Bing_random_admin_color' );

将上面的代码加入那个functions-lxtx.php文件里面,就是下面这样的:

<?php
/**
 * customize function of theme by xxx
 * @author    xxx
 * @site      xxx
* @copyright Copyright (c) 2017-2018
* @link      http://www.xxx.com/
 */
?>
<?php

/* 请在下面加入自定义函数 */

// 后台颜色随即切换
function Bing_random_admin_color(){
static $color;
if( isset( $color ) ) return $color;
$color = array_keys( $GLOBALS['_wp_admin_css_colors'] );
$color = $color[array_rand( $color )];
return $color;
}
add_filter( 'get_user_option_admin_color', 'Bing_random_admin_color' );
?>

方法二


自己制作一个小插件,通过插件来加载自定义的函数功能.

步骤如下

首先将下面的代码保存为utf-8格式的php文件,名字随意,最好英文或数字吧~~然后放进wp-content/plugins文件夹里面;

< ?php
/*
Plugin Name: 模版函数扩展插件
Description: 给主题模版函数库里添加点小功能
Author: XXX
*/
//文件里面加入代码就可以和functions文件一样了

?>

和在functions文件里面加代码一样,将功能代码加到上面的最后一个?>即可,然后在后台的插件列表里就可以看到这个自己制作的“模版函数扩展插件”了。这样一来,以后自定义功能代码都可以放到这个“自制”的小插件里,主题更新可以随意更新不用担心这些自定义代码丢失或被覆盖了。

方法三


将功能代码存为一个个独立的php文件来管理。

实现步骤

第一步:在主题文件夹下新建一个名为inc的文件夹

第二步:将以下代码加入到当前主题的functions.php文件中,代码如下:

define('INC', TEMPLATEPATH.'/inc');
IncludeAll( INC );
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;
            }
        }
    }
}

以后每次为主题扩展功能的时候只要将代码保存为一个新的php文件,文件名不限,但最好是英文或数字,然后将文件放入到inc目录下即可,效果和直接将代码加到functions.php文件一样,而且一旦代码出错只要直接删除出错代码的文件即可。

这里需要做个补充:笔者由于使用的是子主题,那么如果采用上面的这个代码会不生效,所以需要做个相应的修改,修改入下,把上面的:

define('INC', TEMPLATEPATH.'/inc');

改成:

define('functions', get_stylesheet_directory().'/functions');

因为wordpress,TEMPLATEPATH 已近被弃用了.这里说明如下:

get_stylesheet_directory()

将返回一个子主题的目录,而

get_template_directory()

将始终返回父主题目录.

基于此,由于我们采用了子主题,所以我们用get_stylesheet_directory()取代TEMPLATEPATH

这个时候,我们就可以在子主题的目录下新建一个inc文件夹,然后里面存放一些自定义的功能,我们就可以在子主题中的functions.php中运用:

define('functions', get_stylesheet_directory().'/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;
            }
        }
    }
}

代码,自动加载inc文件夹中的php文件。

每日壁纸

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注