ফিল্টার এবং হুকস কীভাবে সত্যিই পিএইচপিতে কাজ করে


21

ফিল্টার এবং হুকগুলি আসলে ওয়ার্ডপ্রেসে কীভাবে কাজ করে?

আমি উন্নত কিছু সম্পর্কে জিজ্ঞাসা করছি। কীভাবে এটি পিএইচপি প্রয়োগ করা হয়? যেমন এটি কীভাবে বিভিন্ন প্লাগইন থেকে সমস্ত হুক সংগ্রহ করে এবং সেগুলি মূল হুক ইত্যাদিতে "সংযুক্ত" করে does


2
আমি যতদূর জানি পিএইচপি তে কোনও 'হুক' বা 'ফিল্টার' নেই, সেখানে ফাংশন রয়েছে। ওয়ার্ডপ্রেসের একটি বিশেষ ফাংশন রয়েছে যা তাদের মৃত্যুদন্ড কার্যকর করার আগে অন্যান্য ফাংশনের একটি কল-ব্যাক ব্যবহার করে।
অফির বারুচ


3
@ ওফিরবারুচ, আমি নিশ্চিত যে ওপি ওয়ার্ডপ্রেসে তাদের প্রয়োগের কথা উল্লেখ করছিল, এবং এটির কোনও দেশীয় পিএইচপি বাস্তবায়ন হওয়ার পরামর্শ দিচ্ছিলাম না।
টম অাগার

উত্তর:


33

সংক্ষিপ্ত বিবরণ

মূলত " প্লাগইন এপিআই ", যা ফিল্টার এবং হুককে সমন দেয়, নিম্নলিখিত ফাংশনগুলির মধ্যে থাকে:

  1. apply_filters()- কার্যকর করা
  2. do_action- কার্যকর করা
  3. apply_filters_ref_array()- কার্যকর করা
  4. do_action_ref_array()- কার্যকর করা
  5. add_filter()- স্ট্যাক যোগ করুন
  6. add_action()- স্ট্যাক যোগ করুন

বেসিক অভ্যন্তরীণ

সামগ্রিকভাবে কয়েকটি বিশ্বব্যাপী রয়েছে (ওয়ার্ডপ্রেস ওয়ার্ল্ডের আর কী জড়িত):

global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;

প্রথমটি $wp_filterহ'ল একটি গ্লোবাল Arrayযা সমস্ত ফিল্টার নাম সাবহারাই হিসাবে ধারণ করে। Sub সমস্ত সাবহারি এরপরে আরও অধিক সাবারি রয়েছে যা কলব্যাকগুলি একটি অগ্রাধিকার অ্যারের আওতায় ডেকে আনা হয়েছে।

সংক্ষেপে সংক্ষিপ্ত

সুতরাং যখন কোনও এক্সিকিউট ফাংশন বলা হয়, তখন ওয়ার্ডপ্রেস সেই নামগুলির সাথে কীগুলির জন্য সেই গ্লোবাল অ্যারেগুলি সন্ধান করে। তারপরে সংযুক্ত কলব্যাকগুলি অগ্রাধিকারের পরে সম্পাদিত অগ্রাধিকার পায়। কেবলমাত্র সামনে যা ঘটে তা হ'ল allফিল্টারের সাথে সংযুক্ত কলব্যাকগুলি ।

আপনি ব্যবহার একটি কলব্যাক যোগ করার সময় add_actionবা add_filterওয়ার্ডপ্রেস প্রথম গণনা করে ঊর্ধ্বলিপি ইতিমধ্যে সংযুক্ত না callbacks একটি "অনন্য" আইডি, তারপর।

$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);

তারপরে এটি global $wp_filterস্ট্যাকটিতে আপনার কলব্যাক যুক্ত করে :

$wp_filter[ $tag ][ $priority ][ $idx ] = array(
    'function'      => $function_to_add,
    'accepted_args' => $accepted_args
);

আপনি দেখতে পাচ্ছেন যে প্রধান সাব অ্যারে হ'ল $tag(বা ক্রিয়া / ফিল্টার নাম), তারপরে একটি নির্দিষ্ট অগ্রাধিকারের অধীনে সমস্ত কিছু ডেকে আনা হয় এবং তারপরে "অনন্য" কলব্যাক / আইডি স্ট্রিংটি কী হিসাবে ব্যবহৃত হয়।

পরে, যখন কোনও ফিল্টার কল হয় - $tag/ ক্রিয়া- / ফিল্টার-নামের সাথে ঘটে - অ্যারেটি সন্ধান করে এবং কলব্যাকগুলি কল হয়ে যায়। এটি যেহেতু এটি ব্যবহার call_user_func_arrayকরছে তা আসলে কত যুক্তি যুক্ত রয়েছে তা বিবেচনা করে না। ওয়ার্ডপ্রেস নিজেই এটি সমাধান করে।

foreach ( (array) current( $wp_filter[ $tag ] ) as $the_ )
{
    call_user_func_array(
        $the_['function'], 
        array_slice(
            $args, 
            0, 
            (int) $the_['accepted_args']
        )
    );
}

3
ভুলবেন না যে যেমন callbacks মাধ্যমে যাচ্ছে, এটা 10 ADD_ACTION () এবং apply_filters (সাথে তাদের "প্রায়রিটি", যা সেট করা হয় (ঐচ্ছিকভাবে) ব্যবহার করে) একই হুক একাধিক callbacks এবং অক্ষমতা সঞ্চালনের আদেশ
টম অ্যাগার

1
@ টমআউগার দয়া করে উত্তরে কোনও অতিরিক্ত নোট এবং সম্পাদনা সংযোজন করতে দ্বিধা বোধ করবেন।
কায়সার

5

হুকগুলি ওয়ার্ডপ্রেস মূল ফাইল এবং কিছু মূল থিম ফাইলগুলিতে অন্তর্ভুক্ত। এগুলি আপনাকে ফাইলের একটি নির্দিষ্ট স্থানে সামগ্রী রাখতে সক্ষম করে।

ওয়ার্ডপ্রেসে wp_head হুক একটি উদাহরণ। আপনি এই জায়গাটিতে সামগ্রী যুক্ত করতে আপনার শিশু থিমের এই হুকটি ব্যবহার করতে পারেন '

উদাহরণ:

add_action('wp_head', 'add_content_to_head');
function add_content_to_head() {
echo 'Your Content';
}

কিছু প্রিমিয়াম থিমগুলির মধ্যে অ্যাকশন হুকও অন্তর্ভুক্ত থাকে যা আপনি একই কাজ করতে শিশু থিম ব্যবহার করতে পারেন। এখানে একটি ভিজ্যুয়াল মানচিত্র রয়েছে যার মধ্যে সমস্ত ক্রিয়াকলাপ হুক এবং জেনেসিস থিমের কাঠামোর মধ্যে তারা আপনার সামগ্রী আউটপুট দেয়।

উদাহরণ:

add_action('genesis_header', 'add_content_to_header');
function add_content_to_header() {
echo 'Your Content';
}

আপনি জেনেসিস থিম ফ্রেমওয়ার্কে শিরোনাম.এফপি ফাইলটি খুললে হুকটি দেখতে কেমন দেখাচ্ছে তা এখানে:

do_action( 'genesis_header' );

আপনি বিভিন্ন উপায়ে ব্যবহার করতে পারেন এমন ওয়ার্ডপ্রেস হুকের একটি তালিকা এখানে ।

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

জেনেসিস ডিজাইন ফ্রেমওয়ার্ক দিয়ে আপনি যে ফিল্টারগুলি ব্যবহার করতে পারেন তার একটি তালিকা এখানে

ওয়ার্ডপ্রেসে অন্তর্ভুক্ত ফিল্টারগুলির একটি তালিকা এখানে রয়েছে

আপনি জেনেসিসের মতো থিম ফ্রেমওয়ার্কে কীভাবে ফিল্টারটি ব্যবহার করতে পারেন তার একটি উদাহরণ এখানে রয়েছে:

add_filter( 'comment_author_says_text', 'custom_comment_author_says_text' );
function custom_comment_author_says_text() {
return 'author says';
}

উপরের কোডটি চাইল্ড থিম ব্যবহার করে লেখককে আপনার মন্তব্যগুলিতে পাঠ্য সংশোধন করতে ব্যবহার করা যেতে পারে। এটি যে কোনও থিমে কাজ করে।

এখানে আরও একটি উদাহরণ যা উদ্ধৃতিগুলির দৈর্ঘ্য 50 শব্দে কাস্টমাইজ করে:

add_filter( 'excerpt_length', 'change_excerpt_length' );
function change_excerpt_length($length) {
return 50; 
}

আপনি ডাব্লুপি -অন্তর্ভুক্ত / পোস্ট-টেম্পলেট.এফপি ফাইলটিতে the_excerpt () ফাংশনটি পাবেন

দেখতে দেখতে এটি কী:

  function the_excerpt() {
        echo apply_filters('the_excerpt', get_the_excerpt());
}

একই জিনিসটি করতে আপনি প্লাগিনগুলিতে হুকস এবং ফিল্টারগুলিও ব্যবহার করতে পারেন এবং প্যারেন্ট থিম বা ওয়ার্ডপ্রেস আপডেট করার সময় কোডটি হারাবে না।

মূলত, হুকস এবং ফিল্টারগুলি মূল ওয়ার্ডপ্রেস ফাইলগুলি বা আপনার মূল থিম ফাইলগুলি সম্পাদনা না করে ওয়ার্ডপ্রেস এবং আপনার পিতামাতার উভয় থিমকে অনুকূলিতকরণ এবং সংশোধন করতে সক্ষম করে।

চাইল্ড থিমটি কাস্টমাইজ করা এটি উল্লেখযোগ্যভাবে সহজ যখন প্যারেন্ট থিম ফ্রেমওয়ার্কটিতে হুকস এবং ফিল্টার অন্তর্ভুক্ত থাকে কারণ আপনার পিতামাত থিম টেম্পলেট ফাইলগুলি সম্পাদনা করার দরকার নেই। এইভাবে আপনি থিমগুলিও নিরাপদে পরিবর্তন করতে পারবেন।


2
এটি হুকস এবং ফিল্টারগুলির একটি দুর্দান্ত সাধারণ ওভারভিউ, তবে আমি ভয় করি যে ওপির প্রশ্নটি পুরোপুরি মিস করে, যা হুকগুলি কীভাবে কাজ করে এবং ওয়ার্ডপ্রেস কীভাবে সেগুলি তৈরি করে, সঞ্চয় করে এবং প্রক্রিয়াজাত করে তার অভ্যন্তরীণ সম্পর্কে about দুর্দান্ত উত্তর; আপনার সম্ভবত ডাব্লুপি সাইটগুলিতে আপনার টিউটোরিয়ালের সাথে লিঙ্ক করা উচিত।
টম অাগার

ঠিক আছে আমি এটি মুছে ফেলব। আমার খারাপ হিসাবে আমার প্রশ্নটি আরও ভাল করে পড়া উচিত ছিল তবে ভেবেছিলাম যে ইতিমধ্যে প্রদত্ত উত্তরগুলি প্রাথমিকভাবে জানা থাকলে তারা তাদের বুঝতে সহজ হবে।
ব্র্যাড ডাল্টন

2
ব্র্যাড, আমি এটিকে এখানে মুছে ফেলা হিসাবে আমার মনে হয় যে এখানে সেই তথ্যটি রাখাও কার্যকর হতে পারে। আপনি যদি রাজি না হন তবে কেবল এখানে আমাকে উল্লেখ করুন / পিং করুন এবং আমি এটি আবার সরিয়ে ফেলব।
কায়সার 20'14
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.