问题描述

我从来没有见过像 do_action('something_10')这样的标签。如果我使用数字是无效的吗?

如果方法有效,那么我如何有条件地在标签字符串中写入不同的数字?例如,以下代码是否正确 ($ grade 是数字)?

do_action("new_grade_$grade")

最佳解决方案

  1. 当您将”hook” /add_action/*_filter('whatever'); 的一个回调函数传递给 do_action('whatever'); 时,您基本上将功能 (或 object-method) 名称添加到 global $wp_filters -array 。

  2. 这样做,您将函数/方法名称添加到如下构建的数组中

    $wp_filter[ $tag ][ $priority ][ $idx ]
    // $tag = action/filter name
    // $priority = 3rd argument / execution order
    // $idx = "unique" name
    
  3. 不是第三个参数/$idx 是使用_wp_filter_build_unique_id()函数构建的,它是 add_action/*_filter()中的第一个参数。

  4. 在这个函数内,每个函数名保持不变,只有方法名变化。这就是为什么你经常会找到”funky” 方法名称,前缀有一个很长的数字。

Can I add numbers after letters in do_action tag?

所以是的,数字在命名动作挂钩时是完全有效的。总结一下,使用 a-zA-Z0-9_作为函数/方法/变量名称。不支持-。而某些字符在系统上可能会很好地工作,它主要取决于编码,如果您选择的函数名称 (例如:_wUT?a_nice_DÄY!()) 有效。 WordPress 本身不检查函数/var /hook /filter /任何名称是否有效。


另外 @BrianFegter 回答关于”contextual hooks” 。

您可以在 (MU 或单) 安装中使用 this plugin 1) 的 (任何) 屏幕中查看» 帮助 «-panel,看到一些”contextual hooks” 。

1) 插件灵感来自 @StephenHarris 的文章。

次佳解决方案

是的,您可以动态创建自己的动作钩子。 WordPress 有几个动态挂钩,如 admin_head-hooknameadmin_footer-hooknamenew_grade_$n 是一个有效的挂钩名称。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。