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