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

WordPress插件开发教程手册 — 钩子(Hooks)

钩子是用一段代码添加/修改另外一段代码的方式,是 WordPress插件和主题与 WordPress 内核交互的基础,钩子在 WordPress 内核中也被广泛使用。WordPress 中有两种钩子,Action 和 Filter。使用钩子时,我们需要先编写一个自定义函数作为钩子的回调函数,然后使用 add_action 或 add_filter 函数将我们的回调函数挂载到指定的 Action 或 Filter 上。

Action 可以让我们在函数执行的某个时间点添加一些自定义操作(如输出内容到文章尾部),Filter 和 Action 类似,不同的是我们可以通过 Filter 修改并返回数据,因此,挂载到 Filter 上的函数会接受一些变量,并返回修改后的变量。简单来说,Action 用来添加功能,Filter 用来修改数据。

WordPress 内核提供了很多钩子,来帮助开发者开发WordPress主题或插件。通过创建自定义钩子,我们也可以让第三方开发者添加或修改我们的功能。
Action 是 WordPress 的两种钩子之一,提供了一种在 WordPress 核心、主题或插件执行的特性时间点运行附加函数的功能。Action 和 Filter 是不一样的。

添加 Action 的操作
我们可以通过两个步骤添加一个函数到某个 Action。首先,我们需要创建一个回调函数,这个函数在 Action 运行时会被调用。其次,我们需要把这个函数挂载到对应的 Action 钩子上面。使用 add_action() 函数,至少需要传递两个参数 $tag (钩子名称) 和 $function_to_add (回调函数名)。

下面的例子在 init 钩子执行时运行:

function wporg_custom() {// 执行某些操作
}
add_action('init', 'wporg_custom');

优先级

如果一个钩子上面挂载了多个回调函数,钩子就需要一个优先级,来确定这些回调函数的执行顺序。优先级为整数,默认值为 10,数字越小,优先级就越高。比如,优先级为 11 的函数将在优先级为 10 的函数之后执行,优先级为 9 的函数将在优先级为 10 的函数之前执行。

例如,下面的回调函数全部挂载到了 init 钩子上面,但他们有不同的优先级。

add_action('init', 'run_me_early', 9);
add_action('init', 'run_me_normal'); // 如果没有指定优先级,默认为 10
add_action('init', 'run_me_late', 11);

参数个数

有时候,回调函数需要接收一些额外的数据作为函数的参数。例如,当 WordPress 保存一篇文章时,将会运行 save_post 钩子,这个钩子会传递两个参数给回调函数:保存的文章 ID 和 文章对象:

do_action('save_post', $post->ID, $post);

所以,当我们挂载函数到 save_post 钩子时,我们可以指定它需要接收这两个参数:

add_action('save_post', 'wporg_custom', 10, 2);

然后我们就可以在回调函数中使用钩子提供的参数了。

function wporg_custom($post_id, $post){// 执行某些操作
}

假设我们需要在 WordPress 的前端文章查询中修改获取搜索结果的查询,我们可以使用 pre_get_posts 钩子。

function wporg_search($query) {if (!is_admin() && $query->is_main_query() && $query->is_search) {$query->set('post_type', ['post', 'movie']);}
}
add_action('pre_get_posts', 'wporg_search');

相关文章:

WordPress插件开发教程手册 — 钩子(Hooks)

钩子是用一段代码添加/修改另外一段代码的方式,是 WordPress插件和主题与 WordPress 内核交互的基础,钩子在 WordPress 内核中也被广泛使用。WordPress 中有两种钩子,Action 和 Filter。使用钩子时,我们需要先编写一个自定义函数作…...

Python开发运维:Celery连接Redis

目录 一、理论 1.Celery 二、实验 1.Windows11安装Redis 2.Python3.8环境中配置Celery 3.celery的多目录结构异步执行 4.celery简单结构下的定时任务 三、问题 1.Celery命令报错 2.执行Celery命令报错 3.Win11启动Celery报ValueErro错误 4.Pycharm 无法 import 同目…...

JSP:JDBC

JDBC(Java Data Base Connectivity的缩写)是Java程序操作数据库的API,也是Java程序与数据库相交互的一门技术。 JDBC是Java操作数据库的规范,由一组用Java语言编写的类和接口组成,它对数据库的操作提供基本方法&#…...

能否在一台电脑上安全地登录多个Facebook账号?

Facebook是一个流量大、用户多的平台,许多人可能需要在一台设备上管理多个Facebook账号,无论是出于个人或职业需求,都能带来极大地便利。然而,保持每个账号的安全性和隐私性却是一个挑战。本文将介绍如何在一台电脑上安全地登录多…...

Banana Pi [BPi-R3-Mini] 回顾和主线 ImmortalWrt 固件支持

BananaPi BPi-R3 Mini 采用 MediaTek 830(4 个 A53,最高 2.0 GHz),具有 2 个 2.5 GbE、AX4200 2.4G/5G 无线和 USB 2.0 端口。它还具有两个 M.2 连接器,可用于 NVMe SSD 和 5G 模块(板上包含 Nano SIM 插槽…...

2001-2022年上市公-供应链话语权测算数据(原始数据+处理代码Stata do文档+结果)

2001-2022年上市公-供应链话语权测算数据(原始数据处理代码Stata do文档结果) 1、时间:2001-2022年 2、指标:企业代码、股票代码、年份、股票简称、上市公司前五大供应商的采购额之和占企业当年总采购额的比例、上市公司前五大客…...

如何通过ShardingJDBC进行读写分离

背景信息: 面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库。其中主库负责处理事务性的增删改操作,从库负责处理查询操作&#…...

【uniapp】部分图标点击事件无反应

比如:点击这个图标在h5都正常,在小程序上无反应 css:也设置z-index,padding 页面上也试过click.native.stop.prevent"changePassword()" 时而可以时而不行, 最后发现是手机里输入键盘的原因,输…...

前端vue导出PPT,使用pptxgen.js

前言 公司新需求需要导出ppt给业务用,查阅资料后发现也挺简单的,记录一下。 如有不懂的可以留言!!! 1.安装包 npm install pptxgenjs --save2.引入包 在需要使用的文件中引入 import Pptxgenfrom "pptxgenjs&…...

JSP过滤器和监听器

什么是过滤器 Servlet过滤器与Servlet十分相似,但它具有拦截客户端(浏览器)请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要。 对于程序开发人员而言,过滤器实质就是在Web应用服务…...

pcl+vtk(十二)使用vtkPolyData创建点、线、面(不规则面)、三角带

一、前言 vtkPlaneSource创建平面,只可以创建平行四边形的平面,根据一个起点和两个终点创建法向量创建平面。但是当有创建多个点围成不规则平面的需求时,该怎么创建显示呢? 在网上查了资料,可以使用vtkPolyData拓扑结…...

51单片机的智能浇花系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块DHT11温湿度模块DS1302时间模块继电器驱动水泵模块光敏传感器等模块构成。适用于智能浇花、自动浇花、智能盆栽等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间、土壤温湿度、光照强度等信息 2、DHT11采集温湿度信…...

为什么 MQTT 对于构建联网汽车至关重要

汽车行业正在接受构建联网汽车的想法。他们看到了利用车辆遥测数据创造新收入机会并打造更好用户体验的机会。然而,实施可扩展以支持数百万辆汽车的联网汽车服务可能会带来一些挑战。 对于大多数联网汽车服务,汽车和云之间需要进行双向通信。汽车将遥测…...

CSIT883系统分析与项目管理——Lecture2重点概念

一、前言 这个是本人的学习笔记,如果大家喜欢可以多多关注吧! 二、重点概念 1.项目经理及其团队必须认识到任何项目对整个系统或组织的利益和需求的影响,而不是关注项目的直接问题。 2.系统愿景文件的目的是什么? 系统愿景文档是描述问题、解决方案、系统目标等的简短声…...

【linux】基本指令(中篇)

echo指令 将引号内容打印到显示屏上 输出的重定向 追加的重定向 输出的重定向 我们学习c语言的时候当以写的方式创建一个文件,就会覆盖掉该文件之前的内容 当我们以追加的方式打开文件的时候,原文件内容不会被覆盖而是追加 more指令 10.more指令…...

Centos Download

前言 CentOS Linux 是一个社区支持的发行版,源自 CentOS git for Red Hat Enterprise Linux (RHEL) 上免费提供给公众的源代码。因此,CentOS Linux 的目标是在功能上与 RHEL 兼容。CentOS 计划主要更改组件以删除上游供应商的品牌…...

k8s集群资源监控工具metrics-server安装

1、下载镜像 docker pull swr.cn-east-2.myhuaweicloud.com/kuboard-dependency/metrics-server:v0.6.22、在任一一个主节点上创建角色,执行下面语句 kubectl create clusterrolebinding kube-proxy-cluster-admin --clusterrolecluster-admin --usersystem:kube-…...

物流单打印模板下载,佳易王物流托运单打印软件

物流单打印模板下载,佳易王物流托运单打印软件 上图是常用的物流单打印模板,佳易王物流单打印软件打印格式可以根据需要定制更改。 软件特色: 1、功能实用,操作简单,不会电脑也会操作,软件免安装&#xff…...

TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖

11月22日,由CSA(连接标准联盟)中国成员组主办,CSHIA承办的“Matter中国区开发者大会2023” 于杭州举行。 会上,连接标准联盟中国成员组主席宿为民博士、连接标准联盟亚洲区架构师杨莉女士、CSHIA秘书长|中智盟投资创始…...

java 事务提交(批量处理数据,单个批次执行完成后直接提交事务)

方法一&#xff1a;接口REQUIRES_NEW 实现单个事务提交 方式1: for (TIrBuPBom buPBom : batchList) {// 查询待处理的批次数据List<TIrBuPBom> pBomList pBomMapperBase.list(new LambdaQueryWrapper<TIrBuPBom>().eq(TIrBuPBom::getBatchNo, buPBom.getBatchNo…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...