pbearne
  • 0
Новичок

Где найти список хуков WordPress?

  • 0

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

Изменить: плагин указан здесь.

Share
  1. Это мой сайт, на который я ищу информацию о хуках… База данных хуков WordPress

    • 0
  2. @Arlen: Как отмечает Кейт С. , список хуков Адама Брауна является де -факто ресурсом хуков для WordPress. Однако он не идеален:

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

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

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

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

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

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

    http://example.com?instrument=хуки

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

    <?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;
            }
        }
    }
    
    • 0
  3. Плагин

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

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

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

    • 0
  5. Хотя и примитивно, возможно, этот код плагина может помочь? Переключите «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;
    }
    
    • 0
  6. Я использую это, чтобы найти порядок хуков. Чтобы получить 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
  7. Как предлагает @kaiser, не публикуйте только ссылки, которые я улучшаю. но здесь невозможно использовать весь код, поэтому я использую здесь несколько изображений, чтобы объяснить, как у него есть полный список хуков WordPress с описанием каждого. здесь вы можете найти хуки, классы, функции, плагины,введите описание изображения здесь

    описать каждыйвведите описание изображения здесь

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

    введите описание изображения здесь

    • 0

Оставить ответ

You must login to add an answer.