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


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

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

Author: Community, 2010-08-13

7 answers

@Arlen: Как указывает Кит С. Список крючков Адама Брауна является фактическим ресурсом крючков для 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;
        }
    }
}
 45
Author: MikeSchinkel, 2010-08-14 02:09:54

Плагин крючков действий панели отладки

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

 5
Author: sam, 2017-03-09 18:04:21

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

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

 2
Author: Jan Fabry, 2010-08-13 18:56:00

Хотя и примитивный, возможно, этот код плагина может помочь? Переключите "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
Author: Volomike, 2010-08-18 20:34:31

Я использую это, чтобы найти порядок крючков. Чтобы получить 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
Author: Wadde, 2014-07-29 08:37:07

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

Для описания каждого enter image description here

 0
Author: sohan, 2015-06-04 10:09:40

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

enter image description here

 0
Author: Den Pat, 2019-08-12 05:54:00