Вопрос

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

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

Это было полезно?

Решение

@Arlen: как указывает Кит С. Список крючков Адама Брауна является ресурсом Defacto крючков для WordPress. Однако это не идеально:

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

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

Я какое -то время играл с этой идеей, поэтому ваш вопрос заставил меня написать плагин называется "Инструментальные крючки для WordPress. »Вы можете найти Полный источник ниже снимок экрана и вы можете также Скачать его из GIST здесь.

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

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

Другие советы

Плагин отладчика отладки

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

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

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

Несмотря на то, что этот код плагина может помочь примитивный, возможно, может помочь? Переключите «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;
}

Я использую это, чтобы найти порядок крючков. Чтобы получить 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');

Как предлагает @kaiser, не публикуйте только ссылки, я улучшаю их. Но здесь невозможно использовать весь код, поэтому я использую здесь несколько изображений, чтобы объяснить, как он имеет полный список для крючков WordPress с описанием каждого из них. Вы можете найти это здесь для крючки, классы, функции, плагины, enter image description here

Чтобы описать каждыйenter image description here

Вы можете просто использовать плагин монитора запросов: https://wordpress.org/plugins/query-monitor/

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top