web-development-kb-pt.site

Onde posso encontrar uma lista de ganchos do WordPress?

Onde posso encontrar uma lista de todos os ganchos do WordPress e funções sobre-ridable (conectável, scriptable, etc)?

Editar: Plugin é listado aqui .

46
Arlen Beiler

@Arlen: Como Keith S aponta A Lista de Ganchos de Adam Brown é o recurso ideal dos ganchos para o WordPress. No entanto, não é perfeito:

  • Não mostra os ganchos na ordem de quando são chamados,
  • Não fornece nome de arquivo ou número de linha onde invocado,
  • Não fornece um número de argumentos passados,
  • Não é uma lista completa porque alguns ganchos podem ser chamados dinamicamente,
  • E isso não mostra ganchos de plugins.

Portanto, embora a lista de Adam seja um excelente recurso, especialmente para entender quando os ganchos foram adicionados historicamente, não é tão útil quanto se você fosse capaz de instrumentar os ganchos de qualquer página em seu próprio site.

Eu tenho brincado com essa idéia por um tempo, então sua pergunta me levou a escrever um plugin chamado "Ganchos de Instrumento para WordPress." Você pode encontrar ofonte completa abaixoa captura de tela e você também pode baixá-lo do Gist aqui.

Então aqui está uma imagem do que a instrumentação parece:

Screenshot of Instrument Hooks for WordPress Plugin in action

Você aciona a instrumentação usando o parâmetro de URL instrument=hooks, por exemplo:

http://example.com?instrument=hooks

E como prometido, aqui está a fonte (ou faça o download aqui .):

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

Plug-in de Ganchos de Ação da Barra de Depuração

Exibe uma lista de ações disparadas para a solicitação atual. Requer o plugin da barra de depuração.

  

4
sam

O Codex tem um Referência de ação e a Referência de filtro . Adam Brown criou um banco de dados hook que possui todos os ganchos no código fonte, e adiciona a documentação das páginas wiki, informações de versão e links para o código fonte. Você pode melhorar escrevendo a documentação no Codex.

Claro, alguns ganchos são dinâmicos, dependendo de outros dados. Pegue o wp_transition_post_status function:

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);
}

Se você registrar um tipo de mensagem personalizada event e um status de postagem personalizado cancelled, você terá um gancho de ação cancelled_event.

2
Jan Fabry

Embora primitivo, talvez este código de plugin possa ajudar? Alterne "add_action" com "add_filter" se você quiser ver os filtros. Carregue o plug-in e atualize a página inicial do site. Uma vez carregada, é muito difícil desativá-la, basta renomear o arquivo do plugin na pasta plugins e atualizar o site novamente - ele será desativado automaticamente. Eu usei esse truque muitas vezes para solucionar problemas ou encontrar um lugar onde eu possa inserir 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 o @kaiser sugere, não publique apenas links que estou a melhorar. mas não é possível usar o código inteiro aqui, então estou usando poucas imagens aqui para explicar como ele tem uma lista completa para os ganchos do WordPress que descrevem cada um deles. você pode encontrá-lo aqui para hooks , classes , functions , pluginsenter image description here

para descrever cada enter image description here

0
sohan

Eu uso isso para encontrar a ordem dos ganchos. Para obter o filters, altere add_action para 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