Onde posso encontrar uma lista de todos os ganchos do WordPress e funções sobre-ridable (conectável, scriptable, etc)?
Editar: Plugin é listado aqui .
@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:
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:
Você aciona a instrumentação usando o parâmetro de URL instrument=hooks
, por exemplo:
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;
}
}
}
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.
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
.
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;
}
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 , plugins ,
para descrever cada
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');