Où puis-je trouver une liste des points d'ancrage WordPress?

46

Où puis-je trouver une liste de tous les points d'ancrage WordPress et de toutes les fonctions qui ne peuvent pas être remplies (connectable, pouvant être scriptée, etc.)?

Modifier: Le plug-in est énumérés ici .

    
posée Arlen Beiler 13.08.2010 - 17:15

6 réponses

43

@Arlen: Comme le souligne Keith S, la Liste des crochets d'Adam Brown est la ressource de fait des crochets pour WordPress. Cependant, ce n'est pas parfait:

  • Il ne montre pas les crochets dans l'ordre d'appels,
  • Il ne fournit pas le nom du fichier ou le numéro de ligne où il est appelé,
  • Il ne fournit pas un nombre d'arguments passés,
  • Ce n'est pas une liste complète car certains hooks peuvent être appelés dynamiquement,
  • Et cela ne montre pas les points d'ancrage des plugins.

Ainsi, bien que la liste d'Adam soit une excellente ressource, en particulier pour comprendre le fait que des points d'ancrage ont été ajoutés historiquement, ce n'est pas aussi utile que de pouvoir instrumenter les points d'ancrage d'une page donnée de votre propre site.

Je réfléchis à cette idée depuis un moment et votre question m'a donc incité à écrire un plug-in appelé " Accroche-instruments pour WordPress . " Vous pouvez trouver la source complète ci-dessous sur la capture d'écran et vous pouvez également la télécharger à partir de gist ici .

Alors, voici une capture d'écran de l'instrumentation:

Vousdéclenchezl'instrumentationàl'aideduparamètred'URLinstrument=hooks,c'est-à-dire:

.
  

enlace

Et comme promis, voici la source (ou téléchargez-la ici .):

<?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;
        }
    }
}
    
réponse donnée MikeSchinkel 14.08.2010 - 04:09
3

plug-in Crochets d'action de la barre de débogage

  

Affiche une liste d'actions déclenchées pour la demande en cours. Nécessite le plugin de la barre de débogage.

    
réponse donnée sam 22.05.2012 - 22:52
2

Le Codex a un référence d'action et un Référence du filtre . Adam Brown a créé une base de données de points d'ancrage qui contient tous les points d'ancrage dans le code source et ajoute la documentation des pages du wiki, des informations de version et des liens. au code source. Vous pouvez l’améliorer en écrivant de la documentation dans le Codex.

Bien sûr, certains hooks sont dynamiques et dépendent d’autres données. Utilisez la fonction 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);
}

Si vous enregistrez une publication personnalisée de type event et un statut de publication personnalisée cancelled , vous obtiendrez un point d'ancrage cancelled_event action.

    
réponse donnée Jan Fabry 13.08.2010 - 17:29
1

Bien que primitif, peut-être que ce code de plugin peut aider? Basculez "add_action" avec "add_filter" si vous souhaitez plutôt examiner les filtres. Chargez le plug-in, puis actualisez la page d'accueil du site. Une fois chargé, la désactivation est très pénible. Il vous suffit donc de renommer le fichier plugin situé dans le dossier plugins et d'actualiser le site à nouveau. Il se désactivera automatiquement. J'ai utilisé cette astuce plusieurs fois pour résoudre des problèmes ou trouver un endroit où insérer quelque chose.

<?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;
}
    
réponse donnée Volomike 18.08.2010 - 22:34
0

Je me sers de cela pour trouver l’ordre des hameçons. Pour obtenir le filters changez simplement add_action en 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');
    
réponse donnée Wadde 29.07.2014 - 10:37
0

Comme @kaiser suggère de ne pas poster que des liens, je l’améliore. mais il n’est pas possible d’utiliser tout le code ici, c’est pourquoi je me sers de peu d’images pour expliquer comment il contient une liste complète des points d'ancrage WordPress. vous pouvez le trouver ici pour hooks , classes , fonctions , < un href="http://hookr.io/plugins/#index=a"> plugins ,

décrirechacun

    
réponse donnée sohan 04.06.2015 - 12:09

Lire d'autres questions sur les étiquettes