当前位置: 首页 > 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 …...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...