اکشن هوک یا اکشن در وردپرس به ما اجازه میدهد بدون ویرایش هسته، قابلیتهای سفارشی به آن اضافه کنیم. به کمک actionها یک قلاب به محل یا رویداد خاصی ایجاد میکنیم تا به محض رخ دادن آن رویداد، تابع مورد نظر ما اجرا شود. در این آموزش نحوه کار با actionها را بررسی میکنیم.
برای مثال فرض کنید یک پوسته تهیه کرده و قرار است یک قطعه کد اختصاصی در بخش head صفحات قرار دهید. اگر این کار را با ویرایش فایلهای قالب انجام دهیم، پس از بهروزرسانی، همه تغییراتمان حذف خواهد شد. به کمک اکشنهای وردپرس میتوانیم این قطعه کد را بدون تغییر هسته اصلی، به هدر اضافه کنیم.
در ادامه میبینید که به طور پیشفرض در وردپرس اکشنهای بسیار زیادی تعریف شده است. همچنین هر قالب و افزونه مجموعهای از actionها را در اختیار ما قرار میدهد تا در صورت نیاز بتوانیم از آنها استفاده کنیم.
فهرست محتوای آموزش
اکشن در وردپرس
اکشنها نوعی هوک در وردپرس هستند. hook (قلاب یا چنگک) مجموعهای از رویدادها یا محلهایی هستند که ما به عنوان توسعهدهنده وردپرس میتوانیم عملیاتهایی را روی آنها سوار کنیم. (بیشتر بخوانید: هوک در وردپرس و انواع آن)
دو مورد زیر را در نظر بگیرید:
- زمانی که یک نوشته منتشر یا بهروزرسانی میشود. (رویداد)
- هدر صفحه ورود کاربر (محل)
برای اینکه بتوانیم در این موقعیتها، تابع یا توابعی را اجرا کنیم، از اکشن در وردپرس استفاده میکنیم.
با action ها یک قلاب از تابع php مورد نظرمان به محل یا رویداد مورد نظر میاندازیم. از این پس، هر زمان که آن وضعیت اجرا شد، تابعی که به آن قلاب شده است نیز اجرا میشود.
اگر تا به حال در مورد هوکهای وردپرس اطلاعی نداشتید، ممکن است تصور این تعاریف برایتان کمی سخت باشد! این مسئله کاملاً عادی است! 🙂 کدهایی که در ادامه هستند را به ترتیب دنبال کنید تا متوجه کاربرد اکشن در وردپرس بشوید.
استفاده از اکشن وردپرس
در وردپرس تابعی به نام add_action()
داریم که ساختار کلی آن به صورت زیر است:
add_action( $tag, $function, $priority, $accepted_args );
دو پارامتر اول اجباری و دو تای دیگر اختیاری است.
پارامتر اول مشخص میکند قرار است روی کدام اکشن یک قلاب بندازیم. این اکشن میتواند از هسته وردپرس بوده یا توسط پوسته و افزونههای در حال استفاده در سایت تعریف شده باشد.
پارامتر دوم تابعی را مشخص میکند که میخواهیم همراه با اکشن مورد نظر اجرا شود.
اکشنی به نام wp_footer
داریم که در هنگام بارگذاری فوتر سایت فراخوانی میشود. در قطعه کد زیر، یک قلاب به این اکشن انداخته و تابع sbzd_cite()
را به آن متصل میکند.
<?php
add_action( 'wp_footer', 'sbzd_cite' );
function sbzd_cite(){
echo "This is from SabzDanesh wordpress Development Tutorial.";
}
وقتی این کد را به functions.php
در پوسته یا فایلهای افزونه اضافه کنیم، یک متن ساده به فوتر سایت اضافه میشود.
علاوه بر اینکه در بخش بعدی آموزش یاد میگیریم چطور یک اکشن سفارشی در وردپرس ایجاد کنیم، میتوانیم از اکشنهای پیشفرض وردپرس نیز استفاده کنیم. برای اینکه لیست همه اکشنها را ببینید، به مستندات آن مراجعه کنید.
پارامترهای اختیاری تابع add_action
پارامتر سوم و چهارم تابع add_action()
را میتوانیم در صورت نیاز تعریف کنیم. این پارامترها به صورت عددی هستند.
- پارامتر سوم، اولویت اجرای تابع را مشخص میکند. مقدار آن یک عدد صحیح بوده و به طور پیشفرض 10 است. اگر برای یک اکشن چند هوک (با add_action) تعریف شده باشد، ابتدا توابعی اجرا میشوند که عدد اولویت آنها پایینتر است.
- پارامتر چهارم، تعداد ورودیهایی که از اکشن به تابع قلابشده ارسال میشود را تعیین میکند. مقدار آن به طور پیشفرض صفر است.
برخی از اکشنها در هنگام اجرا، یک یا چند متغیر را برای توابعی که به آنها قلاب شده است ارسال میکنند. برای مثال، هوک save_post
که در زمان ذخیره یک پست تایپ در وردپرس اجرا میشود، دو پارامتر ورودی دارد؛ یکی id پست و دیگری یک object از پست ایجاد شده.
در قطعه کد زیر، یک قلاب اکشن به رویداد ذخیرهسازی نوشته در وردپرس ایجاد کردهام. این قلاب دارای اولویت 20 بوده و هر دو متغیر مربوط به اکشن را به تابع my_save()
ارسال میکند.
<?php
add_action( 'save_post', 'my_save', 20, 2 );
?>
با این شرایط، وقتی میخواهیم تابع my_save()
را تعریف کنیم، باید این دو متغیر ورودی را به عنوان پارامتر در نظر بگیریم؛ در نتیجه تابعی شبیه به زیر خواهیم داشت:
<?php
function my_save( $id, $object ){
// do something...
}
حذف اکشن وردپرس با remove_action
گاهی اوقات در توسعه وردپرس نیاز داریم اکشن هوکهایی که توسط هسته وردپرس، پوسته یا افزونههای وردپرسی ایجاد شدهاند را غیر فعال کنیم.
برای این کار باید بدانیم آن قلاب بر روی چه اکشنی و برای چه تابعی تعریف شده است. سپس با تابع remove_action()
آن را غیرفعال میکنیم. این تابع دو ورودی میگیرد؛ مشابه افزودن اکشن هوک، پارامتر اول tag مرتبط و پارامتر دوم تابع مورد نظر را مشخص میکند.
برای مثال، فرض کنید افزونهای کدهایی را با تابع example()
و اکشن wp_head به هدر سایت اضافه میکند. با قطعه کد زیر، این اکشن در وردپرس را حذف میکنیم:
remove_action( 'wp_head', 'example' );
ساخت action سفارشی جدید
تا این بخش از آموزش یاد گرفتیم چگونه یک اکشن هوک در وردپرس ایجاد کنیم. اگر در حال توسعه یک پوسته یا افزونه باشید، به احتمال زیاد لازم دارید هوکهای خودتان را تعریف کنید.
اگر لازم است در محل یا رویدادی، چند تابع اجرا شده یا ممکن است توسط دیگران توابعی برایش تعریف شود، ایجاد اکشن هوک جدید گزینه بسیار خوبی برایتان خواهد بود.
با استفاده از تابع do_action()
میتوانیم یک اکشن جدید در وردپرس ایجاد کنیم. این تابع یک پارامتر اجباری دارد که به شکل رشته php نام اکشن (تگ : tag) را مشخص میکند. از این پس، میتوانیم توابع خود را به آن متصل کنیم.
<?php
do_action( 'my_custom_action' );
?>
حالا میتوانیم با add_action تابع یا توابع مورد نظرمان را به اکشن my_custom_action
متصل کنیم.
<?php
add_action( 'my_custom_action', 'my_function' );
function my_function(){
echo "I hope you be happy!"
}
در این آموزش یاد گرفتیم چطور از اکشنهای وردپرس استفاده کنیم. اکشنها یکی از دو نوع هوک (hook : قلاب) در wordpress هستند که به ما اجازه میدهند با اتصال به رویدادها یا محلهای خاص، توابع مورد نظرمان را در آن موقعیت اجرا کنیم.
حتماً به لیست اکشن های پیشفرض سر بزنید تا یک دید کامل از موقعیتهایی که شاید در هنگام توسعه به دردتان بخورد پیدا کنید. اگر با نوع دیگر هوکها یعنی filter آشنا نیستید، بعد از کمی تمرین، به سراغ آموزش فیلتر در وردپرس بروید. اگر سؤال یا پیشنهادی دارید، از بخش دیدگاهها ارسال کنید. 🙂
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
خیلی روان و عالی.خیلی بهم کمک کرد.ممنونم
خداروشکر که براتون کاربردی بوده. ممنونم به خاطر انرژی خوبی که بهمون میدید. 🙂
لطفا اموزشی برای توضیح هوک ها بذارین. بیانتون عالیه
حتماً
ممنون برای پیشنهاد و لطفتون. یه سری آموزشی توسعه وردپرس توی برنامه آیندمون هست که انشاءالله آموزش بدیم. سعی میکنم تا دو ماه آینده شروعش کنم.