Tôi có thể tìm thấy danh sách tất cả các hook WordPress và các hàm quá mức (có thể cắm, scriptable, v.v.) ở đâu?
Chỉnh sửa: Plugin được liệt kê ở đây .
Tôi có thể tìm thấy danh sách tất cả các hook WordPress và các hàm quá mức (có thể cắm, scriptable, v.v.) ở đâu?
Chỉnh sửa: Plugin được liệt kê ở đây .
Câu trả lời:
@Arlen: Như Keith S chỉ ra Danh sách các móc của Adam Brown là tài nguyên chính xác của các hook cho WordPress. Tuy nhiên, nó không hoàn hảo:
Vì vậy, trong khi danh sách của Adam là một tài nguyên tuyệt vời, đặc biệt là để hiểu khi các hook được thêm vào trong lịch sử, nó gần như không hữu ích như thể bạn có thể sử dụng các hook trên bất kỳ trang nào trên trang web của riêng bạn.
Tôi đã từng chơi đùa với ý tưởng này trong một thời gian vì vậy câu hỏi của bạn đã kích hoạt tôi viết một plugin có tên là " Công cụ móc cho WordPress ". Bạn có thể tìm thấy nguồn đầy đủ bên dưới ảnh chụp màn hình và bạn cũng có thể tải xuống từ ý chính tại đây .
Vì vậy, đây là một ảnh chụp màn hình của các thiết bị trông như thế nào:
Bạn kích hoạt thiết bị bằng cách sử dụng tham số URL instrument=hooks
, nghĩa là:
Và như đã hứa, đây là nguồn (hoặc tải xuống ở đây .):
<?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;
}
}
}
Hiển thị danh sách các hành động được kích hoạt cho yêu cầu hiện tại. Yêu cầu plugin thanh gỡ lỗi.
Codex có Tham chiếu hành động và Tham chiếu bộ lọc . Adam Brown đã tạo ra một cơ sở dữ liệu hook có tất cả các hook trong mã nguồn và thêm tài liệu từ các trang wiki, thông tin phiên bản và các liên kết đến mã nguồn. Bạn có thể cải thiện nó bằng cách viết tài liệu trong Codex.
Tất nhiên, một số hook là động, tùy thuộc vào dữ liệu khác. Lấy wp_transition_post_status
chức năng:
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);
}
Nếu bạn đăng ký loại bài đăng tùy chỉnh event
và trạng thái bài đăng tùy chỉnh cancelled
, bạn sẽ có một cancelled_event
hook hành động.
Mặc dù nguyên thủy, có lẽ mã plugin này có thể giúp đỡ? Chuyển "add_action" bằng "add_filter" nếu bạn muốn xem các bộ lọc thay thế. Tải plugin và sau đó làm mới trang chủ của trang web. Sau khi tải, việc tắt kích hoạt là một vấn đề nghiêm trọng, vì vậy chỉ cần đổi tên tệp plugin trong thư mục plugin và làm mới lại trang web - nó sẽ tự động hủy kích hoạt. Tôi đã sử dụng thủ thuật này nhiều lần để khắc phục sự cố hoặc tìm một nơi mà tôi có thể chèn một cái gì đó.
<?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;
}
Tôi sử dụng cái này để tìm thứ tự của móc. Để có được sự filters
thay đổi chỉ add_action
để 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');
Vì @kaiser đề nghị không chỉ đăng các liên kết mà tôi đang cải thiện nó. nhưng không thể sử dụng toàn bộ mã ở đây vì vậy tôi đang sử dụng một vài hình ảnh ở đây để giải thích rằng làm thế nào nó có một danh sách đầy đủ cho các hook WordPress với mô tả từng cái. bạn có thể tìm thấy nó ở đây cho hook , class , function , plugin ,
để mô tả từng
Bạn chỉ có thể sử dụng plugin theo dõi truy vấn: https://wordpress.org/plugins/query-monitor/