Wordpress允许您使用"钩子"one_answers"过滤器"来扩展其核心。例如,为了在执行过程的早期执行一些东西,我可以编写
add_action( 'init', function() { // Do something } );
过滤器的工作原理类似。定义钩子的函数是do_action
,因此为了创建init钩子,核心开发人员编写了
do_action( 'init' );
doaction接受几个这个钩子没有演示的可选参数。过滤器的函数名为add_filter和apply_filter。
假设我正在浏览某个插件的源代码,它使用了一个源文件中的钩子,我不知道是哪个。找到它最简单的方法是什么?
在Vim中,我经常使用ctags,我希望可以做一些类似的事情,只是我可以给过滤器或钩子名称,而不是给函数名称。有什么想法吗?
(如果不能从Vim中完成,比如ctags,第二个最好的方法是运行一个命令来为我定位脚本。如果这是最好的解决方案,这也是可以接受的)
假设我正在浏览某个插件的源代码,它正在使用钩子来自其中一个源文件,我不知道是哪一个。什么是最简单的定位方法?
我使用grep。没有它就无法工作。grep
可以让我得到我想要的任何东西。grep -Rni "do_action( 'init'" *
应该找到"init"钩子。如果需要,您可以在搜索字符串中使用regex,并告诉它忽略特定的文件和/或目录。我试过其他选择,但就是从来没有在其他方面被说服过。grep
快速清洁。
这不是"Vim"的答案,但你确实说了"或类似的":)
有一个非常好的钩子数据库http://adambrown.info/p/wp_hooks/version/3.4也
我最近不得不做很多事情,所以我写了一个小的Vim插件来简化这个过程。
只需将插入符号放在挂钩或过滤器的名称上,按Leader+f查找挂钩函数,或按Leader+ f安装: 将密钥绑定添加到~/.virc: 网站说明:写这篇文章让我明白,是的,人们会使用cd ~/.vim/bundle && git clone https://github.com/borzhemsky/wp-hook-finder.git
nnoremap <Leader>f :FindWPHook<CR>
nnoremap <Leader>F :FindWPHookDef<CR>
add_filter
将他们的函数挂接到用do_action
定义的钩子上,因此手动搜索事件可能很容易出错。
从基本到相当复杂:
GREP
已经解释过了。
VIM或VIMGREP的GREP
如果您已经在Vim中,您可以使用:vimgrep
命令或其姊妹:grep
:
:vim "do_action( 'init' )" **/*.php | copen
请参阅:help starstar
以获取**
通配符,以便您进行递归搜索。:vimgrep
使用内部方法,而:grep
使用,嗯…grep
。后者可能更快。
CTAGS
假设您安装了ctags
,则可以在shell或Vim:中进行索引
$ ctags -R . <-- in the shell
:!ctags -R . <-- in Vim
而查询只是CCD_ 15的问题。请阅读:help tags
以获得更深入的解释。
CSCOPE
假设你安装了cscope
,你可以直接从外壳使用它:
$ cscope -R *.php
创建索引后,您可以在cscope
的界面中进行搜索,并在编辑器中打开选定的文件。
假设你的Vim支持cscope,你必须:
创建索引
:!cscope -bR *.php
定位索引,
:cs add cscope.out
*找到定义,
:cs f d do_action
还有其他专门的工具,如Codesearch或GNU Global,但我认为您不需要比普通的grep
或最多ctags
走得更远。