Где я могу найти список крючков WordPress?

Где я могу найти список всех перехватов WordPress и перегружаемых функций (подключаемых, сценариев и т. д.)?

Изменить: Плагин , указанный здесь .

46 голосов | спросил Arlen Beiler 13 PM00000070000002931 2010, 19:15:29

6 ответов


42

@Arlen: Поскольку Keith S указывает Список крючков Адама Брауна , является ресурсом defacto для перехватов для WordPress. Однако это не идеально:

  • Он не показывает крючки в порядке их вызова,
  • Он не предоставляет имя файла или номер строки, где вызывается,
  • Он не предоставляет количество переданных аргументов,
  • Это не полный список, потому что некоторые крючки можно назвать динамически,
  • И он не показывает крючки из плагинов.

Таким образом, в то время как список Адама - отличный ресурс, особенно для понимания того, когда исторически добавлены крючки, он не так полезен, как если бы вы были в состоянии зацепить крючки на любой странице на своем собственном сайте.

Я давно искал эту идею, поэтому ваш вопрос заставил меня написать плагин , называемый Instrument Hooks для WordPress «. Вы можете найти полный источник ниже , и вы также можете загрузить его из gist здесь .

Итак, вот скриншот того, что выглядит на экране:

Снимок экрана с инструментальными крючками для плагина WordPress в действии

Вы запускаете инструментарий с помощью параметра URL instrument=hooks, то есть:

  

http://example.com?instrument=hooks

И как и было обещано, вот источник (или скачайте его здесь .):

<?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;
        }
    }
}
ответил MikeSchinkel 14 AM00000060000005431 2010, 06:09:54
3

Плагин «Отладка бара Action Action»

  

Отображает список действий, выполненных для текущего запроса. Требуется плагин debug bar.

ответил sam 23 Mayam12 2012, 00:52:41
2

В кодексе есть ссылка на действие и Ссылка на фильтр . Адам Браун создал базу данных крючков , которая имеет все перехваты в исходном коде и добавляет документацию со страниц вики , информацию о версии и ссылки на исходный код. Вы можете улучшить его, написав документацию в Codex.

Конечно, некоторые крючки являются динамическими, в зависимости от других данных. Возьмите 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);
}

Если вы зарегистрируете персонализированный тип сообщения event и пользовательский пост-статус cancelled, у вас будет отменить код_объекта.

ответил Jan Fabry 13 PM00000070000001831 2010, 19:29:18
1

Хотя примитивный, возможно, этот код плагина может помочь? Включите «add_action» с «add_filter», если вы хотите посмотреть на фильтры вместо этого. Загрузите плагин, а затем обновите домашнюю страницу сайта. После загрузки очень тяжело деактивировать, поэтому просто переименуйте файл плагина в папку плагинов и снова обновите сайт - он автоматически отключится. Я много раз использовал этот трюк для устранения неполадок или поиска места, где я могу что-то вставить.

<?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;
}
ответил Volomike 19 AM000000120000003131 2010, 00:34:31
0

Я использую это, чтобы найти порядок крючков. Чтобы получить фильтры filters, просто измените 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');
ответил Wadde 29 J000000Tuesday14 2014, 12:37:07
0

Поскольку @kaiser предлагает не отправлять только ссылки, я улучшаю его. но здесь невозможно использовать весь код, поэтому я использую несколько изображений здесь, чтобы объяснить, как он имеет полный список для крючков WordPress с описанием каждого. вы можете найти его здесь для перехватчиков , classes , функции , плагины , введите описание изображения здесь>> </p>

<p> для описания каждого
<img src =

ответил sohan 4 J0000006Europe/Moscow 2015, 13:09:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132