راهنمای سیستم هوک و apply_filters وردپرس

راهنمای سیستم هوک و apply_filters وردپرس

راهنمای سیستم هوک و apply_filters وردپرس

سلام دوستان؛

در این پست قصد داریم در رابطه با هوک در وردپرس و تابع apply_filters وردپرس صحبت کنیم و کارایی آن ها را با هم بررسی کنیم.اگر قصد دارید که برای وردپرس پلاگین بنویسید یا پوسته های حرفه ای طراحی کنید یکی از یکی از مواردی که به آن شدیدا نیازمند هستید شناخت هوک و apply_filters وردپرس در آن می باشد.

بهتر است قبل از اینکه با تابع apply_filters وردپرس آشنا شویم بهتر است کمی در مورد هوک صحبت کنیم و ببینیم به چه معناست و چه کاری انجام می دهد. در واقع هوک یا hook در زبان انگلیسی به معنای قلاب است اما در به زبان وردپرس نوعی تابع است که با کمک آن می توان متن یا بخشی را فیلتر کرد. در واقع هوک به دو بخش Action و Filter تقسیم می شود. هر کدام را به اختصار معرفی می کنیم:

Action

زمانی اجرا می شود که اتفاق خاصی در وردپرس رخ داده باشد! مثلا زمانی که کاربر در سایت وردپرسی ثبت نام می کند یا پستی منتشر می شود و امثال اینها.
دو نمونه از معروف ترین اکشن ها ()wp_head و () p_footer هستد که در اکثر قالب ها دیده میشوند ()wp_head در فایل header.php قرار داره و () p_footer در فایل footer.php که البته از کد آن ها نیز می توان متوجه این موضوع شد.

Filter

در فیلتر موضوع متفاوت است و زمانی کاربرد دارد که بخواهیم قبل از نمایش یک پست در سایت تغییراتی بر روی آن اعمال کنیم یا قبل از ذخیره یک مطلب در دیتابیس آن را ادیت کنیم و ….
مهم ترین نمونه ای که در این بخش موجود است فیلتر apply_filters وردپرس می باشد که بیشتر به مبحث امروز ما بر می گردد و قرار است مورد بررسی قرار گیرد.

 نکته!!! در واقع ما از اکشن استفاده می کنیم تا توابعی را به بخش دلخواهی از کد ( کد هسته یا کد قالب) نسبت دهیم.

 برای مثال بعضی از پلاگین ها برای اضافه کردن کد دلخواهشان به قسمت head وب سایت از اکشن wp_head استفاده میکنند.

  استفاده از hook وردپرس با افزونه Simply Show Hooks

جهت روشن شدن توضیحات بالا چند مثال میزنیم:

 فرض کنید شما می خواهید به انتهای تمای پست های وبسایت یک متن ثابت اضافه کنید برای این کار حتما پلاگینی وجود دارد اما شما به راحتی میتوانید از طریق فیلتر ها این کار را انجام دهید.
در وردپرس فیلتری به اسم the_content موجود است که توسط این فیلتر شما می توانید به محتوای پست های وبلاگ قبل از نمایش مطلبی را اضافه کنید.

در فایل functions.php  یک تابع دلخواه برای اضافه کردن مطلب تعریف میکنیم :

</p>

<pre class="brush:php">function matlab($content){
	if(is_single()){
	$content.='<p class="matlab">نوشته تازه اضافه شده توسط فیلتر</p>';
return $content;
	}
return $content;
}

پس از تعریف تابع دلخواه توسط دستور زیر تابع را به فیلتر the_content نسبت می دهیم :

add_filter('the_content','matlab');

حال نوشته “این یک متن ثابت است ” به انتهای تمامی پست ها اضافه میشود .

در انتها برای نمایش کاربرد اکشن ها با استفاده از اکشن wp_head() برای کلاس matlab که در بالا تعریف کردیم style تعریف میکنیم
در این مورد هم ابتدا یک تابع دلخواه تعریف کرده سپس به اکشن wp_head() نسبت می دهیم :

function style(){
echo '<style type="text/css">.matlab{background-color:#CCC;border:#000 3px dashed;}</style>';

}
add_action('wp_head','style');

apply_filters وردپرس

apply-filter-hamyarwp

تابع apply_filters وردپرس  یکی از توابع مهم در هوک به حساب می آید که در واقع در هسته ی وردپرس و بعضی از افزونه ها وجود دارد و امکان اتصال تابع را ایجاد میکند. نمونه کدی که در زیر آورده شده می تواند مثال خوبی برای عملکرد آن در بخش محتوا باشد:

</p>
<p dir="RTL" style="text-align: justify;">$content = apply_filters( 'the_content', $content );</p>
<p dir="RTL" style="text-align: justify;">

با توجه به قطعه کد بالا یعنی می توانیم مطلب مورد نظر را که به کمک تابع apply_filters وردپرس  به قسمت ‘the_content’ وصل کرده ایم، تغییر دهیم. به صورت قطعه کد زیر:

</p>
<p dir="RTL" style="text-align: justify;">add_action( 'the_content', 'Hamyarwp_english2persian' );</p>
<p dir="RTL" style="text-align: justify;">

پس توجه کنید هر جا که خواستید امکان اتصال تابع را ایجاد کنید باید از تابع apply_filters وردپرس استفاده کنید و به صورتی که خدمت شما توضیح دادیم عمل کنید. این تابع برای افزونه نویسی مهم است و کارایی زیادی دارد.

توجه!!! شما می توانید لیست سایر اکشن ها و فیلتر ها را مشاهده کنید.

مشاوره آموزشی رایگان
شما این فرصت را دارید، با تکمیل فرم زیر، قبل از انتخاب دوره آموزشی مناسب خود، از مشاوره رایگان کارشناسان آموزشی مجموعه همیار آکادمی استفاده نمائید.
 
مشاوران آموزشی
همیار آکادمی
پاسخگوی شما هستند
آیا این مقاله برای شما مفید بود؟
تقریبا
خیر

اگر می‌خواهید از آخرین و محبوب‌ترین مقالات ما در ایمیل خود مطلع شوید، همین الان ایمیل خود را در کادر زیر وارد کنید:

تعداد علاقه‌مندانی که تاکنون عضو خبرنامه ما شده‌اند:

دیدگاهتان را بنویسید

دیدگاه‌های این نوشته جدید ترین ها شاخص

  1. سلام
    تشکر بابت این مطلب.
    اخرش خیلی مبهم بود لطفا بازنویسی کنید (apply_filters )
    ممنون

  2. سلام
    من قصد دارم از هوک برای ووکامرس استفاده کنم به این صورت که وقتی پرداخت یک محصول خاص انجام شد یک وب سرویس اجرا بشه ممنون میشم کمکم کنید

  3. مطلب مفیدی بود. ممنون

  4. ببخشید من از ثابت
    define( ‘wp_post_revisions’, false );
    و اکشن
    function disableAutoSave(){
    wp_deregister_script(‘autosave’);
    }
    add_action( ‘wp_print_scripts’, ‘disableAutoSave’ );
    که تو تموم سایتا برای غیر فعال کردن “رونوشت” معرفی شده استفاده کردم ولی بازم غیر فعال نمیشه.دلیلشو شما نمی دونید؟
    در مورد سوال قبلی فقط apply_filter رو توضیح بدین ممنون میشم.بقیشو بیشترشو می دونم.
    بازم ممنون.

    • البته مشکل رونوشت و ذخیره خودکار حل شد .باید
      define( ‘wp_post_revisions’, false ); با حروف بزرگ میبود

  5. سلام.خسته نباشید.میشه در یک پست تکمیلی یا همینجا تفاوت و کاربرد هر کدوم از اینا رو توضیح بدین که این اموزش تکمیل بشه.مثلا من می خوام بدونم تفاوت apply_filter با add-filter چیه؟یا یک منبع فارسی معرفی کنید.چون همه جا فقط تفاوت و کاربرد فیلتر و اکشن روگفته. ممنون
    has_filter()
    add_filter()
    apply_filters()
    apply_filters_ref_array()
    current_filter()
    remove_filter()
    remove_all_filters()
    doing_filter()
    has_action()
    add_action()
    do_action()
    do_action_ref_array()
    did_action()
    remove_action()
    remove_all_actions()
    doing_action()

  6. بابا خوب چرا اینطوری میکنی؟شما که نظر من رو تائید کردی خوب یه آره یا نه هم میگفتی مگه چیزی ازت کم میشد خوش انصاف؟

  7. سلام.
    ببخشید در واقع باید این دو تا کد رو به فانکشن اضافه کنم؟
    function matlab($content){
    if(is_single()){
    $content.=’نوشته تازه اضافه شده توسط فیلتر’;
    return $content;
    }
    return $content;
    }

    و

    add_filter(‘the_content’,’matlab’);

    آره؟ یعنی هیچ چیز دیگه ای نمیخواد؟ ترو خدا جواب بده!

  8. سلام . بسیار عالی بود . ممنون .

  9. سلام ممنون !!

  10. 9 سال عضو همیار وردپرس

    آقا سهیل به راستی مطلب جالب و سرآغاز خیلی از کار های تابعی بود !

  11. سلام.خیلی خوب بود.
    اتفاقا امروز داشتم همین اکشن ها وفیلترها رو جستجو میکردم که دیدم هیلترینگ نمیزاره.
    یه سوال:
    این هوک ها همون نسل بعدی هک ها هستند دیگه؟یا من اشتباه فکر میکنم؟

    • 51 سال عضو همیار وردپرس

      سلام
      ممنون از نظرتون
      در واقع من نمی دونم منظور دقیق شما از هک چیه؟
      اما هوک در وردپرس امکانی را فراهم میکنه که شما بتونید بدون دستکاری در فایل های هسته وردپرس یک سری کارهای مد نظرتون را انجام بدید.

  12. سلام
    مطلب بسیار خوبی بود
    از روش های دیگه هم میشود استفاده کرد.

    ممنون.

  13. ممنون! مطلب خوبی بئذ

مطالب زیر را حتما بخوانید

دوره‌های آموزشی