Saltar al contenido

Wordpress: ¿Dónde puedo encontrar una lista de ganchos de WordPress?

Solución:

@Arlen: Como señala Keith S, la Lista de ganchos de Adam Brown es el recurso de facto de los ganchos para WordPress. Sin embargo, no es perfecto:

  • No muestra los ganchos en el orden en que se llaman,
  • No proporciona el nombre del archivo o el número de línea donde se invoca,
  • No proporciona una serie de argumentos pasados,
  • No es una lista completa porque algunos ganchos se pueden llamar dinámicamente,
  • Y no muestra ganchos de complementos.

Entonces, si bien la lista de Adam es un gran recurso, especialmente para comprender cuándo se agregaron históricamente los ganchos, no es tan útil como si pudiera instrumentar los ganchos en cualquier página de su propio sitio.

He estado jugando con esta idea por un tiempo, así que tu pregunta me impulsó a escribir un enchufar llamado “Ganchos de instrumentos para WordPress. “Puede encontrar el fuente completa a continuación la captura de pantalla y también puedes descárgalo de la esencia aquí.

Así que aquí hay una captura de pantalla de cómo se ve la instrumentación:

Captura de pantalla de Instrument Hooks para el complemento de WordPress en acción

Activa la instrumentación mediante el parámetro de URL instrument=hooks, es decir:

http://example.com?instrument=hooks

Y como se prometió, aquí está la fuente (o descárguela aquí):

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

Complemento de ganchos de acción de la barra de depuración

Muestra una lista de acciones activadas para la solicitud actual. Requiere el complemento de la barra de depuración.

El Codex tiene una Referencia de acción y una Referencia de filtro. Adam Brown creó una base de datos de enganches que tiene todos los enganches en el código fuente y agrega la documentación de las páginas wiki, información de la versión y enlaces al código fuente. Puede mejorarlo escribiendo documentación en el Codex.

Por supuesto, algunos ganchos son dinámicos, dependiendo de otros datos. Toma el wp_transition_post_status función:

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 registra un tipo de publicación personalizada event y un estado de publicación personalizado cancelled, tendrás un cancelled_event gancho de acción.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *