Wordpress 和 Woocommerce 中的挂钩及其挂钩函数执行队列

2023-11-30

尽管我在其他网络平台和语言方面有经验,但我还是 WordPress/WooCommerce 和 PHP 的新手。我已经搜索过,但没有找到我的问题的答案......

由“add_action”创建的挂钩是否“添加”到该特定挂钩调用的操作列表中,或者它们是否覆盖该操作的任何现有挂钩?

例如,如果我添加一个woocommerce_thankyou挂钩使用:

add_action( 'woocommerce_thankyou', 'order_created_get_skus',#);

问题:这是否会覆盖任何其他挂钩woocommerce_thankyou或者除了任何其他设置的钩子之外它是否被调用woocommerce_thankyou?


挂钩函数永远不会覆盖使用相同操作或过滤器挂钩的其他挂钩函数.

它们被添加到一种“挂钩队列”基于优先级规则的执行顺序:

  • 如果指定了优先级,它们将首先按钩子优先级和声明优先级在队列中排序。
  • 如果没有指定优先级,则它们采用默认优先级 10,并且将通过声明在队列中排序。

因此,您可以在同一个钩子上拥有许多钩子函数,例如在 Woocommerce 模板文件中content-single-product.php

举例说明:

在下面的注释代码示例中,您可以看到钩子队列中每个被钩子函数的执行顺序woocommerce_thankyou动作挂钩:

// No defined priority (default priority is 10)
add_action( 'woocommerce_thankyou', 'first_custom_function_no_priority' );
function first_custom_function_no_priority( $order_id ) {
    // ==> Triggered in third position ==> [3]
}

## Default Hook "woocommerce_order_details_table" (default priority is 10)
    // ==> Triggered in second position ==> [2]

// Defined priority is 10
add_action( 'woocommerce_thankyou', 'order_created_get_skus', 10 );
function order_created_get_skus( $order_id ) {
    // ==> Triggered in Fourth position ==> [4] 
}

// Defined priority is 5
add_action( 'woocommerce_thankyou', 'third_custom_function', 5 );
function third_custom_function( $order_id ) {
    // ==> Triggered in first position ==> [1]
}

// Defined priority is 20
add_action( 'woocommerce_thankyou', 'fourth_custom_function', 20 );
function fourth_custom_function( $order_id ) {
    // ==> Triggered at last (sixth) ==> [6]
}

// No defined priority (default priority is 10)
add_action( 'woocommerce_thankyou', 'last_custom_function_no_priority' );
function last_custom_function_no_priority( $order_id ) {
    // ==> Triggered in fifth position ==> [5]
}

执行较低优先级(或触发)之前,优先级较高的被执行(或触发)后。如果没有指定优先级,默认优先级为 10。

挂钩函数只能通过以下方式删除remove_action() or remove_filter()具有强制性定义的优先级。

要查看特定挂钩上挂钩了多少个挂钩函数以及所有必要的详细信息,您可以使用以下命令来提供原始输出:

global $wp_filter;

// HERE below you define the targeted hook name
$hook_name = 'woocommerce_widget_shopping_cart_buttons';

if( isset($wp_filter[$hook_name]) ) {
    echo '<pre>';
    print_r($wp_filter[$hook_name]);
    echo '</pre>';
} else {
    echo '<p>Hook "'.$hook_name.'" is not used yet!</p>';
}

您可能已经注意到,有两种钩子,即过滤器钩子和操作钩子。

  1. 动作挂钩:

    • 动作钩子执行点 (扳机): with do_action()
    • 将函数附加到动作挂钩 (已触发): with add_action():函数被执行并且可以有可选参数。
  2. 过滤钩:

    • 过滤器钩子执行点 (扳机): with apply_filters()
    • 将函数附加到过滤器挂钩 (过滤/触发): with add_filter(): 强制参数(一个变量)被过滤并从“hooked”函数返回

挂钩及其挂钩函数可以位于任何位置,例如在 function.php 文件中你活跃的孩子主题 (或活动主题)以及在任何pluginsphp 文件。


Related:

  • WooCommerce 操作挂钩和覆盖模板
  • 如何将自定义挂钩添加到 Woocommerce 的自定义插件
  • WordPress:过滤器和操作挂钩之间的区别?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wordpress 和 Woocommerce 中的挂钩及其挂钩函数执行队列 的相关文章

  • 内连接 3 个表

    我正在使用 PHP 和 PDO 我需要重新收集连接 3 个表的信息 photos albums 相册照片 该表具有以下结构 photos photo id int path varchar nick varchar date timesta
  • Facebook“赞”按钮回调帮助

    我正在使用此代码进行类似 facebook 的回调 问题是 如果我调用 php 脚本 例如 有人可以看到我的 javascript 并运行此页面 甚至可以向其发送垃圾邮件或在没有先点赞的情况下使用它 我的想法是 我想为每个喜欢该页面的用户提
  • Symfony2,如何向表单添加隐藏的日期类型字段?

    我正在尝试以下场景 In myclassType public function buildForm FormBuilder builder array options builder gt add day hidden gt add da
  • CakePHP Auth 组件使用 $this->Auth->login() 时未登录;

    我是 cakePHP 的新手 我已经阅读了他们的文档 并且正在遵循他们的简单身份验证示例 我还广泛搜索 包括本网站上的答案 来寻找我的问题的答案 我正在使用 cakePHP 2 0 我的 UsersController 的登录功能如下所示
  • zend 表单验证

    我想知道 Zend Form 如何验证输入 我的意思是它如何知道要验证哪些输入字段 我查看了 php 全局变量 POST GET 但没有看到任何设置为标识符 例如 的内容 以便了解如何验证 有人能给我推荐一些关于这些东西的指南吗 好吧 找出
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • use 语句顺序会影响 PHP 中的功能吗?

    我使用 PHP 的命名空间已经有一段时间了 我认为它对我的编程来说是一个很好的补充 今天早上我想知道一些关于use陈述 我想知道顺序是否use影响我的 PHP 代码的功能 根据 PHP net 使用别名引用外部完全限定名称或导入的能力是命名
  • 在php中获取大于2GB的文件大小的最佳方法?

    我想检查本地驱动器上的文件大小windows OS 但是PHP原生函数filesize 仅当文件大小小于时才有效2GB 大于的文件2GB将返回错误的数字 那么 是否有其他方法来获取大于的文件大小2GB 非常感谢 您始终可以使用系统的文件大小
  • 计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么?

    计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么 用这个 echo substr count abca a will echo 2
  • 在 mysqli 准备好的语句程序风格中获取最后插入的 id 的正确方法是什么?

    我正在使用 mysqli 准备好的语句在表中插入记录 如下所示 link mysqli connect localhost my user my password world check connection if link printf
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他
  • 写入 xml 文件时允许的内存大小已耗尽(尝试分配 4459414 字节)[重复] 67108864 字节

    这个问题在这里已经有答案了 可能的重复 php 中允许的内存大小已耗尽 尝试分配 43148176 字节 33554432 字节 https stackoverflow com questions 415801 allowed memory
  • Apache 子进程已退出,状态为 255

    经过大量的搜索 尝试 修复 等待和哭泣 在我放弃之前 我想为这个错误抓住最后的机会 我们正在奔跑Microsoft Windows Server 2012 Apache 2 4 6 Win64 OpenSSL 1 0 1e PHP 5 5
  • 错误 #520009 - 帐户受到限制

    我收到 520009 错误 帐户 电子邮件受保护 cdn cgi l email protection被限制 当尝试进行并行付款时 我的代码使用沙箱运行良好 但我切换到实时端点 它开始失败 有问题的帐户是有效的 PayPal 帐户 我使用的
  • 为什么 asort 适用于多维数组?

    抱歉 如果这是一个非常基本的问题 我无意中发现asort http php net manual en function asort php似乎适用于多维数组 示例 PHP animals array 1 gt array name gt
  • 将 Cloudinary 与 spatie/media-library Laravel 包一起使用

    有人使用 Laravel 包 spatie media library 和 Cloudinary 吗 我认为用 Flysystem 来实现它是微不足道的 我实际上使用 Cloudinary 作为带有 silvanite nova field
  • 从检查元素隐藏 ''

    我有这个 HTML 和 PHP 联系表
  • 创建单个随机 Magento 优惠券

    我遇到了一些麻烦 我想要做的是每次有人订阅我们的时事通讯时 在 Magento 中自动生成一个随机优惠券代码 这张优惠券可减 10 美元 并且有exp 订阅后两周的日期 因此 我正在尝试编写一个简单的脚本 当提交 订阅我们的时事通讯 表单时
  • sqlite3和pdo_sqlite有什么区别

    我正在将我的 Web 应用程序从 MySQL 迁移到 SQLite 数据库 我发现有两个 PHP 扩展用于与 sqlite 通信 php sqlite3 dll and php pdo sqlite dll 什么扩展比较好 或者另一个问题
  • 管理产品页面自定义字段显示在购物车和结账中

    我在产品页面的常规设置选项卡上的 WooCommerce 管理中创建了一个自定义字段 以插入几天的制造时间 我想在购物车和结帐页面上每个产品名称上方显示此自定义字段值 这是我的代码 Insert a Custom Admin Field f

随机推荐

  • 短路逻辑求值运算符

    是否有短路逻辑运算符 特别是短路AND和短路OR 我可以用在WHEREMySQL 5 5 中的子句 如果没有 有什么替代方案 我的问题的抽象观点以及为什么我需要这个的解释可以在这个小提琴中找到 http sqlfiddle com 2 97
  • 如何在CSS中仅设置部分文本的样式[重复]

    这个问题在这里已经有答案了 我需要在下拉列表选项中添加上标 我尝试了很多方法但没有任何效果 因此 帮助我了解如何仅设置选项文本的一部分的样式 使其看起来像上标 如果您知道在下拉列表选项中添加上标的任何其他方法 请帮助我 谢谢 在 HTML
  • 为什么相同的输入返回两个不同的 MD5 哈希值?

    好吧 我有两个文件 它们是完全相同的 第一个文件是 http iadsonline com servconfig php 第二个文件是 http xzerox info servconfig php 但是 当我使用 md5 file 获取他
  • 创建时CYPHER存储相同标签的节点关系顺序

    我有多个源自一个节点的关系 这些关系中的每一个都具有相同的标签 这些关系指向一个子节点 不一定是唯一的 在获取通过此关系标签链接到父级的所有子节点后 我通过名为 trueindex 的关系属性对它们进行排序 然后 我有一个节点数组 我的客户
  • 预处理器中的 C# 宏定义

    C 是否能够像 C 编程语言中使用预处理器语句那样定义宏 我想简化某些重复语句的常规输入 如下所示 Console WriteLine foo 不 C 不支持像 C 那样的预处理器宏 另一方面 Visual Studio 有snippets
  • 片段中的 AdMob

    我正在我的应用程序中插入 AdMob 但我有一个问题 当我在 Eclipse 中插入一些相关代码时 我可以在fragment 03中看到一条关于 构造函数 AdRequest 不可见 的错误消息 以及 错误 解析 XML 时出错 未绑定前缀
  • 获取上周六的日期和下周五的日期

    我想根据今天的日期获取上周六的日期 所以如果我们是周二 那么想要的日期将是 3 天前 另外 如果今天是星期六 那么这将被算作上一个星期六 例如 today Tuesday 09 July 2019 previous saturday gt
  • 内联成员函数和普通成员函数有什么区别?

    内联成员函数 函数体内联 和其他普通成员函数 函数体在单独的 cpp文件中 有什么区别吗 例如 class A void member and Header file hpp class B void member Implementati
  • C++多索引映射实现

    我正在 C 11 中实现多索引映射 我希望针对特定功能对其进行优化 我目前正在尝试解决的问题是不要多次存储关键元素 但让我解释一下 问题源于对直方图进行排序以将它们叠加在不同的组合中 直方图有名称 可以分为标记 属性 以下是我希望我的属性图
  • Pyomo 和条件目标函数

    是否可以 如果可以的话如何 使用具有条件表达式的目标函数 更改文档中的示例 我想要一个如下表达式 def objective function model return model x 0 if model x 1 lt const els
  • 将 jQuery 选项卡与 Marionette 布局结合使用

    我正在尝试使用jquery 选项卡秘偶区域内 两个选项卡区域的 HTML 如下所示 div ul li a href tabs 1 Nunc tincidunt a li li a href tabs 2 Proin dolor a li
  • 如何在mysql工作台中更改用户

    我使用以下语法在 mysql 工作台中创建了用户名 jeffrey 密码 mypass CREATE USER jeffrey localhost IDENTIFIED BY mypass 现在我如何连接 登录这个用户 jeffrey 请按
  • Arm trustzone监控模式开关设计

    基本的世界切换流程是 将FIQ设置为监控模式 normal world gt FIQ triggered gt 进入监控模式 切换到安全世界 恢复安全世界上下文 gt 在安全世界系统模式下 gt FIQ不清楚 进入Secure world中
  • 如何在 SublimeREPL 上运行 Python 代码

    我真的很喜欢使用 sublime text 2 编写 Python 代码 但是每当我尝试运行具有输入的脚本时 sublime text 控制台都会报告错误 所以 我决定尝试一下SublimeREPL 但是我已经搜索了几个小时 但没有找到如何
  • 将行样本与类标签相匹配

    我对下面的代码有一个小问题 最后一行是具体的 我试图找到我的 样本 的类名 我的意思是我需要知道哪个法线和哪个蓝精灵属于我的 1000x6 样本的每一行 sampling normIdx strmatch normal Book2 norm
  • 获取没有底部导航栏高度的屏幕尺寸

    所以flutter中的基本脚手架有appbar body和bottom bar 在我的底部导航栏中 我有 3 个项目 第 1 页 编辑器页面 第 2 页 贴纸 第3页 文字定制页面 每个页面都有自己的脚手架 编辑器页面有一个名为 Layou
  • 在 C# 中,字符串是引用类型,但为什么在另一种方法中操作它后它没有改变[重复]

    这个问题在这里已经有答案了 可能的重复 C 字符串引用类型 比如说 我有一个名为 string sample Initial value 传递给方法 test 之后 public static void Test string testSt
  • Xamarin 形成 MVVM Stacklayout 内容绑定

    我对 Xamarin 和 Xamarin 表单非常陌生 我需要一些帮助 我有一个 StackLayout 我想从 ViewModel 动态添加项目 问题是我似乎无法将 StackLayout 的内容绑定到 ViewModel 的 Stack
  • 单击 Facebook“赞”按钮获取用户电子邮件 ID?

    我想要用户点击 facebook Like 按钮时的电子邮件地址 这是我正在使用的代码 FB Event subscribe edge create function response like clicked 但响应只有 HREF 我该怎
  • Wordpress 和 Woocommerce 中的挂钩及其挂钩函数执行队列

    尽管我在其他网络平台和语言方面有经验 但我还是 WordPress WooCommerce 和 PHP 的新手 我已经搜索过 但没有找到我的问题的答案 由 add action 创建的挂钩是否 添加 到该特定挂钩调用的操作列表中 或者它们是