当前位置: 首页 > news >正文

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主题开发&#xff08; 十&#xff09;之—— 主题的functions.php 介绍使用functions.php vs. 插件创建和使用functions.php在functions.php中的常见用途1. 使用WordPress钩子2. 启用WordPress功能3. 定义可重用的函数4. 添加自动Feed链接5. 自定义导航菜单6. 文本域加…...

代码的工厂模式

概念&#xff1a; 代码的工厂模式是一种设计模式&#xff0c;用于创建对象实例而无需直接调用构造函数。它提供了一种更加灵活和可维护的方式来创建对象&#xff0c;尤其是在需要根据不同情况创建不同类型的对象时非常有用。工厂模式隐藏了对象的创建细节&#xff0c;使代码更…...

UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】

目录​​​​​​​ 插件制作 添加新的类&#xff1a;AssetActionUtility 添加新的模块&#xff1a;EditorScriptingUtilities 路径了解 添加debug的头文件 代码【debug.h】内涵注释&#xff1a; 写函数 .h文件 .cpp文件 插件制作 首先第一步是做一个插件&#xff1a…...

mac openssl 版本到底怎么回事 已解决

在mac 安装node多版本的时候&#xff0c;有可能把原有的 openssl1.1 版本 直接要再一次升级了&#xff0c;无奈的 php环境 编译器是 openssl 1.1 还是 3.0 &#xff0c;今天来个底朝天的找问题。 brew search openssl 有安装 三个版本。 但是错误提示 是第二个版本。 brew …...

AWS】在EC2上创建root用户,并使用root用户登录

最近有项目需要使用AWS的EC2服务器&#xff1b; 在创建服务器实例之后发现&#xff0c;没有root用户&#xff0c;仔细阅读AWS EC2文档&#xff0c;发现默认是ec2-user用户&#xff1b; 那我们需要创建一个root用户 1.创建 root 用户 注意&#xff1a;必须要要在ec2-user用户下…...

9月24日回顾

1.微程序控制器的组成&#xff1a;指令译码器、微地址寄存器&#xff08;输出和暂存控制信息&#xff09;&#xff0c;时序电路、最核心的部件是控制存储器&#xff08;只读ROM组成&#xff09;—用来存储微指令 2.突发读写&#xff1a;比如说突发地址为8&#xff0c;那么只需…...

Spring注册Bean系列--方法1:@Component

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

防火墙基础之H3C防火墙和三层交换机链路聚合的配置

H3C防火墙和三层交换机链路聚合的配置 原理概述&#xff1a; 防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保…...

管理类联考——数学——汇总篇——知识点突破——算数——记忆

文章目录 整体利用目录大纲/记忆宫殿目录大纲记忆宫殿 局部用各种方法数字编码法常见整除特点 歌决记忆法谐音记忆法理解记忆法比较记忆法转图像记忆法可视化法 整体利用目录大纲/记忆宫殿 目录大纲 记忆宫殿 局部用各种方法 学习记忆——数学篇——汇总——顺口溜记忆法谐…...

leetCode 455.分发饼干 贪心算法

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

vue3简易文字验证码

大神勿喷&#xff0c;简易版本&#xff0c;demo中可以用一下。 需要几个文字自己codelen 赋值 灵活点直接父组件传过去&#xff0c;可以自己改造 首先创建一个生成数字的js **mathcode.js**function MathCode(num){let str "寻寻觅觅冷冷清清凄凄惨惨戚戚乍暖还寒时候…...

Java 23种设计模式分类概括以及应用介绍

话不多说进入正题~ 创建型模式&#xff1a;5种 单例模式&#xff08;Singleton Pattern&#xff09; 确保一个类只有一个实例&#xff0c;并提供全局访问点&#xff0c;它的主要目的是限制类的实例化并确保所有代码都共享相同的实例。 – 应用&#xff1a;Runtime类、数据库连…...

运筹优化算法常用求解器汇总

运筹学从形成到发展&#xff0c;在此过程中积累的大量理论和方法在国防、能源、制造、交通、金融、通信等各个领域发挥着越来越重要的作用。我们在生产生活中遇到的很多实际问题&#xff0c;都可以通过运筹学所涉及的优化方法对其进行数学建模&#xff0c;表示为数学问题&#…...

字符串函数(一)

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 字符串函数&#xff08;一&#xff09; 0.前言1.求字符串长度的函数1.1 strlen&#xff08;字符串长度&#xff09; 2.长度不受限制的字符串函数2.1 strcpy&#xff08;字符串拷贝&#xff0…...

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的互动方式对用户进行分组的任务。它有助于找到保留用户&#xff0c;找到营销活动的用户群&#xff0c;并解决许多其他需要基于相似特征搜索用户的业务问题。这篇文章中&#xff0c;将带你完成使用Python进行机器学习的App用户细分任务。 App用户细…...

博弈论——伯特兰德寡头模型(Bertrand Model)

伯特兰德寡头模型(Bertrand Model) 0 引言 在前面几篇文章中&#xff0c;我们介绍了古诺模型(Cournot duopoly model)和斯塔克尔伯格模型(Stackelberg model) 博弈论——连续产量古诺模型(Cournot duopoly model) 博弈论——斯塔克尔伯格模型(Stackelberg model) 这两个模型…...

第一百六十回 SliverPadding组件

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverAppBar组件相关的内容&#xff0c;本章回中将介绍 SliverPadding组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的SliverPadding组件类似Pading组件&#xff0c;它主要用…...

Mapfree智驾方案,怎样实现成本可控?

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

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 …...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

拟合问题处理

在机器学习中&#xff0c;核心任务通常围绕模型训练和性能提升展开&#xff0c;但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正&#xff1a; 一、机器学习的核心任务框架 机…...

MyBatis-Plus 常用条件构造方法

1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...

【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南

文章目录 &#x1f4cc; 前言&#x1f9f0; 一、前期准备✅ 安装 Kali Linux✅ 获取支持监听模式的无线网卡 &#x1f6e0; 二、使用 Kali Linux 进行 WiFi 安全测试步骤 1&#xff1a;插入无线网卡并确认识别步骤 2&#xff1a;开启监听模式步骤 3&#xff1a;扫描附近的 WiFi…...