কোন ক্রিয়াকলাপ / ফিল্টারের সাথে কী কী ক্রিয়াকলাপগুলি আঁকানো হয় তা কীভাবে জানবেন?


32

কোনও নির্দিষ্ট হুককে কী কী ফাংশনগুলি আটকানো হয় তা জানার কোনও উপায় আছে? উদাহরণস্বরূপ যদি আমি জানতে চাই যে কোন ফাংশনগুলি wp_headহুকের সাথে আবদ্ধ হয় ।


আমি যথেষ্ট নিশ্চিত যে এটি আপনার যা চায় তা করে: @ রাস্টের ডিবাগ ওয়ার্ডপ্রেস হুক
আনু

একটি অনুরূপ প্রশ্নের এই উত্তরটি দেখুন এবং আরও সুনির্দিষ্টভাবে মাইকের দ্বারা পোস্ট করা প্লাগইন।
বেন্টারনেট

1
আমি ভুল হতে পারি, কিন্তু এটি কি কেবল হুকের একটি বিস্তৃত তালিকা তৈরি করে না? আমি যেভাবে প্রশ্নটি পড়ছি তা হুকের সাথে কী কী ফাংশন সংযুক্ত রয়েছে তা তিনি জানতে চান।
আনু

আংশিক ভুল, তিনি বলেছিলেন "উদাহরণস্বরূপ ডাব্লুপিএডকে কী সংকুচিত করা হয়েছে", সুতরাং এটির একটি সম্পূর্ণ তালিকা কেবল একটি হুকই নয়।
বেন্টারনেট

ছেলেঃ আমি তা দেখতে ফাংশন একটি নির্দিষ্ট হুক সংযুক্ত হয় চেয়েছিলেন, সুতরাং উদাহরণস্বরূপ যদি 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 পছন্দ করতাম))
অ্যাকসর

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

আমি @ ব্যবহারকারীর কাছ থেকে উত্তর 2323530 খুঁজে পেয়েছি, তবে এটি কখনও কখনও বন্ধ হয়ে যেতে পারে এই বিষয়টি বিবেচনা করে নি। এখানে আমার আরও ভার্বোজ (এবং কুরুচিপূর্ণ) সংস্করণ রয়েছে:

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");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.