it-swarm.cn

我在哪里可以找到WordPress挂钩列表?

我在哪里可以找到所有WordPress钩子和可翻转函数(可插入,可编写脚本等)的列表?

编辑: 插件 在此处列出

46
Arlen Beiler

@Arlen:正如Keith S所指出的那样 Adam Brown的Hooks列表 是WordPress钩子的事实资源。但是,它并不完美:

  • 它没有按照它们被调用的顺序显示钩子,
  • 它不提供调用的文件名或行号,
  • 它没有提供一些传递的参数,
  • 它不是一个完整的列表,因为一些钩子可以动态调用,
  • 它没有显示插件的钩子。

因此,虽然Adam的列表是一个很好的资源,特别是对于理解钩子在历史上被添加时的优势,它并不像您能够在自己网站上的任何给定页面上检测钩子那样有用。

我一直在玩这个想法,所以你的问题引发我写一个 插件 叫“WordPress的乐器挂钩。”您可以找到下面的完整源代码屏幕截图,你也可以 从Gist 这里下载

所以这里是一个仪表的截图:

Screenshot of Instrument Hooks for WordPress Plugin in action

您可以使用URL参数instrument=hooks触发检测,即:

http://example.com?instrument=hooks

并按照承诺,这里是源(或下载 这里 。):

<?php
/*
Plugin Name: Instrument Hooks for WordPress
Description: Instruments Hooks for a Page. Outputs during the Shutdown Hook.
Version: 0.1
Author: Mike Schinkel
Author URI: http://mikeschinkel.com
*/

if ($_GET['instrument']=='hooks') {

    add_action('shutdown','instrument_hooks');
    function instrument_hooks() {
        global $wpdb;
        $hooks = $wpdb->get_results("SELECT * FROM wp_hook_list ORDER BY first_call");
        $html = array();
        $html[] = '<style>#instrumented-hook-list table,#instrumented-hook-list th,#instrumented-hook-list td {border:1px solid gray;padding:2px 5px;}</style>
<div align="center" id="instrumented-hook-list">
    <table>
        <tr>
        <th>First Call</th>
        <th>Hook Name</th>
        <th>Hook Type</th>
        <th>Arg Count</th>
        <th>Called By</th>
        <th>Line #</th>
        <th>File Name</th>
        </tr>';
        foreach($hooks as $hook) {
            $html[] = "<tr>
            <td>{$hook->first_call}</td>
            <td>{$hook->hook_name}</td>
            <td>{$hook->hook_type}</td>
            <td>{$hook->arg_count}</td>
            <td>{$hook->called_by}</td>
            <td>{$hook->line_num}</td>
            <td>{$hook->file_name}</td>
            </tr>";
        }
        $html[] = '</table></div>';
        echo implode("\n",$html);
    }

    add_action('all','record_hook_usage');
    function record_hook_usage($hook){
        global $wpdb;
        static $in_hook = false;
        static $first_call = 1;
        static $doc_root;
        $callstack = debug_backtrace();
        if (!$in_hook) {
            $in_hook = true;
            if ($first_call==1) {
                $doc_root = $_SERVER['DOCUMENT_ROOT'];
                $results = $wpdb->get_results("SHOW TABLE STATUS LIKE 'wp_hook_list'");
                if (count($results)==1) {
                    $wpdb->query("TRUNCATE TABLE wp_hook_list");
                } else {
                    $wpdb->query("CREATE TABLE wp_hook_list (
                    called_by varchar(96) NOT NULL,
                    hook_name varchar(96) NOT NULL,
                    hook_type varchar(15) NOT NULL,
                    first_call int(11) NOT NULL,
                    arg_count tinyint(4) NOT NULL,
                    file_name varchar(128) NOT NULL,
                    line_num smallint NOT NULL,
                    PRIMARY KEY (first_call,hook_name))"
                    );
                }
            }
            $args = func_get_args();
            $arg_count = count($args)-1;
            $hook_type = str_replace('do_','',
                str_replace('apply_filters','filter',
                    str_replace('_ref_array','[]',
                        $callstack[3]['function'])));
            $file_name = str_replace($doc_root,'',$callstack[3]['file']);
            $line_num = $callstack[3]['line'];
            $called_by = $callstack[4]['function'];
            $wpdb->query("INSERT wp_hook_list
                (first_call,called_by,hook_name,hook_type,arg_count,file_name,line_num)
                VALUES ($first_call,'$called_by()','$hook','$hook_type',$arg_count,'$file_name',$line_num)");
            $first_call++;
            $in_hook = false;
        }
    }
}
44
MikeSchinkel

Debug Bar Action Hooks插件

显示为当前请求触发的操作列表。需要调试栏插件。

 

4
sam

Codex有一个 Action Reference 和一个 Filter Reference 。 Adam Brown创建了一个 hook数据库 它包含源代码中的所有钩子,并添加了wiki页面的文档,版本信息和源代码的链接。您可以通过在Codex中编写文档来改进它。

当然,根据其他数据,一些钩子是动态的。拿 wp_transition_post_status 函数:

function wp_transition_post_status($new_status, $old_status, $post) {
    do_action('transition_post_status', $new_status, $old_status, $post);
    do_action("${old_status}_to_$new_status", $post);
    do_action("${new_status}_$post->post_type", $post->ID, $post);
}

如果您注册自定义帖子类型event和自定义帖子状态cancelled,您将有一个cancelled_event操作挂钩。

2
Jan Fabry

虽然原始,也许这个插件代码可以帮助?如果要查看过滤器,请将“add_action”切换为“add_filter”。加载插件,然后刷新站点的主页。一旦加载,停用就会非常痛苦,所以只需重命名插件文件夹下的插件文件并再次刷新网站 - 它将自动停用。我曾经多次使用这个技巧来解决问题或找到一个可以插入东西的地方。

<?php
/*
Plugin Name: Hooks
Plugin URI: http://example.com/
Description: Hooks
Version: 1.00
Author: Hooks
Author URI: http://example.com/
*/

add_action('all','hook_catchall');
function hook_catchall(&$s1 = '', &$s2 = '', &$s3 = '', &$s4 = '') {
    echo "<h1>1</h1>\n";
    print_r($s1);
    echo "<br />\n";
    echo "<h1>2</h1>\n";
    print_r($s2);
    echo "<br />\n";
    echo "<h1>3</h1>\n";    
    print_r($s3);
    echo "<br />\n";
    echo "<h1>4</h1>\n";    
    print_r($s4);
    echo "<br />\n";
    return $s1;
}
1
Volomike

正如@kaiser建议不要只发布链接我正在改进它。但是这里不可能使用整个代码所以我在这里使用的几张图片来解释它如何有一个完整的WordPress钩子列表,并描述每个。你可以在这里找到 hooksclassesfunctionsplugins , enter image description here

描述每一个 enter image description here

0
sohan

我用这个来找到钩子的顺序。要获取filters只需将add_action更改为add_filter

function echo_all_hooks() {
$not_arr = array('gettext','sanitize_key','gettext_with_context','attribute_escape');
if(!in_array(current_filter(),$not_arr)) echo current_filter()."<br/>";
}
add_action('all','echo_all_hooks');
0
Wadde