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

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

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

1- قلاب ها

2- فیلترها

3- اقدامات

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

شما اغلب اوقات می توانید برای یک هدف هر کدام فیلترها یا اقدامات را استفاده کنید. برای مثال، اگر شما می خواهید افزونه ایی برای تغییر متن یک پست داشته باشید، می توانید با اضافه کردن یک تابع اقدام (action) به تابع  publish_post وردپرس اقدام کنید (تا پست هنگام ذخیره شدن در پایگاه داده تغییر کند )، یا یک عملکرد فیلتر(filter) برای تابع the_content اقدام کنید(به طوری که پست پس از اصلاح  در صفحه مرورگر نمایش داده شود)

در ادامه توابع ورد پرس برای اقدامات و فیلترها لیست شده اند:

توابع وردپرس برای فیلترها و اقدامات

Filter Functions
  has_filter()
add_filter()
apply_filters()
apply_filters_ref_array()
current_filter()
remove_filter()
remove_all_filters()
doing_filter()

 

Actions Functions
has_action()
add_action()
do_action()
do_action_ref_array()
did_action()
remove_action()
remove_all_actions()
doing_action()

 

Activation/Deactivation/Uninstall Functions
  register_activation_hook()
register_uninstall_hook()
register_deactivation_hook()

 

پیاده سازی اقدامات

عمیات برای رویدادهای خاص در وردپرس، مانند انتشار یک پست، تغییر تم ها، و یا نمایش یک صفحه نمایش تعریف می شوند. اکشن یک تابع پی اچ پی سفارشی تعریف شده در افزونه است که در پاسخ به رویدادی باید اجرا شود .

اقدامات معمولا یک یا چندتا از موارد زیر را انجام می دهند:

– اصلاح داده های پایگاه داده.

– ارسال یک پیام ایمیل.

– تغییر صفحه نمایش مدیریت فرستاده شده به مرورگر کاربر.

گام های اساسی برای این اتفاق عبارتند از:

1- ایجاد یک تابع پی اچ پی که باید هنگامی که یک رویداد خاص رخ می دهد اجرا شود در فایل افزونه خودمان.

2- قلاب زدن این تابع به رویداد با استفاده از تابع add_action()

3- قرار دادن تابع پی اچ پی خود در یک فایل از افزونه و فعال کردن آن

1-ایجاد یک تابع اقدام

اولین گام در ایجاد یک اقدام در پلاگین خود، ایجاد یک تابع پی اچ پی با قابلیت های اقدام مورد نظر در پلاگین و قراردادن آن در فایل پلاگین (واقع در زیر پوشه پلاگین در مسیر wp-content/plugins) است. برای مثال، اگر شما می خواهید دوستان خود را هر زمان که شما یک پست جدید ایجاد کنید با دریافت یک پیام ایمیل آگاه کنید، ممکن است تابع زیر را تعریف کنید:
function email_friends($post_ID) {
$friends = 'bob@example.org,susie@example.org';
mail($friends, "sally's blog updated",
'I just put something on my blog: http://blog.example.com');
return $post_ID;
}

برای بسیاری از اقدامات، تابع باید تنها یک پارامتر (معمولا با پست یا نظری ID، بسته به اقدام) را بپذیرید. برخی از اقدامات را بیش از یک پارامتر دارند.علاوه بر یک پارامتر، شما همچنین می توانید از متغیر های سراسری وردپرس دسترسی داشته باشید، و برای آموزش های بیشتر برای پارامترهای بیشتر و متغیرهای سراسری وردپرس به سایت منبع وردپرس   مراجعه کنید.

هر خروجی متن توسط تابع (به عنوان مثال با چاپ) در صفحه منبع در محل که در آن اقدام مورد استفاده قرار می گیرد ظاهر خواهد شد.

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

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

روش دوم : توابع خودتان را داخل کلاس بنویسید و هنگام فراخوانی همراه با نام کلاس فراخوانی کنید. بصورت زیر:
class emailer {
static function send($post_ID)  {
$friends = 'bob@example.org,susie@example.org';
mail($friends,"sally's blog updated",'I just put something on my blog: http://blog.example.com');
return $post_ID;
}
}
add_action('publish_post', array('emailer', 'send'));

در این مثال تابع add_action تابعی بنام send از کلاس emailer را به تابع publish_post قلاب زده است.

در این صورت اگر قصد فراخوانی مستقیم تابع send خودتان را دارید باید بصورت   emailer::send() عمل کنید.

2-پیوند زدن (قلاب زدن) به وردپرس

پس از اینکه تابع شما آماده شده قدم بعدی پیوند زدن آن به وردپرس یا بعبارتی ثبت کردن آن در وردپرس است. برای این کار از تابع add_action() بصورت زیر استفاده کنید:
add_action ( 'hook_name', 'your_function_name', [priority] );
hook_name: نام تابع موجود در وردپرس است که می خواهیم اقدامی به آن پیوند بزنیم.

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

Priority : ترتیب اجرای این اقدام را نشان می دهد و هر چه کمتر باشد این اقدام در مقایسه با اقدام های پیوندی دیگر زودتر اجرا می شود (این پارامتر اختیاری بوده و مقدار پیش فرض آن 10 است)

مثال زیر تابع email_friends() از افزونه را به تابع publish_post() از وردپرس پیوند می زند.
add_action ( 'publish_post', 'email_friends' );

3-نصب و فعال سازی

آخرین گام از پیاده سازی افزونه ، نصب کردن فایل و فعال کردن آن است. فایل افزونه شامل تابع اقدام و فراخوانی  add_action() باید در پوشه ای با نام افزونه و در مسیر wp-content/plugins قرارگرفته و در پانل مدیریتی وردپرس افزونه فعال شود.

 

پیاده سازی فیلترها

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

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

1- ایجاد یک تابع فیلتر به زبان پی اچ پی که باید هنگامی که یک رویداد خاص رخ می دهد اجرا شود در فایل افزونه خودمان.

2- قلاب زدن این تابع به رویداد با استفاده از تابع add_filter()

3- قرار دادن تابع پی اچ پی خود در یک فایل از افزونه و فعال کردن آن

1-ایجاد یک تابع فیلتر

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

بنابراین، اولین گام برای ساخت فیلتر برای افزونه، ایجاد یک تابع PHP برای فیلتر کردن و قراردادن آن در فایلی در پوشه مربوط به افزونه است. بعنوان مثال، اگر می خواهید پست ها و دیدگاه ها در سایت شما دارای کلمات زشت نباشند باید یک متغیر حاوی همه کلمات زشت تعریف کرده و سپس تابع زیر را پیاده سازی کنید:
function filter_profanity( $content ) {
$profanities = array('badword','alsobad','...');
$content = str_ireplace( $profanities, '{censored}', $content );
return $content;
}

2- پیوند زدن تابع فیلتر

بعد از تعریف تابع، دومین گام قلاب زدن یا ثبت کردن تابع فیلتر به وردپرس است. برای این کار از تابع add_filter() استفاده کنید.
add_filter ( 'hook_name', 'your_filter', [priority] );
hook_name: نام تابع موجود در وردپرس است که می خواهیم آنرا فیلتر کنیم.

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

Priority : ترتیب اجرای این فیلتر را نشان می دهد و هر چه کمتر باشد این فیلتر در مقایسه با فیلتر های پیوندی دیگر زودتر اجرا می شود (این پارامتر اختیاری بوده و مقدار پیش فرض آن 10 است)

مثال زیر تابع فیلتر filter_profanity() از افزونه ما را به تابعcomment_text() از وردپرس پیوند می زند.

add_filter( 'comment_text', 'filter_profanity' );

3-نصب و فعال سازی فیلتر

آخرین گام از پیاده سازی افزونه ، نصب کردن فایل و فعال کردن آن است. فایل افزونه شامل تابع فیلتر و فراخوانی  add_filter() باید در پوشه ای با نام افزونه و در مسیر wp-content/plugins قرارگرفته و در پانل مدیریتی وردپرس افزونه فعال شود.

 

4-مثال برای فیلتر

مثال زیر برای افزونه ای نوشته شده که تابع bloginfo()  وردپرس را اصلاح می کند (رونویسی می کند). این فیلتر عملکرد تابع مربوط به هسته وردپرس را تغییر می دهد:
add_filter( 'bloginfo', 'mybloginfo', 1, 2 );
add_filter( 'bloginfo_url', 'mybloginfo', 1, 2 );
function mybloginfo( $result='', $show='' ) {
switch ( $show ) {
case 'wpurl':
$result = SITE_URL;
break;
case 'template_directory':
$result = TEMPL_DIR;
break;
default:
}
return $result;
}

حذف اقدامات و فیلترها

بعضی مواقع نیاز هست که یک یا پند تا از اقدام ها و فیلترها در پلاگین را غیرفعال کنید. با فراخوانی تابع remove_filter() و remove_action() می توانید یک تابع فیلتر یا اقدام را از وردپرس جدا کنید.پ

remove_filter('filter_hook','filter_function')or
remove_action('action_hook','action_function').

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