使用 WordPress 子主题自定义功能

正常情况下如果你想添加自定义的功能,并且不使用插件的情况下,那首选就是在当前主题下的 functions.php 里面添加自定义代码,但问题是,如果主题有更新时,这里面的代码会被覆盖,从而丢失了你的自定义功能。这时候子主题的优势就来了,它可以让你无需修改任何父主题代码却也能达到自定义功能目的~

子主题目录

首先进入你的 WordPress 下 wp-content/themes 目录,创建与当前主题相同名字的目录,目录名字结尾加上 -child,比如我的父主题目录是 slanted,则创建目录 slanted-child

$ cd /opt/lampp/htdocs/wordpress/wp-content/themes
$ sudo mkdir slanted-child

修改权限,并进入目录

$ sudo chown -R your_user:www-data slanted-child/
$ sudo chmod -R 777 slanted-child/
$ cd slanted-child/

子主题配置

子主题至少要包含一个 style.css 文件才能生效,创建该文件

$ vi style.css

并写入以下内容

/*
Theme Name:     SomeTheme Child
Theme URI:      http: //example.com/
Description:    Child theme for the SomeTheme theme
Author:         Your name here
Author URI:     http: //example.com/about/
Template:       SomeTheme
Version:        0.1.0
*/

各参数意义:

  • Theme Name: (必需) 子主题的自定义名称,但通常是 父主题名字 + Child
  • Theme URI: (可选) 子主题的主页
  • Description: (可选) 子主题的描述,比如: 我是 xxx 的子主题
  • Author URI: (可选) 作者主页
  • Author: (可选) 作者的名字
  • Template: (必需) 父主题的目录名,区别大小写
  • Version: (可选) 子主题的版本,比如:0.11.0 等

一般子主题是自用的,所以我的子主题只挑了以下几个:

/*
Theme Name: Slanted Child
Description: Slanted 的子主题
Author: Gelomen
Template: slanted
*/

引入父主题样式

在 style.css 下使用 @import 引入父主题样式,这样子主题就可以拥有父主题的样式了

/*
Theme Name: Slanted Child
Description: Slanted 的子主题
Author: Gelomen
Template: slanted
*/

@import url("../slanted/style.css");

此时回到你的网站后台主题页面就可以看到你的主题选项,启用后就可以看到你的网站跟父主题是一样的

其它配置文件

子主题目录下可以拥有以下文件类型:

  • style.css (必需)
  • functions.php (可选)
  • 模板文件 (可选)
  • 其他文件 (可选)

functions.php

这个文件默认内容为:

<?php

?>

将你原本放在父主题的自定义代码迁移到这里,父主题更新时就不怕丢失了,比如我的 美化搜索 URL 和引入自定义 CSSJavaScript 文件代码,这里可以直接在后台的主题编辑器里修改内容

<?php

//搜索美化伪静态
function change_search_url_rewrite() {
    if ( is_search() && ! empty( $_GET['s'] ) ) {
        wp_redirect( home_url( '/search/' ) . urlencode( get_query_var( 's' ) ) );
        exit();
    } elseif ( is_search() && empty( get_query_var( 's' ) ) ) {
        wp_redirect( home_url( '/search' ) );
        exit();
    }
}
add_action('template_redirect', 'change_search_url_rewrite');

// 加载自定义js
function my_js_fun() {
	wp_enqueue_script('simulate_shell', '/wp-content/uploads/js/simulate_shell.js', array(), '1.5', true);
}
add_action('wp_footer', 'my_js_fun');

// 加载自定义css
function my_css_fun() {
	wp_enqueue_style('simulate_shell', '/wp-content/uploads/css/simulate_shell.css', array(), '1.0');
}
add_action('wp_head', 'my_css_fun');

?>

模板文件

模板文件在子主题中可以覆盖任何父主题模板中的文件,只需要创建同名文件就行

子主题使用模板文件的例子:

  • 增加父主题没有的模板,可以在编辑页面下选择
  • 替换比父主题更个性化的模板,重写 index.php 或 home.php

其他文件

子主题目录还可以放置其它用于主题的文件,比如自定义样式的 CSS 文件 和 实现前端功能的 JavaScript 文件,以及让子主题显示预览的 screenshot.png 文件

CSS 和 JavaScript

我之前在首页增加的模拟 Shell 的 CSS 和 JavaScript 文件就可以移动当前的子主题目录下

$ mv -f ../../uploads/css/ ./
$ mv -f ../../uploads/js/ ./

然后修改 functions.php 里引用的路径

...
...
wp_enqueue_script('simulate_shell', '/wp-content/themes/slanted-child/js/simulate_shell.js', array(), '1.5', true);
...
...
wp_enqueue_style('simulate_shell', '/wp-content/themes/slanted-child/css/simulate_shell.css', array(), '1.0');
...
...

子主题截图

在后台主题管理页面,我们当前的子主题没有预览图,我们可以自行将我们的主页截图,命名为 screenshot.png,并存放在子主题目录下,然后刷新后台主题管理页面即可看到子主题有预览图了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值