Wordpress允许您使用“钩子”和“过滤器”扩展其核心 . 例如,为了在执行过程的早期执行某些事情,我可以写
add_action( 'init', function() { // Do something } );
过滤器工作类似 . 定义一个钩子的函数是 do_action
,所以要创建一个核心开发人员写的init钩子
do_action( 'init' );
do_action接受此钩子未演示的几个可选参数 . 过滤器的函数名称是add_filter和apply_filter .
假设我正在浏览某个插件的源代码,并且它正在使用其中一个源文件的钩子,我不知道哪个 . 找到它的最简单方法是什么?
在Vim中我经常使用ctags,我希望可以做类似的事情,而不是给出函数名称,我可以给出过滤器或钩子名称 . 有任何想法吗?
(如果无法在Vim中完成,就像ctags一样,第二好的方法是运行一个命令来为我找到脚本 . 如果它是最好的解决方案,这也是可以接受的)
3 回答
从基础到相当复杂:
GREP
已经解释过了 .
GREP FROM VIM OR VIMGREP
如果您已经在Vim中,则可以使用
:vimgrep
命令或其姐妹:grep
:有关
**
通配符,请参阅:help starstar
,让您进行递归搜索 .:vimgrep
使用内部方法,而:grep
使用,嗯...grep
. 后者可能更快 .CTAGS
假设你安装了
ctags
,索引可以在shell或Vim中完成:而查询只是
:tag do_action
的问题 . 请阅读:help tags
以获得深入的解释 .CSCOPE
假设你安装了
cscope
,你可以直接在shell中使用它:创建索引后,您可以在
cscope
的界面中搜索并在编辑器中打开所选文件 .假设你的Vim带有cscope支持,你必须:
创建索引,
:!cscope -bR *.php
找到索引,
:cs add cscope.out
:cs f d do_action
还有其他专业工具,如Codesearch或GNU Global,但我认为你真的不需要比普通的
grep
或最多ctags
更进一步 .我用grep . 没有它就无法工作 .
grep
让我得到任何我想要的东西 .grep -Rni "do_action( 'init'" *
应该找到'init'钩子 . 如果需要,可以在搜索字符串中使用正则表达式,并告诉它忽略特定文件和/或目录 . 我曾经卖过其他任何东西 .grep
快速而干净 .这不是'Vim'的答案,但你确实说'或类似':)
在http://adambrown.info/p/wp_hooks/version/3.4也有一个非常好的钩子数据库 .
我最近必须这么做,所以我写了a little Vim plugin以简化这个过程 .
只需将插入符号放在钩子或过滤器的名称上,按Leader f查找钩子函数,或按Leader F查找钩子/过滤器定义 .
安装:
将键绑定添加到〜/ .vimrc:
Site note: 写这个教会了我,是的,人们做的事情就像使用
add_filter
将它们的函数挂钩到do_action
定义的钩子一样,因此手动搜索事件可能容易出错 .