Tüm WordPress kancalarının ve aşırı çekilebilir işlevlerin (takılabilir, kodlanabilir, vb.) Bir listesini nerede bulabilirim?
Düzenleme: Eklenti burada listelenir .
Tüm WordPress kancalarının ve aşırı çekilebilir işlevlerin (takılabilir, kodlanabilir, vb.) Bir listesini nerede bulabilirim?
Düzenleme: Eklenti burada listelenir .
Yanıtlar:
@ Arlen: Keith S'ın işaret ettiği gibi Adam Brown Hooks List, WordPress için kanca kaynağıdır. Ancak, mükemmel değil:
Bu yüzden Adam'ın listesi, özellikle kancaların tarihsel olarak eklendiği zamanları anlamak için harika bir kaynak olsa da, kancaları kendi sitenizdeki herhangi bir sayfada enstrümanla çalmak kadar kolay değildir.
Bir süredir bu fikir ile oynuyordum, bu nedenle sorunuz , " WordPress için Enstrüman Kancaları " adlı bir eklenti yazmam için beni tetikledi . Sen bulabilirsiniz aşağıda tam kaynağını ekran görüntüsü ve ayrıca can özünden indirmek burada .
İşte enstrümantasyonun neye benzediğinin ekran görüntüsü:
URL parametresini kullanarak enstrümantasyonu tetiklersiniz instrument=hooks
, yani:
Ve söz verildiği gibi, işte kaynak (veya buradan indirin .):
<?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;
}
}
}
Hata ayıklama çubuğu eylem kanca eklentisi
Geçerli istek için başlatılan eylemlerin bir listesini görüntüler. Hata ayıklama çubuğu eklentisini gerektirir.
Codex'in bir Eylem Referansı ve bir Filtre Referansı vardır . Adam Brown , kaynak kodunda tüm kancalara sahip bir kanca veritabanı oluşturdu ve belgeleri wiki sayfalarından, sürüm bilgilerinden ve kaynak koduna bağlantılar ekler. Kodeks içine belgeler yazarak geliştirebilirsiniz.
Tabii ki, bazı kancalar diğer verilere bağlı olarak dinamiktir. wp_transition_post_status
Fonksiyonu al :
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);
}
Özel bir gönderi türü event
ve özel bir gönderi durumu kaydederseniz cancelled
, bir cancelled_event
eylem kancanız olur.
İlkel olsa da, belki bu eklenti kodu yardımcı olabilir? Filtrelere bakmak istiyorsanız, "add_action" ı "add_filter" ile değiştirin. Eklentiyi yükleyin ve sitenin ana sayfasını yenileyin. Yüklendikten sonra devre dışı bırakmak ciddi bir acıdır, bu yüzden sadece eklentiler klasörünün altındaki eklenti dosyasını yeniden adlandırın ve siteyi tekrar yenileyin - otomatik olarak devre dışı bırakacaktır. Bu numarayı, sorunları gidermek ya da bir şeyler ekleyebileceğim bir yer bulmak için çok kullandım.
<?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;
}
Bunu kancaların sırasını bulmak için kullanıyorum. Almak için filters
sadece değişimi add_action
için 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');
@Kaiser'in önerdiği gibi sadece linkler yayınlamıyorum, onu geliştiriyorum. ancak burada tüm kodu kullanmak mümkün değil, bu yüzden WordPress kancaları için her birini tanımlayan tam bir listenin nasıl olduğunu açıklamak için birkaç resim kullanıyorum. Eğer burada bulabilirsiniz kancalar , sınıflar , fonksiyonlar , eklentileri ,
her birini tarif etmek
Sadece bir sorgu izleme eklentisi kullanabilirsiniz: https://wordpress.org/plugins/query-monitor/