it-swarm-ko.tech

WordPress 후크 목록을 어디에서 찾을 수 있습니까?

모든 WordPress 후크와 over-ridable 기능 (플러그 가능, 스크립팅 가능 등)의 목록을 어디에서 찾을 수 있습니까?

편집 : 플러그인이 여기에 나열되어 있습니다 .

46
Arlen Beiler

@Arlen : Keith S가 지적한 것처럼 Adam Brown의 후크 목록 은 WordPress에 대한 후크의 사실상의 자원입니다. 그러나 완벽하지는 않습니다.

  • 호출되는 순서대로 후크를 표시하지 않습니다.
  • 호출 된 파일 이름이나 줄 번호는 제공하지 않습니다.
  • 전달 된 많은 인수를 제공하지는 않습니다.
  • 일부 후크는 동적으로 호출 될 수 있기 때문에 전체 목록이 아닙니다.
  • 그리고 플러그인의 후크를 표시하지 않습니다.

따라서 Adam의 목록은 특히 과거에 후크가 추가 된 시점을 이해하는 데 유용한 리소스이지만, 사이트의 특정 페이지에서 후크를 계측 할 수있는 것만 큼 유용하지는 않습니다.

나는 잠시 동안이 아이디어를 가지고 놀았으므로 귀하의 질문으로 인해 " Instrument Hooks for WordPress plugin " 스크린 샷 full source below 을 찾을 수도 있고 Gist에서 다운로드 here.

인스 트루먼 테이션의 스크린 샷은 다음과 같습니다.

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
MikeSchinkel

디버그 바 액션 Hooks Plugin

현재 요청에 대해 실행 된 작업 목록을 표시합니다. 디버그 바 플러그인이 필요합니다.

  

4
sam

Codex에는 작업 참조필터 참조 이 있습니다. Adam Brown은 소스 코드에 모든 후크가있는 후크 데이터베이스 를 만들고 wiki 페이지의 설명서, 버전 정보 및 소스 코드에 대한 링크를 추가합니다. 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을 등록하면 cancelled_event 조치 후크가 생깁니다.

2
Jan Fabry

원시적인데, 아마도이 플러그인 코드가 도움이 될까요? 대신 필터를보고 싶다면 "add_filter"로 "add_action"을 전환하십시오. 플러그인을로드 한 다음 사이트의 홈페이지를 새로 고침하십시오. 일단로드되면, 비활성화하는 것이 심각한 고통입니다. 그래서 플러그인 폴더 아래의 플러그인 파일의 이름을 바꾸고 사이트를 다시 새로 고치십시오. 자동으로 비활성화됩니다. 나는이 트릭을 여러 번 사용하여 문제를 해결하거나 뭔가를 삽입 할 수있는 장소를 찾았습니다.

<?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
Volomike

@ 카이저는 링크 만 게시하지 말고 나는 그것을 개선하고 있습니다. 하지만 전체 코드를 여기에서 사용하는 것은 불가능합니다. 그래서 여기에 몇 가지 이미지를 사용하여 각각 WordPress 후크에 대한 전체 목록을 설명하는 방법을 설명합니다. hooks , classes , functions , plugins , 여기에서 찾을 수 있습니다. enter image description here

각각을 기술하기 enter image description here

0
sohan

쿼리 모니터 플러그인을 사용할 수 있습니다. https://wordpress.org/plugins/query-monitor/

enter image description here

0
Den Pat

나는 이것을 사용하여 갈고리의 순서를 찾는다. filters을 얻으려면 add_actionadd_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
Wadde