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

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

Править: Плагин перечислен здесь.

48
13.04.2017, 15:37
5 ответов

@Arlen: Как Keith S указывает, что Список Adam Brown Рычагов является defacto ресурсом рычагов для WordPress. Однако это не прекрасно:

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

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

Я играл с этой идеей некоторое время, таким образом, Ваш вопрос инициировал меня для записи плагина, названного "Инструментальные Рычаги для WordPress". Можно найти полный источник ниже снимка экрана, и можете, можно также загрузить его с сути здесь.

Таким образом, вот снимок экрана того, на что похож инструментарий:

Screenshot of Instrument Hooks for WordPress Plugin in action

Вы инициировали инструментарий при помощи параметра 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;
        }
    }
}
45
19.02.2020, 21:53
  • 1
    @Mike: Быстрый вопрос, почему Вы храните это в базу данных вместо памяти или временного потока? –  hakre 18.08.2010, 11:31

Кодекс имеет Ссылку Действия и Ссылку Фильтра. Adam Brown создал базу данных рычага, которая имеет все рычаги в исходном коде и добавляет документацию от страниц Wiki, информации о версии и ссылок на исходный код. Можно улучшить его путем записи документации в Кодексе.

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

2
19.02.2020, 21:53

Хотя примитивный, возможно, этот сменный код может помочь? Переключите "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;
}
1
19.02.2020, 21:53
  • 1
    Это не может быть симпатично, но это мог бы на самом деле быть самый быстрый и самый легкий путь в некоторых сценариях (я часто использую “printf отладку” для фиксации небольших вещей в маленьком, Notepad+command-line проекты вместо того, чтобы использовать целый IDE). –  Synetech 28.07.2013, 20:02

Плагин Рычагов Действия Панели отладки

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

4
19.02.2020, 21:53

Я использую thiss для нахождения порядка рычагов. Добираться 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');
0
19.02.2020, 21:53

Теги

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