कैसे पता चलेगा कि किसी कार्य / फ़िल्टर के लिए कौन से कार्य हैं?


32

क्या यह जानने का एक तरीका है कि किसी विशेष हुक से क्या कार्य किए जाते हैं? उदाहरण के लिए अगर मैं जानना चाहता हूं कि wp_headहुक के लिए कौन से कार्य हैं ।


: मैं बहुत यकीन है कि यह तुम क्या चाहते है कि कर रहा हूँ @ Rarst के डीबग वर्डप्रेस हुक
अनु

इसी तरह के प्रश्न के उत्तर पर गौर करें और विशेष रूप से माइक द्वारा वहां तैनात प्लगइन।
बेनटर्नट

1
मैं गलत हो सकता है, लेकिन यह सिर्फ हुक की एक व्यापक सूची का उत्पादन नहीं करता है? जिस तरह से मैं प्रश्न पढ़ रहा हूं, वह यह जानना चाहता है कि हुक में कौन से कार्य जुड़े हुए हैं।
अनु

आंशिक रूप से गलत, उन्होंने कहा "उदाहरण के लिए wp_head के लिए क्या लिखा है", इसलिए इसकी पूरी सूची न केवल एक हुक है।
बैनटर्नेट

दरअसल, मैं देखना क्या कार्यों के लिए एक विशेष हुक से जुड़े होते हैं चाहता था, इसलिए उदाहरण के लिए यदि 10 कार्यों के शौकीन हैं wp_headतो मैं उन 10 सूचीबद्ध करने के लिए करना चाहते हैं
जेवियर Villanueva

जवाबों:


16

वैश्विक चर में देखें $wp_filter। एक उदाहरण के लिए सभी टिप्पणी फिल्टर की सूची के लिए मेरा प्लगइन देखें :

<?php
/*
Plugin Name: List Comment Filters
Description: List all comment filters on wp_footer
Version:     1.1
Author:      Fuxia Scholz
License:     GPL v2
*/

add_action( 'wp_footer', 'list_comment_filters' );

function list_comment_filters()
{
    global $wp_filter;

    $comment_filters = array ();
    $h1  = '<h1>Current Comment Filters</h1>';
    $out = '';
    $toc = '<ul>';

    foreach ( $wp_filter as $key => $val )
    {
        if ( FALSE !== strpos( $key, 'comment' ) )
        {
            $comment_filters[$key][] = var_export( $val, TRUE );
        }
    }

    foreach ( $comment_filters as $name => $arr_vals )
    {
        $out .= "<h2 id=$name>$name</h2><pre>" . implode( "\n\n", $arr_vals ) . '</pre>';
        $toc .= "<li><a href='#$name'>$name</a></li>";
    }

    print "$h1$toc</ul>$out";
}

के लिए नमूना उत्पादन pre_comment_author_email:

array (
  10 => 
  array (
    'trim' => 
    array (
      'function' => 'trim',
      'accepted_args' => 1,
    ),
    'sanitize_email' => 
    array (
      'function' => 'sanitize_email',
      'accepted_args' => 1,
    ),
    'wp_filter_kses' => 
    array (
      'function' => 'wp_filter_kses',
      'accepted_args' => 1,
    ),
  ),
)

महान छोटे समारोह टोकोको, यह साझा करने के लिए धन्यवाद। मैं शटडाउन कार्रवाई में एक विषय के लिए भरी हुई सभी कार्रवाई हुक का मूल्यांकन करने के लिए इसका उपयोग कर रहा हूं।
केविन लेरी

11

किसी विशेष एक्शन हुक से जुड़े कार्यों या कार्यों की सूची देखने के लिए आप निम्नलिखित कोड का उपयोग कर सकते हैं।

global $wp_filter;
echo '<pre>';
var_dump( $wp_filter['wp_head'] );
echo '</pre>';

5

डिबग-प्रयोजनों के लिए एक सरल

global $wp_filter;
echo "<pre>" . print_r($wp_filter, true) . "</pre>";

यह करना होगा ...


1
मेरे मामले में, कॉलिंग var_dump($wp_filter)ने बहुत अधिक उत्पादन किया। मैंने उपयोग करना पसंद किया var_dump($wp_filter["<action name>"])। (वही जाता है print_r- मैं व्यक्तिगत रूप से var_dump को प्राथमिकता देता हूं।)
Acsor

4

यह फिल्टर की अधिक पठनीय सूची दिखाता है

function print_filters_for( $hook = '' ) {
    global $wp_filter;
    if( empty( $hook ) || !isset( $wp_filter[$hook] ) ) return;

    $ret='';
    foreach($wp_filter[$hook] as $priority => $realhook){
        foreach($realhook as $hook_k => $hook_v){
            $hook_echo=(is_array($hook_v['function'])?get_class($hook_v['function'][0]).':'.$hook_v['function'][1]:$hook_v['function']);
            $ret.=  "\n$priority $hook_echo";
        }

    }
     return $ret;
}

0

मुझे @ user3623530 से उत्तर उपयोगी मिला, लेकिन इस तथ्य को ध्यान में नहीं रखा कि कभी-कभी क्लोजर को झुका दिया जा सकता है। यहाँ मेरी अधिक क्रिया (और बदसूरत) संस्करण है:

if( isset($wp_filter[$filterName]) ){
    foreach( $wp_filter[$filterName] as $priority => $hooks){
        foreach ($hooks as $hook_k => $hook_v) {
            $hook_echo=(is_array($hook_v['function'])?get_class($hook_v['function'][0]).':'.$hook_v['function'][1]:$hook_v['function']);
            if(is_object($hook_echo) && ($hook_echo instanceof Closure)){
                $hook_echo="closure";
            }
            error_log($filterName." HOOKED (".serialize($priority)."): ".serialize($hook_k)."".serialize($hook_echo));
        }
    }
} else {
    error_log($filterName." NO FILTERS HOOKED");
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.