Di mana saya dapat menemukan daftar semua pengait WordPress dan fungsi yang dapat diatasi secara berlebihan (pluggable, scriptable, dll)?
Sunting: Plugin terdaftar di sini .
Di mana saya dapat menemukan daftar semua pengait WordPress dan fungsi yang dapat diatasi secara berlebihan (pluggable, scriptable, dll)?
Sunting: Plugin terdaftar di sini .
Jawaban:
@Arlen: Seperti yang ditunjukkan Keith S , Daftar Hooks dari Adam Brown adalah sumber defacto dari kait untuk WordPress. Namun, itu tidak sempurna:
Jadi, sementara daftar Adam adalah sumber yang bagus terutama untuk memahami kapan kait ditambahkan secara historis, itu hampir tidak berguna seolah-olah Anda dapat memasukkan kait pada halaman tertentu di situs Anda sendiri.
Saya telah mempermainkan ide ini untuk sementara waktu sehingga pertanyaan Anda memicu saya untuk menulis sebuah plugin yang disebut " Instrument Hooks for WordPress ." Anda dapat menemukan sumber lengkap di bawah tangkapan layar dan dapat juga mengunduhnya dari intisari di sini .
Jadi, inilah tangkapan layar seperti apa instrumentasi itu:
Anda memicu instrumentasi dengan menggunakan parameter URL instrument=hooks
, yaitu:
Dan seperti yang dijanjikan, inilah sumbernya (atau unduh di sini .):
<?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;
}
}
}
Menampilkan daftar tindakan yang dipecat untuk permintaan saat ini. Membutuhkan plugin bilah debug.
Codex memiliki Referensi Tindakan dan Referensi Filter . Adam Brown membuat basis data pengait yang memiliki semua pengait dalam kode sumber, dan menambahkan dokumentasi dari halaman wiki, informasi versi, dan tautan ke kode sumber. Anda dapat memperbaikinya dengan menulis dokumentasi di Codex.
Tentu saja, beberapa pengait bersifat dinamis, tergantung pada data lainnya. Ambil wp_transition_post_status
fungsinya:
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);
}
Jika Anda mendaftarkan jenis kiriman khusus event
dan status kiriman khusus cancelled
, Anda akan memiliki cancelled_event
hook tindakan.
Meski primitif, mungkin kode plugin ini dapat membantu? Alihkan "add_action" dengan "add_filter" jika Anda ingin melihat filter sebagai gantinya. Muat plugin, lalu segarkan beranda situs tersebut. Setelah dimuat, itu adalah rasa sakit yang serius untuk dinonaktifkan, jadi cukup ganti nama file plugin di bawah folder plugins dan segarkan situs lagi - itu akan dinonaktifkan secara otomatis. Saya telah menggunakan trik ini berkali-kali untuk memecahkan masalah atau menemukan tempat di mana saya dapat memasukkan sesuatu.
<?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;
}
Saya menggunakan ini untuk menemukan urutan kait. Untuk mendapatkan yang filters
perubahan hanya add_action
untuk 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');
Karena @kaiser menyarankan jangan memposting tautan saja, saya memperbaikinya. tetapi tidak mungkin untuk menggunakan seluruh kode di sini jadi saya menggunakan beberapa gambar di sini untuk menjelaskan bahwa bagaimana ia memiliki daftar lengkap untuk kait WordPress dengan menjelaskan masing-masing. Anda dapat menemukannya di sini untuk kait , kelas , fungsi , plugin ,
untuk menggambarkan masing-masing
Anda cukup menggunakan plugin monitor permintaan: https://wordpress.org/plugins/query-monitor/