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 中的挂钩及其挂钩函数执行队列 的相关文章

  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • 优雅地处理没有数据的 amcharts

    我想知道我的 dataProvider 是否为空 amCharts绘制时默认为null 我怎样才能动态地处理它 var chart AmCharts makeChart chartdiv theme none type serial dat
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 为什么我需要结束 ob_start()?

    php 文档建议我应该用 ob end flush 结束每个 ob start 我在网站的每个页面上使用一个 只是为了允许我在应用程序中的任何位置使用 firephp 日志方法 该应用程序运行良好 但我想知道是否有任何我不知道的东西可能有害
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 如何在原则 2 迁移中删除外键

    我想在原则 2 迁移中删除外键 但没有 dropForeignKeyConstraint 有谁知道怎么丢掉吗 public function down Schema schema table schema gt getTable table
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • 通过 $_SESSION 从一个脚本发送到另一个脚本期间数据丢失

    我正在尝试将一个充满属性的对象从一个 PHP 发送到另一个 PHP SESSION object obj where obj是一个用 foreach 循环指定的对象 foreach array of objects as obj SESSI
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3

随机推荐

  • 短路逻辑求值运算符

    是否有短路逻辑运算符 特别是短路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 创建的挂钩是否 添加 到该特定挂钩调用的操作列表中 或者它们是