ویژگی تصویر

تابع add_action در وردپرس

  /  وردپرس   /  تابع add_action در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع 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ها به شما کمک می‌کند تا افزونه‌ها و قالب‌های حرفه‌ای‌تر و قابل‌گسترش‌تری ایجاد کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: