1

Wordpress 允许您使用“钩子”和“过滤器”扩展其核心。例如,为了在执行过程的早期执行一些事情,我可以写

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

过滤器的工作方式类似。定义一个钩子的函数是do_action,所以创建一个核心开发者写的init钩子

do_action( 'init' );

do_action 接受这个钩子没有展示的几个可选参数。过滤器的函数名称是 add_filter 和 apply_filter。

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

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

(如果不能在 Vim 中完成,比如 ctags,第二好的是运行一个命令来为我定位脚本。如果这是最好的解决方案,这也是可以接受的)

4

3 回答 3

2

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

我使用 grep。没有它就无法工作。grep得到我想要的任何东西。grep -Rni "do_action( 'init'" *应该找到'init'钩子。如果需要,您可以在搜索字符串中使用正则表达式,并告诉它忽略特定文件和/或目录。我尝试过其他选择,但从未在其他任何地方出售过。grep又快又干净。

这不是“Vim”答案,但您确实说过“或类似”:)

在http://adambrown.info/p/wp_hooks/version/3.4也有一个非常好的钩子数据库。

于 2012-10-15T17:48:58.437 回答
2

我最近不得不这样做很多,所以我写了一个小的 Vim 插件来简化这个过程。

只需将插入符号放在挂钩或过滤器的名称上,按Leader+f查找挂钩函数,或按Leader+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,因此手动搜索事件可能容易出错。

于 2013-08-08T13:29:28.260 回答
1

从基本到相当复杂:

GREP

已经解释过了。

来自 Vim 或 VIMGREP 的 GREP

如果您已经在 Vim 中,您可以使用该:vimgrep命令或其姊妹:grep

:vim "do_action( 'init' )" **/*.php | copen

请参阅让您进行递归搜索:help starstar的通配符。在使用时使用内部方法,嗯…… 。后者可能更快。**:vimgrep:grepgrep

CTAGS

假设您已经ctags安装,索引可以在 shell 或 Vim 中完成:

$ ctags -R . <-- in the shell
:!ctags -R . <-- in Vim

并且查询只是一个问题:tag do_action。阅读:help tags以获得深入的解释。

CSCOPE

假设您已经cscope安装,您可以直接从 shell 使用它:

$ cscope -R *.php

创建索引后,您可以在cscope的界面中搜索并在编辑器中打开所选文件。

假设你的 Vim 带有 cscope 支持,你必须:

  1. 创建索引,:!cscope -bR *.php

  2. 找到索引,:cs add cscope.out

  3. *f*找到*d*定义,:cs f d do_action

还有其他专门的工具,例如CodesearchGNU Global,但我认为您实际上并不需要比普通grep的或最多ctags.

于 2012-10-15T20:09:35.147 回答