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

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...