هوک یا قلاب یکی از عناصر اصلی وردپرس است. با استفاده از هوک میتوانید از امکانات پلتفرم وردپرس استفاده کنید. هوک به قدری اهمیت دارد که بدون آشنایی با آن ممکن نیست بتوانید برای وردپرس پلاگین بنوسید.
در واقع هوک است که امکان ساخت پلاگین را به وجود میآورد. اگر هوک در وردپرس وجود نداشت، پس از هر بار به روزرسانی، کلیه پلاگینها از کار میافتادند. پس از آشنایی با مفهوم هوک، تازه علت محبوبیت وردپرس و ساخته شدن هزاران پلاگین برای آن را میفهمید.
وردپرس دو نوع هوک اصلی دارد: هوک اکشن (Action hook) و هوک فیلتر (Filter hook)
در این مقاله به معرفی هوک اکشن میپردازیم.
هوک در زبان انگلیسی به معنی قلاب است. هوک اکشن هم دقیقاً همانند یک قلاب عمل میکند. شما توابع را به این قلاب آویزان میکنید. هر وقت که آن قلاب برداشته شد، توابع شما هم اجرا میشوند.
هوکهای اکشن این امکان را به شما میدهند که تابعی را در زمان مشخصی صدا بزنید. مثلاً تابعی نوشتید که میخواهید در هنگام لود شدن هر صفحه صدا زده شود. با استفاده از هوک مخصوص لود شدن صفحات میتونید این کار را انجام دهید.
برای اجرای توابع متصل به یک هوک باید از تابع do_action() استفاده کنید. این تابع به شکل زیر است:
<?phpdo_action($tag, $arg = ‘’);
?>
$tage: نام هوک اکشن
$arg: مقادیری که به اکشن داده میشوند. تعداد مقادیر از صفر با بالا میتواند باشد.
یک هوک اکشن با چندین پارامتر به صورت زیر نوشته میشود:
<?phpdo_action($tag, $arg_1, $arg_2, $arg_3);
?>
شاید تا الان کاملاً گیج شده باشید. بهتر است یک مثال را بررسی کنیم:
در وردپرس هوک اکشنی به نام wp_head وجود دارد. این هوک زمان اضافه کردن تگ <head> به هر صفحه سایت اضافه میشود. پس اگر تابعی به این هوک متصل کنید، در زمان اضافه شدن تگ <head> اجرا میشود.
بنابراین این هوک برای اضافه کردن فایلهای جاوا اسکریپت یا CSS بسیار مناسب است.
<?php
do_action(‘wp_head’);
?>
وقتی کد بالا اجرا میشود، وردپرس تمام توابعی که به هوک wp_head متصل هستند را مییابد و به نوبت اجرا میکند. در این مثال do_action هیچ پارامتری نگرفت. ولی در مثال زیر این تابع چند پارامتر میپذیرد:
<?phpdo_action(‘save_post’, $post_ID, $post);
?>
پس تا بدینجا متوجه شدید که هوک اکشن در واقع یک قلاب و اکشن یک تابع می باشد. توابع به این هوک وصل میشوند. هر موقع که تابع do_action برای یک هوک صدا زده شود، تمامی توابع متصل به آن اجرا میشوند.
حال سؤال اینجاست که چگونه یک تابع را به یک هوک متصل کنیم؟ برای اینکار تابعی با نام add_action در وردپرس وجود دارد؛ این تابع به فرم زیر می باشد:
<?phpAdd_action( $tag, $function, #priority, $accepted_args);
?>
$tag: اسم هوک اکشنی که میخواهید تابع به آن متصل شود.
$function: نام تابعی که میخواهید به هوک متصل کنید.
$priority: یک عدد است که بیانگر اولویت اجرای تابع میباشد. هر چه عدد کمتر باشد، در هنگام اجرای هوک، تابع زودتر صدا زده میشود. مقدار پیش فرض آن 10 میباشد.
$accepted_args: تعداد پارامترهایی که به تابع داده میشود. به صورت پیش فرض این تعداد برابر با یک است.
یکی از هوکهای پرکاربرد، wp_footer است. این هوک پیش از تگ </body> صدا زده میشود. در مثال زیر یک اکشن به این هوک متصل میشود.
<?phpAdd_action(‘wp_footer’, ‘my_footer’,100);
Function my_footer() {
echo ‘this is my footer’;
}
?>
تابع myfooter با اولویت خیلی پایین به هوک wp_footer متصل شده است. هر بار که do_action برای این هوک صدا زده شود، تابع my_footer در آخر اجرا میشود.
برای حذف یک هوک باید از تابع remove_action() استفاده کنید. معمولاً نیاز است که اکشنهای پیشفرض وردپرس را حذف و اکشنهای خاص خودتان را اضافه کنید. این تابع در صورت موفقیت مقدار true ودر غیر اینصورت مقدار False را برمیگرداند.
<?php
remove_action($tag, $function_to_remove, $priority, $accepted_args);
?>
$tag: نام هوکی که قرار است تابعی از آن حذف شود.
$function_to_remove: تابعی که میخواهید از هوک حذف کنید.
$priority: اولویتی که در تابع add_action() به اکشن داده شده است. مقدار پیشفرض 10 است.
$accepted_args: تعداد آگومانهایی که اکشن میپذیرد. مقدار پیشفرض یک است.
پارامتر $priority دقیقاً باید آنچه در do_action() ذکر شده است، برابر باشد. در غیر اینصورت اکشن حذف نخواهد شد و remove_action() مقدار fasle برمیگرداند.
تابع do_action_ref_array
این تابع همان کار do_action را میکند. تفاوت در نحوه ارسال آرگومانهاست. این تابع آرگومانها را به صورت یک آرایه ارسال میکند. آرایهی آرگومانها یک پارامتر اجباری در این تابع است.
<?phpadd_action (‘preg_get_posts’ , ‘random_post_order’);
function random_post_order ($query){
if ($query -> is_home && empty ($query -> query_vars[‘suppress_filters’] ) )
$query -> set ( ‘orderby’ , ‘rand’ );
}
?>
در تکه کد بالا، تابع random_post_order به هوک preg_get_posts متصل شده است. این هوک در زمان گرفتن لیستی از پستها اجرا میشود. بنابراین با اضافه کردن کد بالا، لیست پستها به صورت تصادفی مرتب میشود.
تابع remove_all_actions
این تابع تمامی توابع متصل به یک هوک را از آن جدا میکند. فرم این تابع به صورت زیر است:
<?
php
remove_all_actions($tag, $priority);
?>
$tag نام هوک می باشد، $priority هم اولویت توابعی است که باید حذف شوند. اولویت اختیاری است و مقدار پیشفرض آن False است.
تابع has_action
این تابع برای چک کردن متصل بودن یا نبودن یک تابع خاص به یک هوک است.
<?php
has_action($tag, $function_to_check);
?>
اگر پارامتر $function_to_check را خالی بگذارید، دو حالت پیش میآید. اگر تابعی به هوک متصل باشد مقدار True و در غیر اینصورت مقدار Fasle برمیگرداند. اگر این پارامتر را قید کنید و تابع هم به هوک متصل باشد، priority یا اولویت تابع بازگردانده میشود. در غیر اینصورت مقدار false برگردانده میشود.
تابع did_action
با استفاده از این تابع میتوانید تعداد دفعات اجرای یک تابع متصل به یک هوک را به دست آورید.
آشنایی با هوکهای رایج و پراستفاده از وردپرس اهمیت زیادی دارد. در صورتی که با هوکی ناآشنا برخورد کردید، با استفاده از گوگل و سایت وردپرس میتوانید توضیح آن را بیابید.
Plugins_loaded
این هوک مهمترین هوک برای نوشتن یک پلاگین می باشد، این هوک پس از لود شدن تمامی پلاگینهای فعال کاربر، لود میشود. تنظیمات اولیه پلاگین باید بر روی این هوک انجام شوند.
Init
این هوک پس از آماده شدن بیشتر فایلهای وردپرس اجرا میشود. با این هوک میتوانید اطلاعات وردپرس را دریافت کنید. زیرا در زمان اجرا شدن آن اطلاعات آماده هستند.
Admin_menu
این هوک در زمان لود شدن صفحه ادمین اجرا میشود اگر پلاگین شما از صفحه ادمین استفاده میکند، باید از این هوک استفاده کنید.
Template_redirect
این هوک در زمان انتخاب قالب صفحهای که کاربر سفارش داده، اجرا میشود. مثلاً با این هوک میتوانید چک کنید که اگر صفحه دیده شده یک پست باشد، CSS دلخواه شما لود شود.
Wp_head
این هوک در زمان اضافه شدن تگ <head> اجرا میشود.