আপনি যা চান তা করতে আমার জানা কোনও স্ক্রিপ্ট বা প্লাগইন নেই। আপনি যেমনটি বলেছেন, এখানে স্ক্রিপ্ট রয়েছে ( এমনকি বিশ্বব্যাপী ভেরিয়েবল ) যা আপনি বর্তমানে ফিল্টার এবং ক্রিয়াকলাপগুলি মুদ্রণ করতে ব্যবহার করতে পারেন।
সুপ্ত ফিল্টার এবং ক্রিয়া হিসাবে, আমি দুটি খুব বেসিক ফাংশন ( এখানে এবং সেখানে কিছু সহায়তার সাথে ) লিখেছি যা কোনও ফাইলে সমস্ত apply_filters
এবং do_action
দৃষ্টান্ত খুঁজে পায় এবং তারপরে এটি মুদ্রণ করে
বুনিয়াদি
আমরা ডিরেক্টরিতে সমস্ত পিএইচপি ফাইল পেতে RecursiveDirectoryIterator
, RecursiveIteratorIterator
এবং RegexIterator
পিএইচপি ক্লাস ব্যবহার করব । উদাহরণস্বরূপ, আমার লোকালহোস্টে, আমি ব্যবহার করেছি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-র কোডের সাথে, উত্স কোডটিতে উল্লিখিত ফাইলটিতে বলা এবং লাইনের মতো হওয়া সহজ এবং তারপরে ফিল্টার / ক্রিয়াকলাপের সমস্ত বৈধ প্যারামিটার মানগুলিও পান, গুরুত্বপূর্ণভাবে, ফাংশনটি এবং আরও প্রসঙ্গ প্রাপ্ত করুন যাতে ফিল্টার / ক্রিয়া ব্যবহৃত হয়