首页 文章

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

提问于
浏览
1

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

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

过滤器工作类似 . 定义一个钩子的函数是 do_action ,所以要创建一个核心开发人员写的init钩子

do_action( 'init' );

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

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

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

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

3 回答

  • 2

    从基础到相当复杂:

    GREP

    已经解释过了 .

    GREP FROM VIM OR VIMGREP

    如果您已经在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
    

    而查询只是 :tag do_action 的问题 . 请阅读 :help tags 以获得深入的解释 .

    CSCOPE

    假设你安装了 cscope ,你可以直接在shell中使用它:

    $ cscope -R *.php
    

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

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

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

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

      • f * ind * d * efinition, :cs f d do_action

    还有其他专业工具,如CodesearchGNU Global,但我认为你真的不需要比普通的 grep 或最多 ctags 更进一步 .

  • 2

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

    我用grep . 没有它就无法工作 . grep 让我得到任何我想要的东西 . grep -Rni "do_action( 'init'" * 应该找到'init'钩子 . 如果需要,可以在搜索字符串中使用正则表达式,并告诉它忽略特定文件和/或目录 . 我曾经卖过其他任何东西 . grep 快速而干净 .

    这不是'Vim'的答案,但你确实说'或类似':)

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

  • 1

    我最近必须这么做,所以我写了a little Vim plugin以简化这个过程 .

    只需将插入符号放在钩子或过滤器的名称上,按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>
    

    Site note: 写这个教会了我,是的,人们做的事情就像使用 add_filter 将它们的函数挂钩到 do_action 定义的钩子一样,因此手动搜索事件可能容易出错 .

相关问题