it-swarm-vi.tech

Tôi có thể tìm danh sách các móc WordPress ở đâu?

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 là được liệt kê ở đây .

46
Arlen Beiler

@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:

  • Nó không hiển thị các móc theo thứ tự khi chúng được gọi,
  • Nó không cung cấp tên tệp hoặc số dòng nơi được gọi,
  • Nó không cung cấp một số đối số được thông qua,
  • Đây không phải là một danh sách đầy đủ vì một số hook có thể được gọi một cách linh hoạt,
  • Và nó không hiển thị móc từ plugin.

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 hook trên bất kỳ trang nào trên trang web của riêng bạn.

Tôi đã chơi với ý tưởng này được một thời gian nên câu hỏi của bạn đã kích hoạt tôi viết một plugin được gọi là "Công cụ móc cho WordPress." Bạn có thể tìm thấynguồ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ừ Gist 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:

Screenshot of Instrument Hooks for WordPress Plugin in action

Bạn kích hoạt thiết bị bằng cách sử dụng tham số URL instrument=hooks, tức là:

http://example.com?instrument=hooks

Và như đã hứa, đây là nguồn (hoặc tải xuống tại đâ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;
        }
    }
}
44
MikeSchinkel

Plugin Debug Bar Action Hook

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.

  

4
sam

Codex có Tham chiếu hành độngTham chiếu bộ lọc . Adam Brown đã tạo 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 hàm wp_transition_post_status :

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 hook hành động cancelled_event.

2
Jan Fabry

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;
}
1
Volomike

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 , hàm , pluginenter image description here

để mô tả từng enter image description here

0
sohan

Tôi sử dụng để tìm thứ tự của móc. Để có được filters, chỉ cần thay đổi add_action thành 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