web-dev-qa-db-fra.com

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

Où puis-je trouver une liste de tous les points d'ancrage WordPress et de toutes les fonctions superposables (plug-in, scriptable, etc.)?

Edit: Le plugin est est listé ici .

46
Arlen Beiler

@Arlen: Comme le souligne Keith S 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 par ordre d'appels,
  • Il ne fournit pas le nom du fichier ou le numéro de ligne où invoqué,
  • 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 il ne montre pas les crochets des plugins.

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

Cela fait un moment que je m'amuse à cette idée et votre question m'a donc incité à écrire un plugin appelé "Crochets d'instrument pour WordPress." Vous pouvez trouver lesource complète ci-dessousla capture d'écran et vous pouvez aussi le télécharger depuis Gist ici.

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

Screenshot of Instrument Hooks for WordPress Plugin in action

Vous déclenchez l’instrumentation en utilisant le paramètre URL instrument=hooks, c’est-à-dire:

http://example.com?instrument=hooks

Et comme promis, voici le code source (ou téléchargez-le 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;
        }
    }
}
44
MikeSchinkel

Plugin 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.

  

4
sam

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

Bien sûr, certains hooks sont dynamiques, en fonction d'autres données. Prenez 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 aurez un hook d'action cancelled_event.

2
Jan Fabry

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 sera automatiquement désactivé. 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;
}
1
Volomike

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 , pluginsenter image description here

décrire chacun enter image description here

0
sohan

J'utilise ceci pour trouver l'ordre des crochets. Pour obtenir le filters, remplacez simplement add_action par 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