it-swarm-id.com

Di mana saya dapat menemukan daftar pengait WordPress?

Di mana saya dapat menemukan daftar semua pengait WordPress dan fungsi yang dapat diatasi secara berlebihan (pluggable, scriptable, dll)?

Edit: Plugin terdaftar di sini .

46
Arlen Beiler

@Arlen: Seperti yang ditunjukkan Keith S Daftar Hooks dari Adam Brown adalah sumber daya defacto dari kait untuk WordPress. Namun, itu tidak sempurna:

  • Itu tidak menunjukkan kait dalam urutan ketika mereka dipanggil,
  • Itu tidak memberikan nama file atau nomor baris di mana dipanggil,
  • Itu tidak memberikan sejumlah argumen yang berlalu,
  • Ini bukan daftar lengkap karena beberapa kait dapat disebut secara dinamis,
  • Dan itu tidak menunjukkan kait dari plugin.

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 plugin disebut "Instrument Hooks for WordPress." Anda dapat menemukansumber lengkap di bawahtangkapan layar dan Anda juga dapat mengunduhnya dari Gist sini.

Jadi, inilah tangkapan layar seperti apa instrumentasi itu:

Screenshot of Instrument Hooks for WordPress Plugin in action

Anda memicu instrumentasi dengan menggunakan parameter URL instrument=hooks, yaitu .:

http://example.com?instrument=hooks

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;
        }
    }
}
44
MikeSchinkel

Plugin Debug Bar Action Hooks

Menampilkan daftar tindakan yang dipecat untuk permintaan saat ini. Membutuhkan plugin bilah debug.

  

4
sam

Codex memiliki Referensi Tindakan dan Referensi Filter . Adam Brown membuat basis data hook yang memiliki semua kait 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 kait bersifat dinamis, tergantung pada data lainnya. Ambil fungsi 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);
}

Jika Anda mendaftarkan jenis kiriman khusus event dan status kiriman khusus cancelled, Anda akan memiliki kait tindakan cancelled_event.

2
Jan Fabry

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

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

untuk menggambarkan masing-masing enter image description here

0
sohan

Saya menggunakan ini untuk menemukan urutan kait. Untuk mendapatkan filters cukup ubah add_action menjadi 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