it-swarm.dev

Kde najdu seznam háčků WordPress?

Kde najdu seznam všech háčků WordPress a funkcí, které je možné přehrát (zásuvný, skriptovatelný, atd.)?

Edit: Plugin je zde uveden .

46
Arlen Beiler

@Arlen: Jak poukazuje Keith S Seznam háčků Adama Browna je defacto zdroj háčků pro WordPress. Není to však dokonalé:

  • Nezobrazuje háčky v pořadí, v jakém se nazývají,
  • Neuvádí název souboru ani číslo řádku, kde bylo vyvoláno,
  • Neposkytuje mnoho předaných argumentů,
  • Není to úplný seznam, protože některé háčky lze nazvat dynamicky,
  • A nezobrazuje háčky z pluginů.

Takže zatímco Adamův seznam je skvělým zdrojem, zejména pro pochopení, kdy byly historicky přidány háčky, není to téměř tak užitečné, jako kdybyste byli schopni použít háčky na jakékoli stránce na vašich vlastních stránkách.

Chvíli jsem s touto myšlenkou nějakou dobu pohrával, takže vaše otázka mě přiměla psát plugin nazvaný "nástrojové háčky pro WordPress." Můžete najítúplný zdroj nížesnímek obrazovky a můžete také stáhnout z Gist zde.

Tak tady je screenshot toho, jak přístroj vypadá:

Screenshot of Instrument Hooks for WordPress Plugin in action

Přístroj spustíte pomocí parametru URL instrument=hooks, tj .:

http://example.com?instrument=hooks

A jak jsem slíbil, zde je zdroj (nebo si ho stáhněte zde .):

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

Doplněk Debug Bar Action Hooks

Zobrazí seznam akcí aktivovaných pro aktuální požadavek. Vyžaduje plugin ladicí lišty.

  

4
sam

Kodex má Referenci akce a a Odkaz na filtr . Adam Brown vytvořil hákovou databázi která má všechny háčky ve zdrojovém kódu a přidává dokumentaci z wiki stránek, informace o verzi a odkazy na zdrojový kód. Můžete ji vylepšit napsáním dokumentace v Kodexu.

Některé háčky jsou samozřejmě dynamické v závislosti na jiných datech. Vezměte funkci 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);
}

Pokud zaregistrujete vlastní typ příspěvku event a vlastní stav příspěvku cancelled, budete mít h_ akce cancelled_event.

2
Jan Fabry

I když primitivní, možná tento plugin kód může pomoci? Chcete-li místo filtrů zobrazit filtry, přepněte funkci „add_action“ na „add_filter“. Načtěte plugin a poté obnovte domovskou stránku webu. Po načtení, je to vážná bolest deaktivovat, takže jen přejmenujte soubor pluginu ve složce pluginy a obnovte stránku znovu - bude automaticky deaktivovat. Použil jsem tento trik mnoho času k řešení problémů nebo najít místo, kde můžu něco vložit.

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

Jelikož @kaiser navrhují, neukládejte pouze odkazy, které vylepšuji. ale není možné použít celý kód zde, takže jsem pomocí několika obrázků zde vysvětlit, že jak to má kompletní seznam pro WordPress háky s popsat každý. najdete ho zde pro háčky , třídy , funkce , pluginyenter image description here

popsat každý enter image description here

0
sohan

Používám to k nalezení pořadí háčků. Chcete-li získat filters stačí změnit add_action na 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