使用Vim或类似工具查找Wordpress钩子和过滤器

时间:2012-10-15 17:30:44

标签: wordpress bash unix vim

Wordpress允许您使用“挂钩”和“过滤器”扩展其核心。例如,要在执行过程中尽早执行某些操作,我可以编写

add_action( 'init', function() { // Do something } );

过滤器的工作方式类似。定义钩子的函数是do_action,因此要创建一个核心开发人员编写的初始化钩子

do_action( 'init' );

do_action接受此钩子未演示的几个可选参数。过滤器的函数名称是add_filter和apply_filter。

假设我正在浏览某个插件的源代码,并且它正在使用其中一个源文件的钩子,我不知道哪个。找到它的最简单方法是什么?

在Vim中我经常使用ctags,我希望可以做类似的事情,而不是给出函数名称,我可以给出过滤器或钩子名称。有什么想法吗?

(如果无法在Vim中完成,就像ctags一样,第二好的方法就是运行一个能为我找到脚本的命令。如果这是最佳解决方案,这也是可以接受的)

3 个答案:

答案 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支持,你必须:

  1. 创建索引cscope

  2. 找到索引:!cscope -bR *.php

  3. * f * ind * d * efinition,:cs add cscope.out

  4. 还有其他专业工具,例如CodesearchGNU Global,但我认为您实际上并不需要比普通:cs f d do_action或最多grep更进一步