تابع add_action در وردپرس
تابع add_action() یکی از مهمترین توابع در وردپرس است که به توسعهدهندگان اجازه میدهد تا کدهای سفارشی خود را در نقاط خاصی از اجرای وردپرس (به نام Hook یا قلاب) اضافه کنند. این تابع در اصل برای اتصال یا “hook” کردن یک تابع شخصیسازیشده به یکی از اکشنهای داخلی وردپرس استفاده میشود.
مفهوم Hook در وردپرس
در وردپرس، Hookها به دو دسته اصلی تقسیم میشوند:
- Actions (اکشنها): برای اجرای کد در زمانهای خاص از چرخه اجرای وردپرس مانند بارگذاری صفحه، ذخیره پست، ورود کاربر و غیره.
- Filters (فیلترها): برای تغییر یا اصلاح دادهها قبل از نمایش یا ذخیره آنها.
تابع add_action() برای اتصال یک تابع دلخواه به یک اکشن خاص استفاده میشود تا وردپرس آن تابع را در زمان اجرای آن اکشن فراخوانی کند.
ساختار کلی تابع add_action()
add_action( $hook_name, $callback, $priority, $accepted_args );
پارامترهای تابع
| پارامتر | توضیح |
|---|---|
$hook_name | نام اکشنی که میخواهید تابع خود را به آن متصل کنید. مانند init، wp_head، یا wp_footer. |
$callback | نام تابعی که باید هنگام اجرای اکشن فراخوانی شود. |
$priority | اولویت اجرای تابع. مقدار پیشفرض ۱۰ است. هرچه مقدار کمتر باشد، تابع زودتر اجرا میشود. |
$accepted_args | تعداد آرگومانهایی که تابع شما از اکشن دریافت میکند. مقدار پیشفرض ۱ است. |
نمونه ساده از استفاده تابع add_action()
function my_custom_message() {
echo '<p>Welcome to my WordPress site!</p>';
}
add_action('wp_footer', 'my_custom_message');
در مثال بالا، تابع my_custom_message() در قسمت پایانی سایت (در زمان اجرای اکشن wp_footer) اجرا میشود و یک پیام ساده در انتهای صفحه نمایش داده میشود.
توضیح منطق:
در واقع، وردپرس هنگام رسیدن به اکشن wp_footer، همه توابعی که با add_action() به آن متصل شدهاند را فراخوانی میکند. در اینجا تابع ما اجرا میشود و خروجی HTML در انتهای سایت چاپ میگردد.
افزودن اکشن در مرحله بارگذاری اولیه وردپرس
function custom_init_function() {
// کدی که در هنگام بارگذاری اولیه وردپرس اجرا میشود
error_log('Custom init function executed');
}
add_action('init', 'custom_init_function');
در این مثال، تابع ما در هنگام بارگذاری اولیه وردپرس (یعنی زمانی که وردپرس آماده پردازش درخواستها میشود) اجرا میگردد. این زمان برای ثبت نوع پست سفارشی یا تغییر تنظیمات پایه مناسب است.
نکته مهم:
اکشن init قبل از بارگذاری کامل قالب اجرا میشود، بنابراین برای کارهایی مانند ثبت منوها یا نوع پستها بسیار مفید است.
استفاده از اولویت (Priority) در add_action()
گاهی نیاز است چندین تابع به یک اکشن متصل شوند. در چنین حالتی میتوانید از پارامتر سوم یعنی $priority برای تعیین ترتیب اجرا استفاده کنید.
function first_function() {
echo '<p>First Function</p>';
}
function second_function() {
echo '<p>Second Function</p>';
}
add_action('wp_footer', 'first_function', 5);
add_action('wp_footer', 'second_function', 15);
در اینجا تابع first_function() زودتر از second_function() اجرا میشود چون اولویت آن کمتر است (۵ در مقابل ۱۵).
ارسال آرگومان به توابع اکشن
برخی از اکشنها در وردپرس دادههایی را به توابع متصلشده ارسال میکنند. برای دریافت آنها، باید پارامتر چهارم تابع add_action() را به درستی تنظیم کنید.
function custom_save_post( $post_id, $post, $update ) {
error_log( "Post ID: $post_id, Updated: " . ($update ? 'Yes' : 'No') );
}
add_action('save_post', 'custom_save_post', 10, 3);
در مثال بالا، وردپرس هنگام ذخیره پست، تابع custom_save_post() را فراخوانی کرده و اطلاعاتی درباره پست و وضعیت آن (جدید یا بهروزرسانیشده) ارسال میکند.
تحلیل فنی:
$post_id: شناسه پست ذخیرهشده.$post: شیء کامل پست (از نوعWP_Post).$update: مشخص میکند آیا پست بهروزرسانی شده یا تازه ایجاد شده است.
حذف اکشن با استفاده از remove_action()
در صورت نیاز به حذف یک اکشن ثبتشده، میتوانید از تابع remove_action() استفاده کنید.
remove_action('wp_footer', 'my_custom_message');
این دستور باعث میشود تابع my_custom_message() دیگر در زمان اجرای wp_footer فراخوانی نشود.
نکات حرفهای در استفاده از add_action()
- از نامهای تابع منحصربهفرد استفاده کنید: تا با سایر افزونهها یا قالبها تداخل نداشته باشد.
- تابع را داخل شرطها تعریف نکنید: زیرا ممکن است Hook در زمان دیگری بارگذاری شود.
- برای مدیریت ساختار کد از کلاسها استفاده کنید: میتوانید اکشنها را در متدهای کلاسها ثبت کنید.
نمونه استفاده از کلاس و اکشن
class My_Custom_Class {
public function __construct() {
add_action('init', array($this, 'register_post_type'));
}
public function register_post_type() {
register_post_type('book', array(
'label' => 'Books',
'public' => true,
'supports' => array('title', 'editor', 'thumbnail')
));
}
}
new My_Custom_Class();
در این مثال، اکشن init باعث اجرای متد register_post_type() میشود که نوع پست سفارشی book را ثبت میکند. این روش تمیز و مقیاسپذیر برای پروژههای حرفهای است.
تفاوت add_action() و add_filter()
| ویژگی | add_action() | add_filter() |
|---|---|---|
| هدف | اجرای تابع در زمان خاص | تغییر یا فیلتر دادهها |
| خروجی تابع | مهم نیست (چیزی بازگردانده نمیشود) | باید مقدار جدید بازگرداند |
| مثال رایج | add_action('wp_footer', 'my_func') | add_filter('the_content', 'my_func') |
جمعبندی
تابع add_action() یکی از ابزارهای کلیدی در توسعه وردپرس است که امکان افزودن رفتارهای دلخواه در نقاط مختلف سیستم را فراهم میکند. درک عمیق از نحوه عملکرد Hookها به شما کمک میکند تا افزونهها و قالبهای حرفهایتر و قابلگسترشتری ایجاد کنید.
آیا این مطلب برای شما مفید بود ؟




