it-swarm-es.com

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

¿Dónde puedo encontrar una lista de todos los ganchos de WordPress y funciones extraíbles (conectables, de secuencias de comandos, etc.)

Editar: El complemento es listado aquí .

46
Arlen Beiler

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

  • No muestra los ganchos en orden de cuando 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 pueden llamarse dinámicamente,
  • Y no muestra ganchos de plugins.

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 pudieras instrumentar los ganchos en cualquier página en tu propio sitio.

He estado jugando con esta idea por un tiempo, así que tu pregunta me impulsó a escribir un plugin llamado "Instrument Hooks for WordPress. Puede encontrar la fuente completa a continuación la captura de pantalla y también puede descargarla desde Gist aquí.

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

Screenshot of Instrument Hooks for WordPress Plugin in action

Usted activa la instrumentación utilizando el parámetro de URL instrument=hooks, es decir:

http://example.com?instrument=hooks

Y según lo prometido, 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" 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

Complemento Debug Bar Action Hooks

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

  

4
sam

El Codex tiene una Referencia de acción y a Referencia de filtro . Adam Brown creó una base de datos hook que tiene todos los enlaces 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. Se puede mejorar escribiendo la documentación en el Codex.

Por supuesto, algunos ganchos son dinámicos, dependiendo de otros datos. Tome la función 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 registra un tipo de publicación personalizada event y un estado de publicación personalizado cancelled, tendrá un enlace de acción cancelled_event.

2
Jan Fabry

Aunque primitivo, tal vez este código de complemento puede ayudar? Cambie "add_action" con "add_filter" si quiere ver los filtros en su lugar. Cargue el complemento y luego actualice la página de inicio del sitio. Una vez cargado, es muy difícil desactivarlo, así que simplemente cambie el nombre del archivo del complemento en la carpeta de complementos y actualice el sitio nuevamente, se desactivará automáticamente. He usado este truco muchas veces para solucionar problemas o encontrar un lugar donde pueda insertar algo.

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

Como @kaiser sugiere no publicar solo enlaces, lo estoy mejorando. pero no es posible usar el código completo aquí, así que estoy usando algunas imágenes aquí para explicar que la forma en que tiene una lista completa para los enganches de WordPress describe cada uno. puede encontrarlo aquí para ganchos , clases , funciones , pluginsenter image description here

para describir cada enter image description here

0
sohan

Puede usar un complemento de monitor de consulta: https://wordpress.org/plugins/query-monitor/

enter image description here

0
Den Pat

Yo uso esto para encontrar el orden de los ganchos. Para obtener el filters simplemente cambie add_action a 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