Frage

Wo finde ich eine Liste aller WordPress-Hooks und überdachten Funktionen (steckbar, skriptierbar usw.)?

Bearbeiten: Plugin ist Hier aufgeführt.

War es hilfreich?

Lösung

@Arlen: Wie Keith S betont Adam Browns Liste der Haken ist die Defacto -Ressource von Haken für WordPress. Es ist jedoch nicht perfekt:

  • Es zeigt die Haken nicht in der Reihenfolge, wenn sie angerufen werden,
  • Es gibt keinen Dateinamen oder Zeilennummer an, sofern aufgerufen.
  • Es liefert keine Reihe von Argumenten, die verabschiedet wurden,
  • Es ist keine vollständige Liste, da einige Haken dynamisch bezeichnet werden können,
  • Und es zeigt keine Haken von Plugins.

Während Adams Liste eine großartige Ressource ist, insbesondere zum Verständnis, wenn Haken historisch hinzugefügt wurden, ist es nicht annähernd so nützlich, als ob Sie die Haken auf einer bestimmten Seite auf Ihrer eigenen Website instrumentieren könnten.

Ich habe eine Weile mit dieser Idee gefallen Plugin genannt "Instrumentenhaken für WordPress. "Sie können das finden Vollständige Quelle unten Der Screenshot und können Sie auch können Laden Sie es von GIST herunter hier.

Hier ist ein Screenshot darüber, wie die Instrumentierung aussieht:

Screenshot of Instrument Hooks for WordPress Plugin in action

Sie lösen die Instrumentierung mit dem URL -Parameter aus instrument=hooks, dh:

http://example.com?instrument=hooks

Und wie versprochen ist hier die Quelle (oder laden Sie sie herunter hier.):

<?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;
        }
    }
}

Andere Tipps

Debugg -Bar Action Hooks Plugin

Zeigt eine Liste von Aktionen an, die für die aktuelle Anfrage abgefeuert wurden. Benötigt das Debug -Bar -Plugin.

Der Codex hat eine Aktionsreferenz und ein Filterreferenz. Adam Brown schuf a Hakendatenbank Das enthält alle Haken im Quellcode und fügt die Dokumentation von den Wiki -Seiten, Versionsinformationen und Links zum Quellcode hinzu. Sie können es verbessern, indem Sie Dokumentation im Codex schreiben.

Natürlich sind einige Haken je nach anderen Daten dynamisch. Nehmen Sie die wp_transition_post_status Funktion:

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);
}

Wenn Sie einen benutzerdefinierten Post -Typ registrieren event und ein benutzerdefinierter Poststatus cancelled, Sie werden eine haben cancelled_event Actionhaken.

Obwohl primitiv, kann dieser Plugin -Code vielleicht helfen? Schalten Sie "add_action" mit "add_filter", wenn Sie sich stattdessen Filter ansehen möchten. Laden Sie das Plugin und aktualisieren Sie die Startseite der Website. Nach dem Laden ist es schwerwiegende Schmerzen bei der Deaktivierung. Ich habe diesen Trick viele Zeit verwendet, um Dinge zu beheben oder einen Ort zu finden, an dem ich etwas einfügen kann.

<?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;
}

Ich benutze dies, um die Reihenfolge der Haken zu finden. Um das zu bekommen filters nur ändern add_action zu 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');

Wie @kaiser vorschlägt, veröffentlichen Sie nicht nur Links, ich verbessere es. Es ist jedoch nicht möglich, den gesamten Code hier zu verwenden, daher verwende ich hier nur wenige Bild, um zu erklären, wie eine vollständige Liste für WordPress -Hooks mit jedem beschreiben. Sie können es hier finden für Haken, Klassen, Funktionen, Plugins, enter image description here

jeden beschreibenenter image description here

Sie können einfach ein Abfrage -Monitor -Plugin verwenden: https://wordpress.org/plugins/query-monitor/

enter image description here

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top