هوک در وردپرس چیست؟ انواع hook

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

همانطور که می‌دانید، وردپرس یک سیستم مدیریت محتوای انعطاف‌پذیر است. مثلاً ما می‌توانیم با یک افزونه یا پوسته، امکانات جدیدی در سایت ایجاد کنیم. همچنین برخی از این افزونه‌ها، تغییراتی در فرآیندهای اصلی ایجاد می‌کنند.

برای مثال، فرض کنید می‌خواهیم فیلدهای فرم ثبت‌نام یا ورود به سایت را افزایش یا کاهش دهیم. برای این کار از هوک‌ها یا hook در وردپرس استفاده می‌کنیم.

ابتدا توضیحی درمورد مفهوم هوک می‌دهم و سپس انواع آن را با مثال بررسی می‌کنیم.

هوک وردپرس چیست؟

hook به معنی «قلاب» یا «چنگک» است. کدِ پردازش‌هایی که در وردپرس انجام می‌شود در سه بخش اصلی قرار دارند:

  • هستهٔ وردپرس (که معمولاً در wp-include و wp-admin هستند)
  • پوسته (یا همان قالب سایت)
  • افزونه‌های فعال

می‌دانیم که در هنگام به‌روزرسانیِ هر کدام از این‌ها، فایل‌هایشان بازنویسی می‌شوند. در نتیجه اگر تغییراتی را مستقیماً در کدهای این بخش‌ها ایجاد کرده باشیم، از بین می‌روند!

برای دستکاری بخش‌های مختلف سایت، یکسری قلاب در موقعیت‌های مختلف وجود دارد. ما می‌توانیم یک تابع PHP بنویسیم و آن را به قلابِ مورد نظر وصل کنیم. در این صورت زمانی که آن اتفاق رخ دهد، تابع ما نیز اجرا می‌شود.

در هر کدام از این سه بخش، قلاب‌هایی وجود دارد که می‌توانیم با وصل شدن به آن‌ها کارهای خاصی انجام دهیم. «فرم ورود به سایت» را در نظر بگیرید.

چندین هوک یا قلاب در وردپرس برای این فرم وجود دارد. چند مورد برای نمایش فرم و چند مورد برای موقعیت‌های پس از ارسال فرم؛ مثلاً:

  • هوک نمایش فیلدهای فرم ورود
  • هوک پیش‌پردازش داده‌های ارسالی $_POST
  • هوک پس از ورود (وقتی ورود موفقیت‌آمیز بود)
Wordpress Hook چیست؟
تعریف هوک در وردپرس

انواع hook در وردپرس

دو نوع هوک در وردپرس وجود دارد که توضیح مختصری در مورد آن‌ها می‌دهم و در بخش بعدی مثال می‌زنم:

  1. با هوک اکشن (Action Hook)، پس از رخ‌دادن چیزی، تابع ما اجرا می‌شود.
  2. با هوک فیلتر (Filter Hook)، متغیرها و پارامترهایی که در روند کارهای وردپرس وجود دارند را دستکاری می‌کنیم.

هر کدام از سه هوکی که بالاتر مثال زدم یکی از این دو نوع است. مثلاً هوک اول از نوع فیلتر است (چون باید بتوانید مقادیر را تغییر دهیم) و دو مورد بعدی از نوع اکشن است (چون می‌خواهیم پس از اتفاق افتادن چیزی، کاری انجام دهیم).

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

هوک action

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

  • می‌خواهیم زمانی که کاربر به حساب کاربری‌اش وارد شد، یک پیامک یا ایمیل اطلاع‌رسانی برای او ارسال کنیم.
  • زمانی که یک نام کاربری جدید در سایت ایجاد شد، اطلاعاتش را در سیستم CRM خودمان ذخیره کنیم.
  • زمانی که پوسته یا افزونه در حال فعالسازی است، جداولی در دیتابیس ایجاد کنیم یا در زمان غیرفعالسازی، داده‌ها را حذف کنیم.
  • وقتی کاربر از درگاه پرداخت برگشت، نتیجهٔ پرداخت را بررسی و وضعیت سفارش را تغییر دهیم.

هر کدام از این موقعیت‌ها یک نام (نامِ هوک) در وردپرس دارند. مثلاً اکشن هوک موقعیت اول (پس از ورود موفقیت‌آمیز) wp_login نام دارد.

تنها کاری که باید انجام دهیم، این است که یک تابع برای ارسال ایمیل اطلاع‌رسانی پس از ورود بنویسیم. فرض کنید این کار را انجام داده و نام تابع را sbzd_send_loggedin_notif() گذاشته‌ام.

حالا با تابع add_action() این تابع را به موقعیت وصل می‌کنیم: (اصطلاحاً تابع را به موقیت قلاب می‌کنیم)

add_action( 'wp_login', 'sbzd_send_loggedin_notif');

چند صد اکشن هوک در هستهٔ وردپرس وجود دارد و با نصب هر افزونه ممکن است تعدادی به این مقدار اضافه شود. می‌توانید لیست هوک‌های action پیشفرض وردپرس را در این صفحه ببینید.

اگر مایلید با ساختار اکشن‌ها آشنا شوید، یک اکشن تعریف کرده و از آن‌ها در پروژه‌های خود استفاده کنید، آموزش زیر را حتماً ببینید:

آموزش اکشن در وردپرس و کاربردهای آن

آموزش اکشن در وردپرس و کاربردهای آن

هوک filter وردپرس

با قلاب فیلتر می‌توانیم متغیرها و پارامترها را دستکاری کنیم؛ حالت‌های زیر را در نظر بگیرید:

  • طول خلاصه نوشته (excerpt) را تغییر دهیم.
  • در انتهای همهٔ نوشته‌ها یک باکس تبلیغات نمایش داده شود.
  • مقدار متغیر آدرس ورود به سایت را از پیشفرض (wp-login.php) تغییر دهیم.
  • می‌خواهیم نوع نمایش قیمت محصول در ووکامرس را تغییر دهیم.

مشابه اکشن‌ها، هر کدام از این مقادیر نام‌هایی دارند که ما می‌توانیم برایشان فیلتر بنویسیم. فیلتر را مشابه یک صافی در نظر بگیرید؛ یعنی مقداری را دریافت کرده و مقداری را به عنوان خروجی می‌دهد. البته ممکن است این دو مقدار هیچ ارتباطی بهم نداشته باشند!

مثلاً برای حالت اول (تعداد کلمات خلاصه نوشته)، می‌توانیم اندازهٔ پیشفرض را ۲ برابر کنیم یا مقدار آن را اجباراً 50 بگذاریم! برای درک بهتر به تابعی که برای این کار نوشتم توجه کنید:

function sbzd_excerpt_length($length) {
    // return $length * 2;
    return 50;
}

آرگومان ورودی در توابعی که برای هوک فیلتر وردپرس استفاده می‌کنیم، همان مقادیری هستند که می‌خواهیم آن‌ها را دستکاری کنیم.

در خط اولِ بدنه که کامنت شده، از آرگومان ورودی (اندازهٔ پیشفرض طول excerpt) استفاده کرده‌ام؛ اما در خط دوم صرفاً یک عدد ثابت را برگردانده‌ام.

حال برای اینکه تابع را قلاب کنم، از add_filter() کمک می‌گیرم:

add_filter( 'excerpt_length', 'sbzd_excerpt_length' );
مثال اجرای فیلتر هوک
انتزاع Filter Hook

چند صد مقدار دیگر در وردپرس وجود دارد که با کمک فیلتر هوک وردپرس می‌توانیم آن‌ها را تغییر دهیم. همچنین با نصب افزونه‌های مختلف این تعداد افزایش پیدا می‌کند. مثلاً woocommerce تعداد زیادی قلاب برای فیلتر کردن در اختیار ما می‌گذارد. لیستی از هوک‌های فیلتر پیشفرض وردپرس را می‌توانید در مستنداتش ببینید.

به‌عنوان مثال دیگر، در کد تغییر ایمیل وردپرس، دو فیلتر برای تغییر مقادیر آدرس ایمیل و نام ایمیل فرستنده در وردپرس استفاده کرده‌ایم.

تابع add_filter() مشابه add_action() پارامترهای دیگری نیز دارد که می‌توانیم از آن‌ها استفاده کنیم. سعی می‌کنم به زودی آموزشی برای آن در سبز دانش منتشر کنم.

آموزش فیلتر در وردپرس و استفاده از Filter Hook

آموزش فیلتر در وردپرس و استفاده از Filter Hook

خلاصه تعریف هوک در وردپرس

در آموزش تعریف hook وردپرس با ۲ نوع اصلی قلاب یا چنگک آشنا شدیم. هوک‌ها به برنامه‌نویسان وردپرس این امکان را می‌دهند تا تغییراتی در روندهای پیشفرض وردپرس یا افزونه‌های آن ایجاد کنند. با این روش ما می‌توانیم بدون تغییر کدهای اصلی، عملیات‌های دلخواهمان را اجرایی کنیم.

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

  • action اطلاعاتی که دریافت می‌کند، می‌گیرد، با آن کاری انجام می‌دهد و چیزی را برمی‌گرداند. اکشن هوک چیزی را به قلاب اصلی برنمی‌گرداند.
  • filter اطلاعات که دریافت می‌کند را به‌نحوی اصلاح کرده و آن را به هوک اصلی برمی‌گرداند.

علاوه بر هزاران هوک پیشفرضی که در هستهٔ وردپرس وجود دارد، هر افزونه و حتی پوسته‌های تجاری و بزرگ، یکسری هوک‌های اختصاصی در اختیار ما می‌گذارند تا بتوانیم تغییرات موردنظرمان را در کدهای آن‌ها اعمال کنیم.

اگر با افزونه فروشگاه‌ساز ووکامرس کار کنید، ممکن است بخواهید فیلدهای اضافی در صفحه تسویه حساب را حذف کنید. در این حالت می‌خواهیم یکسری داده (فیلدهای فرم تسویه حساب) را «اصلاح» کنیم، بنابراین آیتم‌ها را با یک فیلتر هوک حذف می‌کنیم.

در دوره توسعه وردپرسی که تا حدود دو ماه دیگر در سبز دانش منتشر می‌شود تمام این کارها را روی یک پروژه واقعی انجام می‌دهیم.

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

اگر سؤال یا تجربه‌ای در مورد hookها دارید، بخش دیدگاه‌ها برای شماست. 🙂