সমস্যা বোঝার জন্য প্রয়োগ_ ফিল্টার ()


19

প্রয়োগ_ ফিল্টারগুলিতে ()

apply_filters( $tag, $value, $var ... );

আমার মাথাটি $valueও এর চারপাশে জড়িয়ে রাখতে সমস্যা হচ্ছে $var। আমি কোডেক্স পড়েছি এবং মনে হচ্ছে এটি $valueপরিবর্তন করা যেতে পারে, $varনা তবে বন্যের মধ্যে এর কোনও উদাহরণ আমি পাই নি। এটি ভেরিয়েবল পাস করার উপায় হিসাবে ব্যবহৃত হবে বলে মনে হয়। কোন ক্ষেত্রে, যে এবং এর মধ্যে পার্থক্য কি $var?

উত্তর:


35

আরও ভাল নামের সাথে ফাংশনটি দেখার চেষ্টা করুন:

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

সুতরাং যখন যে ফাংশন হিসাবে বলা হয়:

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

তুমি ব্যবহার করতে পার …

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

… এবং এই ফাংশনে দুটি ভেরিয়েবল পাস করুন। আপনি প্রথমটি ফেরান, দ্বিতীয়টি আরও বেশি প্রসঙ্গ সরবরাহ করে:

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

অতিরিক্ত পরিবর্তনশীলগুলি আপনার সিদ্ধান্তগুলি আরও সহজ করার জন্য রয়েছে, সেগুলিও পরিবর্তন করতে নয়।


আমি যদি সঠিকভাবে বুঝতে পারি। _ Value_to_ بدلে স্বয়ংক্রিয়ভাবে প্রয়োগ হওয়ার সাথে সাথে প্রয়োগ_ ফিল্টারগুলি থেকে ফেরত মান সংগ্রহ করার জন্য আমি কোনও পরিবর্তনক যুক্ত করব না?
r00tAcc3ss

@ r00tAcc3ss কিছুই স্বয়ংক্রিয়ভাবে ঘটে না। আপনাকে আপনার কলব্যাকের মান পরিবর্তন করতে হবে। প্রসঙ্গের ভিত্তিতে আপনি চাইলে এটিকে অপরিবর্তিত রাখতেও পারেন।
ফুসিয়া

ও আচ্ছা. আমি বোঝাতে চাইছিলাম, আমাকে ফেরত মানটি অন্য ভেরিয়েবলের মধ্যে গ্রহণ করতে হবে না এবং এটিকে $ মান হিসাবে নির্ধারণ করতে হবে না। এটি করা হয়েছে, যদি আমি হুকযুক্ত ফাংশনটিতে $ মান পরিবর্তন করি এবং ফিরে আসি তবে "স্বয়ংক্রিয়ভাবে।"
r00tAcc3ss

11

ফিল্টার কি?

ফিল্টারগুলি হ'ল ফাংশনগুলি যা ওয়ার্ডপ্রেস ডেটা দিয়ে কিছু কার্যকর করার আগে মৃত্যুদন্ড কার্যকর করার নির্দিষ্ট পয়েন্টগুলিতে (যেমন এটি ডাটাবেসে যুক্ত করা বা ব্রাউজার স্ক্রিনে প্রেরণ করা) ডেটা পাস করে। ফিল্টারগুলি ডাটাবেস এবং ব্রাউজারের মধ্যে বসে (যখন ওয়ার্ডপ্রেস পৃষ্ঠাগুলি তৈরি করে), এবং ব্রাউজার এবং ডাটাবেসগুলির মধ্যে (যখন ওয়ার্ডপ্রেস ডেটাবেজে নতুন পোস্ট এবং মন্তব্য যুক্ত করে); ওয়ার্ডপ্রেসে বেশিরভাগ ইনপুট এবং আউটপুট কমপক্ষে একটি ফিল্টার দিয়ে যায়। ওয়ার্ডপ্রেস ডিফল্টরূপে কিছু ফিল্টারিং করে এবং আপনার প্লাগইন এটির নিজস্ব ফিল্টারিং যোগ করতে পারে।

একটি ফিল্টার মধ্যে hooking

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

কোনও পোস্টের শিরোনাম পরিবর্তন করতে, আপনি the_titleফিল্টার হুক ব্যবহার করতে পারেন , যা নিম্নলিখিত হিসাবে সংজ্ঞায়িত হয়েছে:

apply_filters( 'the_title', $title, $id );

এর অর্থ, ফিল্টারটির ট্যাগ / নাম রয়েছে the_title, প্রথম প্যারামিটারটি $titleএমন ডেটা যা পরিবর্তন করতে হবে (অর্থাত্ পোস্টের শিরোনাম) এবং দ্বিতীয় প্যারামিটারটি $idঅতিরিক্ত তথ্য (এই ক্ষেত্রে পোস্ট আইডি)।

UPPERCASE- এ প্রতিটি পোস্টের শিরোনাম প্রদর্শন করতে উদাহরণস্বরূপ, আপনি নিম্নলিখিত লাইনটি ব্যবহার করতে পারেন:

add_filter('the_title', 'strtoupper');

আমরা যদি add_filterফাংশনটি একবার দেখে নিই, আমরা এটি নীচে সংজ্ঞায়িত দেখতে পাই:

add_filter( $tag, $function_to_add, $priority, $accepted_args );

আমরা কেবল প্রথম এবং দ্বিতীয় (প্রয়োজনীয়) প্যারামিটার নির্দিষ্ট করেছি, যখন তৃতীয় এবং চতুর্থ প্যারামিটারটি তার নিজস্ব ডিফল্ট মান (যেমন, 10এবং 1) এ সেট করা আছে।

একটি আরও জটিল ফিল্টার

আপনি যদি কেবল একটি নির্দিষ্ট পোস্ট ফিল্টার করতে চান তবে আপনি অতিরিক্ত তথ্য (এই ফিল্টারটির ক্ষেত্রে: আইডি) ব্যবহার করতে পারেন। এটি করার জন্য, আপনাকে প্যারামিটারের সংখ্যা নির্দিষ্ট করতে হবে (যা এই ক্ষেত্রে 2) এবং আপনাকে আবার এটি করতে গেলে আপনাকে অগ্রাধিকারের প্যারামিটারটি নির্দিষ্ট করতে হবে (যা আর্গুমেন্টের সংখ্যার আগে আসে)।

ধরুন আমরা আইডি 42 দিয়ে কেবলমাত্র পোস্টের শিরোনামকে প্রভাবিত করতে চাই, তবে এটির মতো দেখাচ্ছে:

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

এই ক্ষেত্রে, আমাদের চারটি উপলব্ধ পরামিতি নির্দিষ্ট করতে হবে।

আমার কী পরামিতি আছে?

নির্দিষ্ট ফিল্টারের (সংখ্যা) উপলভ্য প্যারামিটারগুলি সনাক্ত করতে আপনাকে এটি নির্ধারণ করা হবে কোথায় তা সন্ধান করতে হবে (এই ক্ষেত্রে: এখানে )।


তথ্যসূত্র :


2
সম্পূর্ণ প্রতিক্রিয়া এবং অনবদ্য ক্লাসের জন্য +1 (দুর্দান্ত ফর্ম্যাটিং ব্রোচাও)!
বোসকো

ধন্যবাদ, এটি খুব পুঙ্খানুপুঙ্খ, তবে আমি যা বলছিলাম তা আসলে ব্যাখ্যা করে না explain যেমন। ফিল্টারটিতে $ মান ভেরিয়েবল এবং $ ভেরিয়েবলের মধ্যে পার্থক্য।
r00tAcc3ss

এইচএম, আমি বলব, এটি করে তবে এটি অবশ্যই আমার বিষয়গত অনুভূতি। যদিও আমি ফিল্টার এবং এর পরামিতিগুলিতে কিছু তথ্য যুক্ত করব।
tfrommen
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.