कोई स्क्रिप्ट या प्लगइन नहीं है जो मुझे पता है कि आप क्या चाहते हैं। जैसा कि आपने बताया है, स्क्रिप्ट्स ( यहां तक कि वैश्विक चर ) हैं जिनका उपयोग आप वर्तमान में उपयोग किए जा रहे फ़िल्टर और कार्यों को प्रिंट करने के लिए कर सकते हैं।
निष्क्रिय फ़िल्टर और कार्यों के लिए, मैंने दो बहुत ही बुनियादी कार्य लिखे हैं ( कुछ मदद यहाँ और वहाँ के साथ ) जो एक फ़ाइल में सभी apply_filters
और do_action
उदाहरणों को ढूँढता है और फिर प्रिंट करता है
मूल बातें
हम का उपयोग करेगा RecursiveDirectoryIterator
, RecursiveIteratorIterator
और RegexIterator
पीएचपी कक्षाएं एक निर्देशिका में सभी PHP फ़ाइलों मिलता है। उदाहरण के लिए, मेरी लोकलहोस्ट पर, मैंने उपयोग किया हैE:\xammp\htdocs\wordpress\wp-includes
हम फिर फ़ाइलों के माध्यम से लूप करेंगे, और खोज करेंगे और वापस ( preg_match_all
) apply_filters
और सभी उदाहरणों के और do_action
। मैंने इसे कोष्ठकों के नेस्टेड उदाहरणों से मेल खाने के लिए स्थापित किया है और साथ ही apply_filters
/ do_action
पहले कोष्ठक के बीच संभव व्हाट्सएप से मिलान करने के लिए भी
हम फिर सभी फ़िल्टर और क्रियाओं के साथ एक सरणी बनाएंगे और फिर सरणी के माध्यम से लूप करेंगे और फ़ाइल नाम और फ़िल्टर और क्रियाओं को आउटपुट करेंगे। हम फिल्टर / कार्यों के बिना फ़ाइलों को छोड़ देंगे
महत्वपूर्ण लेख
यह कार्य बहुत महंगे हैं। उन्हें केवल स्थानीय परीक्षण स्थापना पर चलाएँ।
आवश्यकतानुसार कार्यों को संशोधित करें। आप आउटपुट को फ़ाइल में लिखने का निर्णय ले सकते हैं, उसके लिए एक विशेष बैकएंड पेज बना सकते हैं, विकल्प असीमित हैं
विकल्प 1
पहला विकल्प फ़ंक्शन बहुत सरल है, हम एक फ़ाइल की सामग्री का उपयोग करके स्ट्रिंग के रूप में वापस करेंगे file_get_contents
, apply_filters
/ do_action
उदाहरणों की खोज करेंगे और बस फ़ाइल नाम और फ़िल्टर / एक्शन नामों को आउटपुट करेंगे।
मैंने आसान अनुसरण करने के लिए कोड टिप्पणी की है
function get_all_filters_and_actions( $path = '' )
{
//Check if we have a path, if not, return false
if ( !$path )
return false;
// Validate and sanitize path
$path = filter_var( $path, FILTER_SANITIZE_URL );
/**
* If valiadtion fails, return false
*
* You can add an error message of something here to tell
* the user that the URL validation failed
*/
if ( !$path )
return false;
// Get each php file from the directory or URL
$dir = new RecursiveDirectoryIterator( $path );
$flat = new RecursiveIteratorIterator( $dir );
$files = new RegexIterator( $flat, '/\.php$/i' );
if ( $files ) {
$output = '';
foreach($files as $name=>$file) {
/**
* Match and return all instances of apply_filters(**) or do_action(**)
* The regex will match the following
* - Any depth of nesting of parentheses, so apply_filters( 'filter_name', parameter( 1,2 ) ) will be matched
* - Whitespaces that might exist between apply_filters or do_action and the first parentheses
*/
// Use file_get_contents to get contents of the php file
$get_file_content = file_get_contents( $file );
// Use htmlspecialchars() to avoid HTML in filters from rendering in page
$save_content = htmlspecialchars( $get_file_content );
preg_match_all( '/(apply_filters|do_action)\s*(\([^()]*(?:(?-1)[^()]*)*+\))/', $save_content, $matches );
// Build an array to hold the file name as key and apply_filters/do_action values as value
if ( $matches[0] )
$array[$name] = $matches[0];
}
foreach ( $array as $file_name=>$value ) {
$output .= '<ul>';
$output .= '<strong>File Path: ' . $file_name .'</strong></br>';
$output .= 'The following filters and/or actions are available';
foreach ( $value as $k=>$v ) {
$output .= '<li>' . $v . '</li>';
}
$output .= '</ul>';
}
return $output;
}
return false;
}
आप एक टेम्पलेट, फ्रंटएंड या बैकएंड पर अनुसरण कर सकते हैं
echo get_all_filters_and_actions( 'E:\xammp\htdocs\wordpress\wp-includes' );
यह छपेगा
विकल्प 2
यह विकल्प चलाने के लिए थोड़ा अधिक महंगा है। यह फ़ंक्शन उस पंक्ति संख्या को लौटाता है जहाँ फ़िल्टर / क्रिया पाई जा सकती है।
यहां हम file
फाइल को एक एरे में विस्फोट करने के लिए उपयोग करते हैं, फिर हम फिल्टर / एक्शन और लाइन नंबर को खोजते हैं और वापस करते हैं
function get_all_filters_and_actions2( $path = '' )
{
//Check if we have a path, if not, return false
if ( !$path )
return false;
// Validate and sanitize path
$path = filter_var( $path, FILTER_SANITIZE_URL );
/**
* If valiadtion fails, return false
*
* You can add an error message of something here to tell
* the user that the URL validation failed
*/
if ( !$path )
return false;
// Get each php file from the directory or URL
$dir = new RecursiveDirectoryIterator( $path );
$flat = new RecursiveIteratorIterator( $dir );
$files = new RegexIterator( $flat, '/\.php$/i' );
if ( $files ) {
$output = '';
$array = [];
foreach($files as $name=>$file) {
/**
* Match and return all instances of apply_filters(**) or do_action(**)
* The regex will match the following
* - Any depth of nesting of parentheses, so apply_filters( 'filter_name', parameter( 1,2 ) ) will be matched
* - Whitespaces that might exist between apply_filters or do_action and the first parentheses
*/
// Use file_get_contents to get contents of the php file
$get_file_contents = file( $file );
foreach ( $get_file_contents as $key=>$get_file_content ) {
preg_match_all( '/(apply_filters|do_action)\s*(\([^()]*(?:(?-1)[^()]*)*+\))/', $get_file_content, $matches );
if ( $matches[0] )
$array[$name][$key+1] = $matches[0];
}
}
if ( $array ) {
foreach ( $array as $file_name=>$values ) {
$output .= '<ul>';
$output .= '<strong>File Path: ' . $file_name .'</strong></br>';
$output .= 'The following filters and/or actions are available';
foreach ( $values as $line_number=>$string ) {
$whitespaces = ' ';
$output .= '<li>Line reference ' . $line_number . $whitespaces . $string[0] . '</li>';
}
$output .= '</ul>';
}
}
return $output;
}
return false;
}
आप एक टेम्पलेट, फ्रंटएंड या बैकएंड पर अनुसरण कर सकते हैं
echo get_all_filters_and_actions2( 'E:\xammp\htdocs\wordpress\wp-includes' );
यह छपेगा
संपादित करें
यह मूल रूप से उतना ही है जितना मैं बिना स्क्रिप्ट के टाइम आउट या मेमोरी से रनिंग के कर सकता हूं। विकल्प 2 में कोड के साथ, उक्त फाइल में जाना उतना ही आसान है और स्रोत कोड में लाइन कहा गया है और फिर फ़िल्टर / कार्रवाई के सभी मान्य पैरामीटर मान भी प्राप्त करें, महत्वपूर्ण रूप से, फ़ंक्शन और आगे का संदर्भ प्राप्त करें जिसमें फ़िल्टर / कार्रवाई का उपयोग किया जाता है