it-swarm-tr.com

WordPress kancalarının listesini nereden bulabilirim?

Tüm WordPress kancalarının ve aşırı çekilebilir işlevlerin (takılabilir, kodlanabilir, vb.) Bir listesini nerede bulabilirim?

Edit: Eklenti burada listelenmiştir .

46
Arlen Beiler

@Arlen: Keith S'nin işaret ettiği gibi Adam Brown Kanca Listesi WordPress için kancaların defacto kaynağıdır. Ancak, mükemmel değil:

  • Kancaları ne zaman arandıklarına göre göstermez.
  • Çalıştığı yerde dosya adı veya satır numarası sağlamaz,
  • Bir dizi argüman sağlamaz,
  • Tam bir liste değil çünkü bazı kancalar dinamik olarak adlandırılabilir,
  • Ve bu eklentileri gelen kanca göstermiyor.

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 fikirle oynuyorum, bu yüzden sorunuz bana plugin called "WordPress için Enstrüman Kancaları" yazmam için beni tetikledi.aşağıda tam kaynakekran görüntüsünü bulabilir ve ayrıca Gist'ten indirebilirsiniz - burada.

İşte enstrümantasyonun neye benzediğinin ekran görüntüsü:

Screenshot of Instrument Hooks for WordPress Plugin in action

Enstrümantasyonu, instrument=hooks URL parametresini kullanarak tetiklersiniz, yani:

http://example.com?instrument=hooks

Ve söz verildiği gibi, işte kaynak (veya indirin buradan .):

<?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

Hata Ayıklama Çubuğu Eylem Hooks plugin

Geçerli istek için başlatılan eylemlerin bir listesini görüntüler. Hata ayıklama çubuğu eklentisini gerektirir.

  

4
sam

Codex'te bir İşlem Referansı ve a Filtre Referansı bulunur. Adam Brown bir hook veritabanı yarattı tüm kaynak kodunda kancalar vardı ve belgeleri wiki sayfalarından, sürüm bilgilerinden ve kaynak koduna bağlantılardan ekler. Kodeks içine belgeler yazarak geliştirebilirsiniz.

Tabii ki, bazı kancalar diğer verilere bağlı olarak dinamiktir. wp_transition_post_status işlevini kullanın:

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 cancelled kaydederseniz, bir cancelled_event eylem kancasına sahip olursunuz.

2
Jan Fabry

İ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ı birçok şeyi, sorunları gidermek ya da bir şeyler ekleyebileceğim bir yer bulmak için 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;
}
1
Volomike

@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. kancalar , sınıflar , fonksiyonlar , eklentiler için burada bulabilirsiniz enter image description here

her birini tarif etmek enter image description here

0
sohan

Bunu kancaların sırasını bulmak için kullanıyorum. filters işlevini almak için add_action öğesini add_filter olarak değiştirin.

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