اگر در حال یادگیری وردپرس هستید و به این فکر می کنید که برای خودتان پوسته و یا افزونه های سفارشی طراحی کنید، لازم است که با قلاب های اکشن و فیلتر (Action & Filter Hooks) آشنا باشید.

در واقع وردپرس به لطف همین قلاب ها توانسته است به این اندازه انعطاف پذیر باشد.

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

 

قلاب های وردپرس چیست؟

قلاب (hook) نام محلی مشخص از کدهای وردپرس بوده که به شما این امکان را می دهد که کدهای خود را به آن ضمیمه و یا اجرا کنید. در واقع همانطور که از معنای کلمه قلاب (به فارسی قلاب) مشخص است، کدهای شما را به کدهای هسته وردپرس قلاب می کند.

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

  • اکشن (Action)
  • فیلتر (Filter)

در تصویر زیر یک معنای مفهومی از قلاب ها را مشاهده می کنید :

hooksactionsfilters

تفاوت اکشن ها با فیلترها

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

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

اکشن ها

  • زمانی که چیزی برای افزودن وجود دارد.
  • با add_action() فراخوانی می شود.
  • با do_action() استفاده می شود.

 

فیلترها

  • زمانی که چیزی برای تغییر وجود داشته باشد.
  • با apply_filters() فراخوانی می شود.
  • با add_filters() استفاده می شود.

شاید به طور صحیح متوجه این تفاوت ها نشده باشید! پس اگر موافق باشید کمی عمیق تر موضوع را دنبال کنیم.

 

قلاب اکشن

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

در واقع شما می توانید توابع سفارشی خود را به هسته وردپرس اضافه کنید تا از آنها در پوسته و یا افزونه ای که طراحی می کنید، استفاده کنید.

از اکشن ها برای اجرای حداقل یکی از موارد زیر استفاده می شود:

  • تغییر دادن اطلاعات در پایگاه داده
  • ارسال پیام با ایمیل
  • ایجاد و ارسال صفحات سایت به مرورگر کاربر

 

با استفاده از کد زیر می توانید یک اکشن وردپرس ایجاد کنید:

<?php add_action(‘my_action_hook_name’, ‘my_action_function_name’, $priority);

اکشن مورد نظر همانطور که مشاهده می کنید، دارای سه پارامتر است:

  1. my_action_hook_name – نام اکشن سفارشی خودتان
  2. my_action_function_name – نام تابع سفارشی خودتان
  3. priority – این گزینه اولویت اجرای اکشن است و اختیاری بوده و مقدار پیشفرض آن ۱۰ می باشد

وقتی کد بالا اجرا شود، وردپرس در لیست اکشن ها به دنبال my_action_hook_name خواهد گشت، در صورتی که نتواند آن اکشن را پیدا کند، یکی جدید ایجاد خواهد کرد.

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

نحوه استفاده از اکشن ها را می توان به این ترتیب در نظر گرفت:

  • ایجاد یک تابع PHP
  • با استفاده از add_action() تابع خود را به وردپرس قلاب کنید
  • تابع ایجاد شده را در فایل افزونه قرار داده و سپس آن را فعال کنید(اگر در پوسته استفاده نمی کنید)

برای استفاده از اکشن ها می توانید از کد زیر استفاده کنید:

<?php do_action(‘my_action_hook_name’); ?>

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

 

action-filter

 

قلاب فیلتر

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

در واقع فیلترها توابعی هستند که وردپرس از آنها برای تغییر داده ها استفاده می کند.

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

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

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

گام های اصلی افزودن فیلترها به وردپرس را می توان به سه مرحله تقسیم بندی کرد:

  • ایجاد یک تابع PHP که داده ها را فیلتر کند
  • با فراخوانی add_filter() تابع خود را به وردپرس قلاب کنید
  • تابع ایجاد شده را در فایل افزونه قرار داده و سپس آن را فعال کنید

 

ایجاد تابع فیلتر

تابع فیلتر یک مقدار را دریافت کرده و پس از اصلاح یا تغییر ؛ آن را تحویل می دهد( مانند فیلتر the_content برای اعمال تغییرات روی متن نوشته های سایت وردپرس).

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

برای اینکه یک فیتلر ایجاد کنیم، ابتدا باید تابع PHP را بنویسیم. برای مثال اگر می خواهید مطمئن شوید که در نوشته ها و یا دیدگاه کلمات ناسزا وجود ندارد، می توانید از یک فیلتر برای این کار استفاده کنید.

function filter_profanity( $content ) {
	$profanities = array('badword','alsobad','...');
	$content = str_ireplace( $profanities, '{censored}', $content );
	return $content;
}

در تابع فوق ابتدا کلمات زشت را در یک آرایه قرار دادیم و سپس با استفاده از str_ireplace یک حلقه برای بررسی کلمات موجود در آرایه profanities ایجاد کردیم.

به طور ساده تر این تابع کلمات مشخص شده (ناسزا) را شناسایی کرده و به جای آنها عبارت سانسور شده را جایگزین می کند.

 

قلاب کردن فیلتر

پس از اینکه تابع خود را ایجاد کردید، لازم است که آن را به سیستم وردپرس قلاب کنید. بدین منظور از add_filter()   به شکل زیر استفاده می شود:

add_filter ( 'hook_name', 'your_filter'] );

این کد از چند پارامتر تشکیل شده است:

  • hook_name – نام قلاب فیلتر که در وردپرس وجود دارد که مشخص می کند چه زمانی فیلتر شما باید اجرا شود.
  • your_filter – نام تابع فیلتر شما می باشد.

در ادامه همان مثال فوق، ما تابع مربوط به فیلتر را که نوشته بودیم را می خواهیم به قسمت دیدگاه قلاب کنیم، پس از کد زیر استفاده می کنیم:

add_filter( 'comment_text', 'filter_profanity' );

استفاده کردن از فیلتر

در صورتی که کدها را به صورت یک افزونه نوشته باشید، باید آن افزونه را در وردپرس آپلود و فعال کنید.

 

جمع بندی

قلاب ها (اکشن و فیلتر) از اجزاء مهم در وردپرس محسوب می شوند که وظایف بزرگی را برعهده دارند.

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

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

امیدواریم که این آموزش برایتان مفید بوده باشد و تفاوت قلاب های اکشن و فیلتر را به درستی متوجه شده باشید.

  • facebook
  • googleplus
  • twitter
  • linkedin
  • linkedin
  • linkedin

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

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *