WordPress主题开发( 十二)之—— 主题的functions.php
WordPress主题开发( 十)之—— 主题的functions.php
- 介绍
- 使用`functions.php` vs. 插件
- 创建和使用`functions.php`
- 在`functions.php`中的常见用途
- 1. 使用WordPress钩子
- 2. 启用WordPress功能
- 3. 定义可重用的函数
- 4. 添加自动Feed链接
- 5. 自定义导航菜单
- 6. 文本域加载
- 7. 定义内容宽度
- 示例`functions.php`文件
- 总结
介绍
functions.php
文件是WordPress主题开发中的关键文件之一,它允许我们向WordPress主题添加功能和特性。通过在functions.php
中调用WordPress函数或定义自己的函数,我们可以增强主题的模块化性、扩展性和功能性。
使用functions.php
vs. 插件
在开发主题时,我们通常需要添加一些自定义功能。这可以通过将功能添加到functions.php
文件或创建一个独立的WordPress插件来实现。每种方法都有其优点和缺点,下面对比一下:
使用WordPress插件:
- 需要独立的插件文件和标题文本。
- 存储在
wp-content/plugins
目录中。 - 仅在插件激活时执行。
- 适用于所有主题。
- 应该用于特定的功能,如SEO优化或备份。
使用functions.php
文件:
- 不需要唯一的标题文本。
- 存储在当前主题目录的
functions.php
文件中。 - 仅在激活当前主题时执行。
- 仅适用于当前主题(如果更改主题,则功能不再可用)。
- 可以包含多个代码块,实现各种功能。
通常,如果要为主题添加新功能,最好将其放在插件中。但在functions.php
文件中,我们可以添加与当前主题紧密相关的功能。
创建和使用functions.php
每个WordPress主题都可以包含一个functions.php
文件。如果我们的主题已经有这个文件,我们可以直接向其中添加代码。如果没有,我们需要创建一个。
子主题可以有自己的functions.php
文件。将函数添加到子主题的functions.php
文件中是一种无风险的方法,因为在更新父主题时,子主题的功能不会丢失。请注意,尽管子主题的functions.php
在父主题之前加载,但它不会覆盖父主题的文件。这允许我们扩展或修改父主题的功能。
在functions.php
中的常见用途
以下是我们可以在functions.php
文件中执行的一些常见操作:
1. 使用WordPress钩子
可以使用WordPress提供的钩子来添加或修改功能。例如,通过使用excerpt_length
过滤器,我们可以更改文章摘录的长度(默认为55个单词)。
function custom_excerpt_length($length) {return 30; // 修改摘录长度为30个单词
}
add_filter('excerpt_length', 'custom_excerpt_length');
2. 启用WordPress功能
使用add_theme_support()
函数,我们可以启用WordPress的各种功能,如缩略图、文章格式和导航菜单。
add_theme_support('post-thumbnails'); // 启用特色图片
add_theme_support('post-formats', array('aside', 'gallery', 'quote', 'image', 'video')); // 启用文章格式
3. 定义可重用的函数
我们可以在functions.php
文件中定义自己的函数,然后在主题的其他模板文件中重复使用这些函数。这可以提高代码的可维护性。
function custom_display_author() {$author = get_the_author();echo "文章作者:$author";
}
4. 添加自动Feed链接
使用add_theme_support()
函数,我们可以添加自动Feed链接到<head>
中,使用户能够订阅文章和评论的RSS Feed。
add_theme_support('automatic-feed-links');
5. 自定义导航菜单
使用register_nav_menus()
函数,我们可以在主题中注册自定义导航菜单,让用户可以轻松管理网站菜单。
register_nav_menus(array('primary' => '主导航菜单','footer' => '页脚菜单',
));
6. 文本域加载
通过使用load_theme_textdomain()
函数,我们可以使主题中的字符串可翻译,以便将主题本地化为多种语言。
load_theme_textdomain('mytheme', get_template_directory() . '/languages');
7. 定义内容宽度
定义内容宽度变量可以确保上传的内容(如图片)不会破坏网站布局。内容宽度设置了允许添加到网站的任何内容的最大宽度。
if (!isset($content_width)) {$content_width = 800; // 像素
}
示例functions.php
文件
下面是一个示例functions.php
文件,其中包括上述许多功能和其他常见功能。
/*** 主题功能和定义** @package MyCustomTheme* @since MyCustomTheme 1.0*/// 设置内容宽度
if (!isset($content_width)) {$content_width = 800; // 像素
}if (!function_exists('mycustomtheme_setup')) :
/*** 设置主题默认值,并注册一些WordPress功能* 请确保这些功能在init钩子之前设置,以确保其有效性*/
function mycustomtheme_setup() {// 使主题可翻译load_theme_textdomain('mycustomtheme', get_template_directory() . '/languages');// 添加默认的文章和评论订阅源到<head>中add_theme_support('automatic-feed-links');// 添加缩略图和特色图像支持add_theme_support('post-thumbnails');// 添加自定义菜单register_nav_menus(array('primary' => __('主导航菜单', 'mycustomtheme'),'footer' => __('页脚菜单', 'mycustomtheme'),));// 启用文章格式支持:aside, gallery, quote, image, and videoadd_theme_support('post-formats', array('aside', 'gallery', 'quote', 'image', 'video'));
}
endif; // mycustomtheme_setupadd_action('after_setup_theme', 'mycustomtheme_setup');
请注意,上面的示例中的函数名mycustomtheme
是一个示例主题名称,应根据实际主题名称进行更改。
总结
functions.php
文件是WordPress主题开发中的关键文件之一,用于添加自定义功能和特性。通过合理使用它,可以增强主题的功能、扩展性和可维护性。请根据自己的主题需求和功能添加适当的代码。不同主题可能需要不同的自定义功能,functions.php
文件为您提供了实现这些功能的灵活性。
相关文章:
WordPress主题开发( 十二)之—— 主题的functions.php
WordPress主题开发( 十)之—— 主题的functions.php 介绍使用functions.php vs. 插件创建和使用functions.php在functions.php中的常见用途1. 使用WordPress钩子2. 启用WordPress功能3. 定义可重用的函数4. 添加自动Feed链接5. 自定义导航菜单6. 文本域加…...
代码的工厂模式
概念: 代码的工厂模式是一种设计模式,用于创建对象实例而无需直接调用构造函数。它提供了一种更加灵活和可维护的方式来创建对象,尤其是在需要根据不同情况创建不同类型的对象时非常有用。工厂模式隐藏了对象的创建细节,使代码更…...

UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】
目录 插件制作 添加新的类:AssetActionUtility 添加新的模块:EditorScriptingUtilities 路径了解 添加debug的头文件 代码【debug.h】内涵注释: 写函数 .h文件 .cpp文件 插件制作 首先第一步是做一个插件:…...

mac openssl 版本到底怎么回事 已解决
在mac 安装node多版本的时候,有可能把原有的 openssl1.1 版本 直接要再一次升级了,无奈的 php环境 编译器是 openssl 1.1 还是 3.0 ,今天来个底朝天的找问题。 brew search openssl 有安装 三个版本。 但是错误提示 是第二个版本。 brew …...
AWS】在EC2上创建root用户,并使用root用户登录
最近有项目需要使用AWS的EC2服务器; 在创建服务器实例之后发现,没有root用户,仔细阅读AWS EC2文档,发现默认是ec2-user用户; 那我们需要创建一个root用户 1.创建 root 用户 注意:必须要要在ec2-user用户下…...
9月24日回顾
1.微程序控制器的组成:指令译码器、微地址寄存器(输出和暂存控制信息),时序电路、最核心的部件是控制存储器(只读ROM组成)—用来存储微指令 2.突发读写:比如说突发地址为8,那么只需…...

Spring注册Bean系列--方法1:@Component
原文网址:Spring注册Bean系列--方法1:Component_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法:Component。 注册Bean的方法我写了一个系列,见:Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘…...

防火墙基础之H3C防火墙和三层交换机链路聚合的配置
H3C防火墙和三层交换机链路聚合的配置 原理概述: 防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保…...
管理类联考——数学——汇总篇——知识点突破——算数——记忆
文章目录 整体利用目录大纲/记忆宫殿目录大纲记忆宫殿 局部用各种方法数字编码法常见整除特点 歌决记忆法谐音记忆法理解记忆法比较记忆法转图像记忆法可视化法 整体利用目录大纲/记忆宫殿 目录大纲 记忆宫殿 局部用各种方法 学习记忆——数学篇——汇总——顺口溜记忆法谐…...

leetCode 455.分发饼干 贪心算法
455. 分发饼干 - 力扣(LeetCode) 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸&…...

vue3简易文字验证码
大神勿喷,简易版本,demo中可以用一下。 需要几个文字自己codelen 赋值 灵活点直接父组件传过去,可以自己改造 首先创建一个生成数字的js **mathcode.js**function MathCode(num){let str "寻寻觅觅冷冷清清凄凄惨惨戚戚乍暖还寒时候…...
Java 23种设计模式分类概括以及应用介绍
话不多说进入正题~ 创建型模式:5种 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供全局访问点,它的主要目的是限制类的实例化并确保所有代码都共享相同的实例。 – 应用:Runtime类、数据库连…...
运筹优化算法常用求解器汇总
运筹学从形成到发展,在此过程中积累的大量理论和方法在国防、能源、制造、交通、金融、通信等各个领域发挥着越来越重要的作用。我们在生产生活中遇到的很多实际问题,都可以通过运筹学所涉及的优化方法对其进行数学建模,表示为数学问题&#…...

字符串函数(一)
✨博客主页:小钱编程成长记 🎈博客专栏:进阶C语言 字符串函数(一) 0.前言1.求字符串长度的函数1.1 strlen(字符串长度) 2.长度不受限制的字符串函数2.1 strcpy(字符串拷贝࿰…...

Ubuntu 安装 Docker 的详细步骤
文章目录 简介1.更新2.安装必要的软件包2.1 基于阿里源 3.验证 Docker 安装是否成功4.安装后的一些常规设置及常用的命令4.1 启动 Docker4.2 Docker 在系统启动时自动运行4.3 运行一个 Hello World 镜像4.4 查看docker运行状态 欢迎来到这篇关于在 Ubuntu 上安装 Docker 的教程…...

使用Python进行App用户细分
App用户细分是根据用户与App的互动方式对用户进行分组的任务。它有助于找到保留用户,找到营销活动的用户群,并解决许多其他需要基于相似特征搜索用户的业务问题。这篇文章中,将带你完成使用Python进行机器学习的App用户细分任务。 App用户细…...
博弈论——伯特兰德寡头模型(Bertrand Model)
伯特兰德寡头模型(Bertrand Model) 0 引言 在前面几篇文章中,我们介绍了古诺模型(Cournot duopoly model)和斯塔克尔伯格模型(Stackelberg model) 博弈论——连续产量古诺模型(Cournot duopoly model) 博弈论——斯塔克尔伯格模型(Stackelberg model) 这两个模型…...
第一百六十回 SliverPadding组件
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverAppBar组件相关的内容,本章回中将介绍 SliverPadding组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的SliverPadding组件类似Pading组件,它主要用…...

Mapfree智驾方案,怎样实现成本可控?
整理|睿思 编辑|祥威 编者注:本文是HiEV出品的系列直播「智驾地图之变」第二期问答环节内容整理。 元戎启行副总裁刘轩与连线嘉宾奥维咨询董事合伙人张君毅、北汽研究总院智能网联中心专业总师林大洋、主持嘉宾周琳展开深度交流,并进行了答疑。 本期元…...

javascript: Bubble Sort
// Sorting Algorithms int JavaScript /** * file Sort.js * 1. Bubble Sort冒泡排序法 */ function BubbleSort(arry, nszie) {var i, j, temp;var swapped;for (i 0; i < nszie - 1; i){swapped false;for (j 0; j < nszie - i - 1; j){if (arry[j] > arry[j …...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...