WordPress Plugin Development In Bangla Part-4: WordPress Filters Hook In Details

WordPress Filters Hook in Details
WordPress Filters Hook in Details

WordPress এ Filter Hook কি?

WordPress এ Filter Hook গুলি Action Hook গুলোর চেয়ে অনেক বেশি আলাদা। সাধারণত, WordPress এ নতুন কোনো ফীচার বা ফাঙ্কশনালিটি যুক্ত করার জন্য Action Hook গুলো ব্যবহৃত হয় , আর অন্যদিকে Filter Hook গুলো আপনাকে ওয়ার্ডপ্রেসের রান টাইম কোডের আউটপুট ম্যানিপুলেট বা যেকোনো পরিবর্তনের সুযোগ সৃষ্টি করে। আরো সহজে বলা যায় Action Hook গুলি আপনাকে নতুন ফীচার বা ফাঙ্কশনালিটি যুক্ত করতে সাহায্য করে, আর filter Hook গুলো আপনাকে Action Hook দিয়ে তৈরী ফীচার বা ফাঙ্কশনালিটি গুলো পরিবর্তন করতে সাহায্য করবে। এক কোথায় আপনার Action Hook এর Output কে “filter” করবে।

ওয়ার্ডপ্রেসে Filter hook গুলো নিয়ে কাজ করার জন্য আপনাকে কয়েকটি ফাঙ্কশন সম্পর্কে স্পষ্ট ধারণা থাকতে হবে। এর মধ্যে অন্যতম দুটি ফাঙ্কশন হচ্ছে add_filter() এবং apply_filters() function দুটি। চলুন প্রথমে এই দুটি ফাঙ্কশন নিয়ে আলোচনা করা যাক।

https://blog.w3programmers.com/professional-wordpress-plugin-development-beginning-to-advance/

apply_filters() vs add_filter()

মূলতঃ ওয়ার্ডপ্রেসে যেকোনো নতুন custom filter hook রেজিস্টার করার জন্য এবং custom filter apply করার জন্য apply_filters() function টি ব্যবহৃত হয়। আরো সহজভাবে বলা যায়, প্লাগিন বা থিম ডেভেলপারের তৈরি নতুন কাস্টম filter hook কে ঝুলানোর জন্য apply_filters() function টি ব্যবহৃত হয়। আর apply_filters() function দিয়ে রেজিস্টারকৃত যেকোনো custom filter hook কে অথবা WordPress built-in যেকোনো filter hook এর জন্য , একটা callback function যুক্ত করার মাধ্যমে, WordPress Core এ হাত না দিয়ে , যেকোনো আউটপুট কে পরিবর্তন করার জন্য add_filter() function টি ব্যবহৃত হয়। উল্লেখ্য, add_filter() এবং apply_filters() function টি আপনি plugin এবং theme দুই জায়গাতেই আপনি ব্যবহার করতে পারেন। এবার চলুন প্রথমে apply_filters() ফাঙ্কশন টির সিনটেক্স দেখা যাক।

apply_filters( 
            string $tag, 
            mixed $value 
          )

#Parameters

  • $tag (string) (Required) যেই নতুন হুকে ফিল্টার apply করবেন, তার নাম।
  • $value (mixed) (Required) Filter Hook এর জন্য ভ্যালু এখানে থাকবে।

এবার আমরা add_filter() ফাঙ্কশনের syntax দেখব।

add_filter( 
          string $tag, 
          callable $function_to_add, 
          int $priority = 10, 
          int $accepted_args = 1 
         )

#Parameters

  • $tag: (string) (Required) filter (কাস্টম অথবা বিল্টইন) hook টির নাম , যার বিপরীতে আপনি একটা callback function এসাইন করবেন।
  • $function_to_add: (callable) (Required) filter hook এর বিপরীতে আপনি যেই ফাঙ্কশনটি call করবেন সেটির নাম।
  • $priority: (int) (Optional) প্রায়োরিটি সেট করবেন অর্থাৎ আপনার এই অ্যাকশন টি কখন রান করবে. যত কম নম্বর দিবেন তত আগে রান হবে , আর যত বেশি নম্বর দিবেন তত দেরিতে রান হবে। Default value: 10
  • $accepted_args: (int) (Optional) সর্বমোট কতগুলো আর্গুমেন্ট রিসিভ করবে সেটির সংখ্যা এখানে নির্ধারণ করবেন। Default value: 1

add_filter() এর ব্যবহার

প্রথমে চলুন, add_filter() ফাঙ্কশনটিকে কিভাবে theme এ ব্যবহার করা যায় , তা দেখা যাক :

ধরুন আমরা আমাদের প্রত্যেকটি পোস্টের নিচে অটোমেটিক্যালি author এর নাম যুক্ত করে দিতে চাই, তাহলে আপনাকে আপনার theme এর functions.php ফাইলে add_filter() ফাঙ্কশনে নিম্নোক্ত callback ফাঙ্কশন টি assign করে দিতে হবে। চলুন করে ফেলি।

function w3_display_author_name( $content ) {
 $content.='<p style="text-align:right"> This post is written by '. get_the_author_meta( 'display_name' ).'</p>';
 return $content;
}

add_filter( 'the_content', 'w3_display_author_name' );

এখন আপনার প্রতিটি পোস্টের শেষে নিম্নোক্ত রেজাল্ট দেখাবে।

display author name in post footer
display author name in post footer

add_filter() ফাঙ্কশন ব্যবহার করে প্লাগিন তৈরি

এতক্ষন আমরা WordPress এর add_filter() এবং ফাঙ্কশন টিকে কিভাবে আমাদের রানিং থিম এর functions.php ফাইলে ব্যবহার করা যায় সেটি দেখেছি। এখন আমরা add_filter() ফাঙ্কশনটি ব্যবহার করে এমন একটা প্লাগিন তৈরি করা শিখব, যা দিয়ে আমরা প্রত্যেকটি পোস্টে মোট কতগুলো ওয়ার্ড আছে তা পোস্টের শুরুতে প্রদর্শন করব । চলুন শুরু করা যাক:

আপনার WordPress এর wp-content ফোল্ডারে অবস্থিত plugins directory তে w3-word-count নামে একটা ফোল্ডার তৈরি করুন। এবং তৈরিকৃত w3-word-count ফোল্ডারে w3-word-count.php নামে একটা ফাইলে নিচের কোডগুলো লিখে ফেলুন :

<?php
/*
Plugin Name: W3 Word Count
Plugin URI: https://github.com/w3programmers/w3-word-count
Description: Count Words from any WordPress Post
Version: 1.0
Author: Masud Alam
Author URI: https://blog.w3programmers.com
License: GPLv2 or later
*/

function w3_word_count( $content ) {
    $content_without_html_tags = strip_tags( $content );
    $total_words      = str_word_count( $content_without_html_tags );
    $new_content      = "<p><strong>Total Number Of Words: $total_words</strong></p>";
    $new_content     .=$content;
    return $new_content;
}

add_filter( 'the_content', 'w3_word_count' );

এবার Line by Line ব্যাখ্যায় আসা যাক :

  • প্রথমতঃ লাইন নম্বর ৩ থেকে ৯ পর্যন্ত আমরা আমাদের প্লাগিন টিকে ওয়ার্ডপ্রেস এর সাথে পরিচয়ের পর্বটি শেষ করি।
  • লাইন নম্বর ১২ তে , আমরা w3_word_count() নামের আমাদের কাস্টম ফাঙ্কশনটি ডিক্লেয়ার করি। এবং প্যারামিটার হিসেবে $content কে নেই।
  • লাইন নম্বর ১৩ তে আমাদের পোস্টে যদি কোনো html tag বা অন্য কোনো ট্যাগ থাকে তা রিমুভ করার জন্য পি এইচ পি এর বিল্টইন strip_tags() ফাঙ্কশনটি ব্যবহার করি। এবং $content_without_html_tags নামক variable এ সংরক্ষণ করি।
  • লাইন নম্বর ১৪ তে আমাদের পোস্টে html tag রিমুভের পর মোট কত শব্দ আছে তা couunt করি। আর এর জন্য আমরা পি এইচ পি এর বিল্টইন str_word_counts() ফাঙ্কশনটি ব্যবহার করি, এবং $total_words ভ্যারিয়াবলে সংরক্ষণ করি।
  • লাইন নম্বর ১৫ তে আমরা $new_content variable এ “Total Number of Words” text এর সাথে $total_words variable টি concat করে দেই।
  • লাইন নম্বর ১৬ তে মূল $content এর সাথে $new_content কে concat করি এবং লাইন নম্বর ১৭ তে $new_content variable কে রিটার্ন করি।
  • সর্বশেষ ২০ নম্বর লাইনে আমরা “the_content” বিল্টইন ফিল্টার হুক দিয়ে আমরা আমাদের মূল কন্টেন্টকে ফিল্টার করি।

এখন যদি আপনি প্লাগিনটি এক্টিভেট করেন , তাহলে নিচের মতো ফলাফল দেখতে পাবেন।

total word count plugin
total word count plugin

apply_filters() এর ব্যবহার

এবার চলুন, apply_filters() ফাঙ্কশনটিকে কিভাবে theme এ ব্যবহার করা যায় , তা দেখা যাক :

উপরের add_filter() ফাঙ্কশন এর কাজ দেখতে গিয়ে আমরা WordPress এর বিল্টইন filter hook wp_content কে ব্যবহার করেছি। এখন আমরা চাইলে wp_content filter hook এর পরিবর্তে আমাদের custom filter hook কে ব্যবহার করতে পারি। আর custom filter হুক ব্যবহার করতে হলে , আমাদেরকে আগে apply_filters() function দিয়ে সেই custom filter hook এবং তার value কে theme এ ঘোষণা করে আসতে হবে। চলুন করে ফেলি।

আপনার থিম এর template ফাইল গুলোর মধ্যে যেই ফাইলে (অধিকাংশ থিম এ content.php বা content-page.php এই জাতীয় নামে ফাইলটি থাকে। ) the_content() ফাঙ্কশন টি আছে, তার নিচে নিম্নোক্ত কোডটি লিখে দিন।

	$authorName='<p style="text-align:right;color:#F0F">'."This post is written By ".get_the_author_meta('display_name').'</p>';
	echo apply_filters("display_post_author_name",$authorName);

এখন আপনার প্রতিটি পোস্টের শেষে নিম্নোক্ত রেজাল্ট দেখাবে।

display author name in post footer
display author name in post footer

add_filter() function এবং apply_filters() function দুটিকে একসাথে থিম এ ব্যবহার করা যায় তা দেখব।

এখন আমরা, add_filter() function এবং apply_filters() function দুটিকে ব্যবহার করে প্রতিটি পোস্টের Author name টি, কিভাবে প্রতিটি পোস্টের শেষে দেখানো যায় তা দেখব। চলুন শুরু করা যাক :

আপনার থিম এর template ফাইল গুলোর মধ্যে যেই ফাইলে (অধিকাংশ থিম এ content.php বা content-page.php এই জাতীয় নামে ফাইলটি থাকে। ) the_content() ফাঙ্কশন টি আছে, তার নিচে আগের লেখা কোডটি পরিবর্তন করে নিম্নোক্ত কোডটি লিখে দিন।

$authorName=get_the_author_meta('display_name');
echo apply_filters("display_post_author_name",$authorName);

লক্ষ্য করে থাকবেন , আগের বার আমরা সরাসরি ভ্যারিয়েবল এ ই css যুক্ত করে দিয়েছিলাম , এখন আমরা css এর কাজটি যুক্ত করার জন্য add_filter() function টি দিয়ে যুক্ত করব। আপনার functions.php ফাইলে নিচের কোডটি লিখে দিন।

function w3_display_author_name( $author ) {
$authorName.='<p style="text-align:right; color:#F0F"> This post is written by '. $author.'</p>';
 return $authorName;
}
add_filter( 'display_post_author_name', 'w3_display_author_name' );

এখন আপনার প্রতিটি পোস্টের শেষে নিম্নোক্ত রেজাল্ট দেখাবে।

show post author name in post footer
show post author name in post footer

https://blog.w3programmers.com/professional-wordpress-plugin-development-beginning-to-advance/

add_filter() function এবং apply_filters() function দুটিকে একসাথে প্লাগিনে ব্যবহার ।

ইতিপূর্বে , আমরা যেই W3 Word Count নামের প্লাগিনটি বানিয়েছিলাম, WordPress এর apply_filters() function টি ব্যবহার করে , আমরা সেটিকে আরো ডাইনামিক করব। বিশেষ ভাবে label এবং tag কে। চলুন দেখা যাক।

<?php
/*
Plugin Name: W3 Word Count
Plugin URI: https://github.com/w3programmers/w3-word-count
Description: Count Words from any WordPress Post
Version: 1.0
Author: Masud Alam
Author URI: https://blog.w3programmers.com
License: GPLv2 or later
Text Domain: w3-word-count
Domain Path: /languages/
*/

function w3_word_count_load_text_domain() {
    load_plugin_textdomain( 'w3-word-count', false, dirname( __FILE__ ) . "/languages" );
}

add_action( "plugins_loaded", 'w3_word_count_load_text_domain' );

function w3_word_count( $content ) {
    $content_without_html_tags = strip_tags( $content );
    $total_words      = str_word_count( $content_without_html_tags );
    $label            = __( 'Total Number of Words', 'w3-word-count' );
    $label            = apply_filters( "w3_word_count_heading", $label );
    $tag              = apply_filters( 'w3_word_count_tag', 'p' );
    $new_content      = sprintf( '<%s>%s: %s</%s>', $tag, $label, $total_words, $tag );
    $new_content     .=$content;
    return $new_content;
}

add_filter( 'the_content', 'w3_word_count' );

এবার Line by Line ব্যাখ্যায় আসা যাক :

  • প্রথমতঃ লাইন নম্বর ৩ থেকে ৯ পর্যন্ত আমরা আমাদের প্লাগিন টিকে ওয়ার্ডপ্রেস এর সাথে পরিচয়ের পর্বটি শেষ করি। এক্ষেত্রে আমরা অতিরিক্ত দুটি লাইন যোগ করি, এর মধ্যে ১০ নম্বর লাইনে Text Domain এর ভ্যালু হিসেবে w3-word-count নামে একটা ইউনিক আইডেন্টিফায়ার দেই , যা দিয়ে আমরা আমাদের প্লাগিনের ট্রান্সলেশন এর কাজ করব। আর ১১ নম্বর লাইনে আমরা Text Domain ডোমেইন পাথ দেই।
  • ১৪-১৮ নম্বর লাইনে ওয়ার্ডপ্রেস এর বিল্টইন অ্যাকশন হুক plugins_loaded এর বিপরীতে w3_word_count_load_text_domain কাস্টম ফাঙ্কশনের মাধ্যমে আমরা আমাদের text-domain কে আমাদের languages ডিরেক্টরি এর সাথে এসাইন করে দেই। আর এর জন্য আমরা ওয়ার্ডপ্রেস এর বিল্টইন ফাঙ্কশন load_plugin_textdomain() এই ফাঙ্কশনটি ব্যবহার করি।
  • লাইন নম্বর ২০ এ, আমরা যেই w3_word_count() নামের আমাদের কাস্টম ফাঙ্কশনটি ডিক্লেয়ার করি। এবং প্যারামিটার হিসেবে $content কে নেই। কারণ আমরা এই $content কেই তো ফিল্টারিং করব।
  • লাইন নম্বর ২১ তে আমাদের পোস্টে যদি কোনো html tag বা অন্য কোনো ট্যাগ থাকে তা রিমুভ করার জন্য পি এইচ পি এর বিল্টইন strip_tags() ফাঙ্কশনটি ব্যবহার করি। এবং $content_without_html_tags নামক variable এ সংরক্ষণ করি।
  • লাইন নম্বর ২২ তে আমাদের পোস্টে html tag রিমুভের পর মোট কত শব্দ আছে তা count করি। আর এর জন্য আমরা পি এইচ পি এর বিল্টইন str_word_counts() ফাঙ্কশনটি ব্যবহার করি, এবং $total_words ভ্যারিয়াবলে সংরক্ষণ করি।
  • লাইন নম্বর ২৩ তে আমরা “Total Number of Words” এই লেবেলটি যুক্ত করি। এবং এটাকে যেন ট্রান্সলেট করতে পারি, সেজন্য __() function টি ব্যবহার করি , এবং এর দ্বিতীয় প্যারামিটার হিসেবে আমাদের w3-word-count নামের ইউনিক আইডেন্টিফায়ার টি ব্যবহার করি।
  • লাইন নম্বর ২৪ এবং ২৫ এ আমরা apply_filters() ফাঙ্কশনের মাধ্যমে লেবেল translation সুবিধা এবং tag যুক্ত করন সুবিধা যুক্ত করি।
  • লাইন নম্বর ২৬ এ $new_content variable এ আমরা sprintf() ফাঙ্কশনের মাধ্যমে সবকিছুর আউটপুট রিটার্ন করি।
  • লাইন নম্বর ২৭ তে মূল $content এর সাথে $new_content কে concat করি এবং লাইন নম্বর ২৮ তে $new_content variable কে রিটার্ন করি।
  • সর্বশেষ ৩১ নম্বর লাইনে আমরা “the_content” বিল্টইন ফিল্টার হুক দিয়ে আমরা আমাদের মূল কন্টেন্টকে ফিল্টার করি।

এখন যদি আপনার প্লাগিনটি এক্টিভেট থাকে, তাহলে নিচের মতো ফলাফল দেখতে পাবেন।

WordPress word count plugin
WordPress word count plugin

Filter Hook Functions

এতক্ষন আমরা ওয়ার্ডপ্রেসের সবচেয়ে জনপ্রিয় দুইটি Filter Hook ফাংশন যথাক্রমে apply_filters() এবং add_filter() কীভাবে কাজ করে তা উদাহরণ সহ দেখেছি । তবে ওয়ার্ডপ্রেসে এই দুটি Filter Hook ফাঙ্কশন ছাড়াও আরো কিছু Filter Hook ফাংশন রয়েছে যা আমাদের জানাটা দরকারি। চলুন শুরু করা যাক।

১. apply_filters_ref_array

ইতিপূর্বে আমরা জেনেছি কিভাবে apply_filters() ফাঙ্কশনটি কাজ করে। আর apply_filters() function টি যদি আপনি সম্পূর্ণ বুঝে থাকেন , তাহলে apply_filters_ref_array() ফাঙ্কশনটি বুঝতে আপনার ১ মিনিটের ও কম সময় লাগবে। আসলে দুটি ফাঙ্কশনই একই কাজ করে , অর্থাৎ একটা Filter হুকের আউটপুট প্রদর্শন করা। পার্থক্য হচ্ছে apply_filters() ফাঙ্কশনে argument গুলো সব ইন্ডিভিজুয়াল দিতে হয়। আর apply_filters_ref_array() এই ফাঙ্কশনটি ব্যবহার করলে আপনি সব গুলো আর্গুমেন্টকে একটা array হিসেবে পাস করতে পারবেন। নিচে apply_filters_ref_array() এর সিনটেক্স দেওয়া হলো :

apply_filters_ref_array( string $tag, array $args )
  • $tag (string) (Required) যেই filter hook টি execute করবেন সেটির নাম।
  • $args (array) (Required) filter hook টির জন্য সব গুলো আর্গুমেন্টকে একটা এরে আকারে পাঠাতে পারবেন।

এবার চলুন একটা উদাহরণ দিয়ে apply_filters() এবং apply_filters_ref_array() এই দুটি ফাঙ্কশনের মধ্যে পার্থক্যটা বুঝে নেয়া যাক :

apply_filters( 'my_action', 'arg_1', true, 'foo', 'arg_4' );

এখন apply_filters() এর সবগুলো আর্গুমেন্ট কে একসাথে একটা এরে হিসেবে apply_filters_ref_array() কে দিয়ে পাস করতে পারব। নিচের উদাহরণটি দেখুন :

$args = array( 'arg_1', true, 'foo', 'arg_4' );
apply_filters_ref_array( 'my_action', $args );

add_filter(), apply_filters_ref_array() function ব্যবহার করে WordPress এ আমাদের w3-words-count প্লাগিনে ফীচার আপডেট।

এর আগে আমরা আমাদের w3 word count প্লাগিনে একটা পোস্টে মোট কতগুলো শব্দ আছে , শুধু সেই সংখ্যা টি দেখিয়েছি। এখন আমরা এর সাথে সংশ্লিষ্ট পোস্ট টি পড়তে কত সময় লাগবে সেটাও যুক্ত করব। আর এই কাজটি করার জন্য আমরা w3_word_count() ফাঙ্কশনে ইতিমধ্যে যেইসব কাজ করেছি তা একসাথে একটা এরে আকারে apply_filters_ref_array() এর মাধ্যমে আরেকটি নতুন filter hook “reading_time” এর জন্য পাঠিয়ে দিবো। তারপর add_filter() function দিয়ে নতুন ফিল্টার হুক w3_reading_time এর জন্য w3_word_count_reading_time() নামে নতুন আরেকটি ফাঙ্কশন যুক্ত করব। এবং w3_word_count_reading_time() ফাঙ্কশন পোস্ট টি পড়তে মোট কত সময় লাগবে তা ক্যালকুলেশন করে বের করবে। চলুন সম্পূর্ণ প্লাগিন টি দেখা যাক :

<?php
/*
Plugin Name: W3 Word Count
Plugin URI: https://github.com/w3programmers/w3-word-count
Description: Count Words from any WordPress Post
Version: 1.0
Author: Masud Alam
Author URI: https://blog.w3programmers.com
License: GPLv2 or later
Text Domain: w3-word-count
Domain Path: /languages/
*/

function w3_word_count_load_text_domain() {
    load_plugin_textdomain( 'w3-word-count', false, dirname( __FILE__ ) . "/languages" );
}

add_action( "plugins_loaded", 'w3_word_count_load_text_domain' );


add_filter( 'the_content', 'w3_word_count' );
function w3_word_count( $content ) {
    $content_without_html_tags = strip_tags( $content );
    $total_words      = str_word_count( $content_without_html_tags );
    $label            = __( 'Total Number of Words', 'w3-word-count' );
    $label            = apply_filters( "w3_word_count_heading", $label );
    $tag              = apply_filters( 'w3_word_count_tag', 'h4' );
    $new_content      = sprintf( '<%s>%s: %s</%s>', $tag, $label, $total_words, $tag );
    $new_content     .=$content;
    $all_info         =[$new_content,$total_words];
    return apply_filters_ref_array("w3_reading_time",$all_info);
}

add_filter("w3_reading_time","w3_word_count_reading_time",10,2);

function w3_word_count_reading_time( ...$args ) {
    //var_dump($args);
    $content=$args[0];
    $total_words=$args[1];
    $reading_minute   = floor( $total_words / 200 );
    $reading_seconds  = floor( $total_words % 200 / ( 200 / 60 ) );
    $is_visible       = apply_filters( 'w3_word_count_display_reading_time', 1 );
    if ( $is_visible ) {
        $label   = __( 'Total Reading Time', 'w3-word-count' );
        $label   = apply_filters( "w3_word_count_reading_time_heading", $label );
        $tag     = apply_filters( 'w3_word_count_reading_time_tag', 'h4' );
        $new_content = sprintf( '<%s>%s: %s minutes %s seconds</%s>', $tag, $label, $reading_minute, $reading_seconds, $tag );
        $new_content .=$content;
    }

    return $new_content;
}
?>

https://blog.w3programmers.com/professional-wordpress-plugin-development-beginning-to-advance/

২. remove_filter()

এই ফাংশনটি নির্দিষ্ট ফিল্টার হুকের সাথে সংযুক্ত ফাংশন কে রিমুভ করার জন্য ব্যবহৃত হয়। এ ছাড়াও এই ফাঙ্কশনটি একটা নির্দিষ্ট ফিল্টার হুকের সাথে সংযুক্ত যেকোনো ডিফল্ট ফাংশন কে রিমুভ অথবা অন্য আরেকটি বিকল্প ফাঙ্কশন প্রতিস্থাপন করতে ব্যবহার করা যেতে পারে।

Syntax

remove_filter( string $tag, callable $function_to_remove, int $priority = 10 )

একটা নির্দিষ্ট হুক রিমুভ করতে হলে, যখন হুক টি যুক্ত করা হয়েছে তখনকার $function_to_remove এবং $priority arguments এর সাথে বর্তমান $function_to_remove এবং $priority arguments অবস্যই একই হতে হবে।

#Parameters

  • $tag: (string) (Required) যেই filter hook এর জন্য যুক্ত ফাঙ্কশনটি রিমুভ করতে চান , তার নাম হবে।
  • $function_to_remove: (callable) (Required) যেই ফাঙ্কশনটি রিমুভ করবেন তার নাম হবে।
  • $priority: (int) (Optional) হুকটির জন্য যুক্ত করা ফাঙ্কশনের priority যা দিয়েছেন , এখানেও তাই হবে সাধারণত এটার Default value: 10 থাকে।

এইবার একটা উদাহরণ দেওয়া যাক:

ওয়ার্ডপ্রেসে wpautop নামে একটা বিল্টইন হুক আছে যা আমাদের পোস্টের একটা single break (একটা এন্টার ) এর জন্য
tag টি অটোমেটিকালি জুড়ে দেয়। আর double break (দুটি এন্টার ) এর জন্য

প্যারাগ্রাফ অটোমেটিক্যালি জুড়ে দেয়। এখন এই wpautop হুকটিকে নিম্নোক্ত উপায়ে রিমুভ করব।

remove_filter( 'the_content', 'wpautop' );

আবার যদি একাধিক হুককে রিমুভ করতে চান, তাহলে নিম্নোক্ত উপায়ে করতে পারেন।

foreach ( array( 'the_content', 'the_title', 'comment_text' ) as $hook )
    remove_filter( $hook, 'my_capitalize_func' );

আর যদি আপনার তৈরি class এ অবস্থিত কোনো মেথডকে রিমুভ করতে চান, তাহলে কোডটি নিচের মতো হবে।

global $my_class;
remove_filter( 'the_content', array($my_class, 'class_filter_function') );

৩. remove_all_filters()

একটা নির্দিষ্ট ফিল্টার হুক থেকে সবগুলো ফিল্টার রিমুভ করার জন্য remove_all_filters() function টি ব্যবহৃত হয়।

Syntax

remove_all_filters( string $tag, int|bool $priority = false )
  • $tag: (string) (Required) যেই ফিল্টার হুকটি থেকে সব গুলো ফিল্টার রিমুভ করবেন তার নাম।
  • $priority: (int|bool) (Optional) শুধু মাত্র যেই priority এর ফিল্টার গুলো রিমুভ করবেন , সেই priority এখানে দিবেন। যদিও এটা অপশনাল। তবে এটার Default value: false

এবার নিচে একটা ফিল্টার হুকের সবগুলো ফিল্টার রিমুভ করার উদাহরণটি দেখুন :

<?php
    remove_all_filters('the_content');
?>

এবার একটা ফিল্টার হুকের নির্দিষ্ট priority এর সবগুলো ফিল্টার রিমুভ করার উদাহরণটি দেখুন :

<?php
    remove_all_filters('the_content',11);
?>

৪. has_filter()

কোনো একটা নির্দিষ্ট হুকের বিপরীতে কোনো filter রেজিস্টার্ড আছে কিনা? বা একটা নির্দিষ্ট filter আছে কিনা? তা চেক করার জন্য has_filter() function টি ব্যবহৃত হয়।

Syntax

has_filter( string $tag, callable|bool $function_to_check = false )

#Parameters

  • $tag: (string) (Required) যেই filter hook টির বিপরীতে চেক করবেন তার নাম।
  • $function_to_check: (callable|bool) (Optional) যেই নির্দিষ্ট ফাঙ্কশনটি চেক করবেন তার নাম। যদিও এটি অপশনাল। আর তাই এটার Default value: false

এবার নিচের উদাহরণটি দেখুন :

<?php
if ( ! has_filter( 'the_content', 'example_alter_the_content' ) ){
    add_filter( 'the_content', 'prefix_alter_the_content' );
}
?>

আরো একটা উদাহরণ দেখুন :

<?php
if (has_filter( 'the_content')){
    remove_all_filters('the_content');
    add_filter( 'the_content', 'prefix_alter_the_content' );
}
?>

https://blog.w3programmers.com/professional-wordpress-plugin-development-beginning-to-advance/

৫. current_filter()

এই মুহূর্তে যেই ফিল্টার হুকটি রান হচ্ছে তা জানার জন্য current_filter() ফাঙ্কশন টি ব্যবহৃত হয়। এই ফাঙ্কশনটি filter এবং action দুটিতেই কাজে লাগে। এটা একই সাথে current action hook এবং current filter hook দুটির নামই রিটার্ন করে।

Syntax

current_filter()
?>

এবার নিচের উদাহরণটি দেখুন :

 <?php
 add_filter( 'the_content','w3_replace_unwanted_words');
 add_filter( 'the_title', 'w3_replace_unwanted_words');

 function w3_replace_unwanted_words($text){
     /* If the_content is the filter hook, set its unwanted words. */
     if ('the_content' == current_filter()){
        $words = array('porn', 'sex', 'hug');
     }
     /* If the_title is the filter hook, set its unwanted words. */
    if ('the_title' == current_filter()){
        $words = array('porn', 'hug');
    }
 /* Replace unwanted words with "Whoops!" */
    $text = str_replace( $words, 'Whoops!', $text );

 /* Return the formatted text. */
 return $text;
}
?> 

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply