मुझे वर्डप्रेस हुक की सूची कहां मिल सकती है?


48

मुझे सभी वर्डप्रेस हुक और ओवर-रिडेबल फ़ंक्शन (प्लग करने योग्य, स्क्रिप्ट करने योग्य, आदि) की सूची कहां मिल सकती है?

संपादित करें: प्लगिन यहां सूचीबद्ध है


यह मेरी जाने की साइट है जब मैं हुक जानकारी की तलाश में हूँ ... वर्डप्रेस हुक डेटाबेस
कीथ एस।

1
वर्डप्रेस ने आखिरकार अपने सभी हुक को प्रलेखित किया है । : D आप वहां ब्राउज़ और खोज कर सकते हैं।
सैम

जवाबों:


45

@Arlen: जैसा कि कीथ एस बताते हैं कि एडम ब्राउन की हुक की सूची वर्डप्रेस के लिए हुक का डिफैक्टो संसाधन है। हालांकि, यह सही नहीं है:

  • जब वे बुलाए जाते हैं तो यह हुक नहीं दिखाता है,
  • यह फ़ाइल का नाम या लाइन नंबर प्रदान नहीं करता है, जहाँ,
  • यह पारित किए गए कई तर्क प्रदान नहीं करता है,
  • यह पूरी सूची नहीं है क्योंकि कुछ हुक गतिशील रूप से कहे जा सकते हैं,
  • और यह प्लगइन्स से हुक नहीं दिखाता है।

इसलिए जब एडम की सूची विशेष रूप से समझने के लिए एक महान संसाधन है जब हुक को ऐतिहासिक रूप से जोड़ा गया था तो यह लगभग उतना उपयोगी नहीं है जैसे कि आप हुक को अपनी साइट पर किसी भी पृष्ठ पर लिख सकते हैं।

मैं इस विचार के साथ थोड़ी देर के लिए रहा हूँ इसलिए आपके प्रश्न ने मुझे " वर्डप्रेस के लिए इंस्ट्रूमेंट हुक " नामक एक प्लगइन लिखने के लिए प्रेरित किया । आप स्क्रीन शॉट के नीचे पूर्ण स्रोत पा सकते हैं और आप इसे यहाँ से डाउनलोड भी कर सकते हैं

तो यहां एक स्क्रीनशॉट है कि इंस्ट्रूमेंटेशन कैसा दिखता है:

वर्डप्रेस प्लगइन के लिए एक्शन में हुक के स्क्रीनशॉट

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

मैं ... यह उन चीजों में से एक है जो आप केवल एक या दो बार उपयोग कर सकते हैं, लेकिन जब आप इसका उपयोग करते हैं, तो आप इसके लिए सितारों का धन्यवाद करते हैं :)
कीथ एस।

1
माइक, यह बहुत अच्छा है! लेकिन आप वास्तव में समझने के लिए क्या सुझाएंगे कि प्रत्येक फ़िल्टर / क्रिया क्या करती है? क्या कोई फ़ाइल है जहाँ उन सभी को उनकी 'गतिविधि' के साथ सूचीबद्ध किया गया है? धन्यवाद!
अमित

1
@ एमिट - हां, यह कठिन सवाल है। :) पूछने के लिए धन्यवाद। दुर्भाग्य से, मैं किसी भी तरह से स्वचालित करने के लिए नहीं देख सकता हूं, जैसे मैंने ऊपर हुक को सूचीबद्ध करने के लिए किया था, इसलिए मेरे पास आपके लिए एक सही जवाब नहीं है। आदर्श रूप से प्रत्येक हुक के लिए कोई व्यक्ति एक महान ब्लॉग पोस्ट लिखेगा (या यहां एक प्रश्न पूछें जिसे बहुत अच्छा उत्तर मिला) और फिर "Google यह" आपका उत्तर होगा। जैसा कि, मैं एक डिबगिंग आईडीई (PhPStorm + XDEBUG, US $ 49 तक सितंबर 2010 तक) का उपयोग करता हूं और मैं ब्रेकप्वाइंट सेट करता हूं और निष्पादन कोड के माध्यम से पता लगाता हूं। हालांकि एक बेहतर तरीका हो सकता है, और अगर किसी और ने सोचा है तो कृपया हमें बताएं!
मिकशिंकेल

वाह, यह सबसे अच्छा जवाब है जो मैंने कभी देखा है। यहाँ वैसे भी।
अरलेन बीलर

2
@ माइक: क्विक क्वेश्चन, आप मेमोरी या अस्थाई स्ट्रीम के बजाय डेटाबेस में स्टोर क्यों करते हैं?
हकरे

4

डिबग बार एक्शन हुक प्लगइन

वर्तमान अनुरोध के लिए निकाल दिए गए कार्यों की एक सूची प्रदर्शित करता है। डिबग बार प्लगइन की आवश्यकता है।



2

कोडेक्स में एक एक्शन संदर्भ और एक फ़िल्टर संदर्भ होता है । एडम ब्राउन ने एक हुक डेटाबेस बनाया , जिसमें स्रोत कोड के सभी हुक हैं, और विकि पृष्ठों, संस्करण जानकारी और स्रोत कोड के लिंक से प्रलेखन जोड़ता है। आप इसे कोडेक्स में दस्तावेज़ लिखकर सुधार सकते हैं।

बेशक, कुछ हुक गतिशील हैं, अन्य डेटा पर निर्भर करता है। 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 पृष्ठों का संयोजन नहीं है, इसमें वर्डप्रेस सूचीबद्ध हर एक कार्रवाई और फ़िल्टर है। या कि तुम क्या मतलब नहीं है।
Arlen Beiler

@Arlen: हाँ वास्तव में, मैंने इसे फिर से लिखा है ताकि यह अधिक स्पष्ट हो।
Jan Fabry

1

हालांकि आदिम, शायद यह प्लगइन कोड मदद कर सकता है? यदि आप इसके बजाय फ़िल्टर देखना चाहते हैं, तो "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;
}

यह बहुत सुंदर नहीं हो सकता है, लेकिन यह वास्तव में कुछ परिदृश्यों में सबसे तेज और सबसे आसान तरीका हो सकता है (मैं अक्सर पूरे आईडीई का उपयोग करने के बजाय छोटे, नोटपैड + कमांड-लाइन परियोजनाओं में छोटी चीजों को ठीक करने के लिए "प्रिंटफ डिबगिंग" का उपयोग करता हूं)।
सिनेटेक

0

मैं हुक का क्रम खोजने के लिए इसका उपयोग करता हूं। करने के लिए 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

जैसा कि @kaiser का सुझाव है कि केवल लिंक ही पोस्ट न करें जो मैं इसे सुधार रहा हूं। लेकिन यहां पूरे कोड का उपयोग करना संभव नहीं है, इसलिए मैं यह बताने के लिए यहां कुछ छवि का उपयोग कर रहा हूं कि प्रत्येक के लिए वर्डप्रेस हुक की पूरी सूची कैसे है। आप इसे यहां हुक , कक्षाएं , फ़ंक्शंस , प्लगइन्स के लिए पा सकते हैं , यहाँ छवि विवरण दर्ज करें

प्रत्येक का वर्णन करने के लिए यहाँ छवि विवरण दर्ज करें


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.