آشنایی با هوک( Hook ) در طراحی سایت وردپرس
سیستم مدیریت محتوای وردپرس سیستمی قابل توسعه و تغییر است. اگر قصد داشته باشید تا طراحی سایت خود را با وردپرس انجام دهید، وردپرس این امکان را به شما میدهد تا نیازهای سفارشی خود را با استفاده از افزونههای از پیش آماده شده یا با نوشتن افزونههای جدید در آن پیادهسازی کنید.
برای مثال وردپرس به صورت پیشفرض دارای امکانات فروشگاه اینترنتی نیست ولی با نصب افزونهی ووکامرس میتوان قابلیت فروش محصولات فیزیکی و الکترونیکی را به آن اضافه نمود.
افزونهها یا پلاگینهای وردپرس با استفاده از هوکها( Hook ) فعالیت خود را انجام میدهند و به همین دلیل برای اضافه کردن قابلیتهای جدید به وردپرس نیازی نیست که کدهای هستهی وردپرس تغییراتی داشته باشند.
هوکها در برنامهنویسی مفهومی عمومی هستند که در وردپرس با نام اکشن( Action ) و فیلتر( Filter ) شناخته میشوند. برای درک بهتر تفاوت اکشنها و فیلترها، این نوشته را بخوانید.
هوکها چه کاری انجام میدهند ؟
هوک مفهومی عمومی در برنامهنویسی است. عملکرد هوکها به این صورت است که برنامهی اصلی( در اینجا وردپرس ) هنگام اجرای عملیات یا فرآیندهای مورد نظر خود، در محلهایی خاص، بررسی میکند که آیا در این قسمت باید عملکرد معمول انجام شود یا عملکردی سفارشی توسط یک افزونه جایگزین عملکرد عادی شده است.
برای مثال وردپرس هنگامی که قصد دارد عنوان نوشتههای سایت را در خروجی چاپ کند، پیش از ارسال محتوا به خروجی، بررسی میکند که آیا افزونهای قصد تغییر این عنوان را دارد یا خیر. افزونههایی که کار فارسیسازی وردپرس را انجام میدهند در این نقطه وارد عمل میشوند و عنوان مقاله را بررسی میکنند که آیا در آن از عددهای انگلیسی استفاده شده یا خیر. اگر عدد انگلیسی در عنوان نوشته بیابند، آن را به عددهای فارسی تبدیل میکنند و سپس عنوان تغییر یافته در سایت مشاهده میشود.
اکشنها و فیلترها در وردپرس
اکشنها و فیلترها دو نوع هوک در وردپرس هستند.
به طور خلاصه، اکشنها هوکهایی هستند که صرفا در زمانی خاص اجرا میشوند. برای مثال یک اکشن میتواند اطلاع از باز شدن صفحهی اول سایت باشد. این اکشن سپس میتواند هر کار مورد نظر خود را انجام دهد. اکشنها مقدار ورودی و خروجی ندارند.
در طرف مقابل، فیلترها علاوه بر کاری که اکشنها انجام میدهند، ورودی و خروجی نیز دارند. مثالی که در مورد عنوان نوشتهها در قسمت قبلی گفته شد، یک نمونه فیلتر بود. ورودی این فیلتر، عنوان اصلی نوشته است که در پایگاه داده ذخیره شده و خروجی آن، عنوان جدید است که اعداد انگلیسی در آن به اعداد فارسی تبدیل شدهاند.
معایب هوکها
هوکها دارای دو اشکال اصلی هستند:
- نیاز به تعداد بسیار زیاد هوک برای ایجاد قابلیت توسعهپذیری در نرمافزار. هر چه حجم کدهای نرمافزار بیشتر شود، تعداد هوکها هم باید بیشتر و بیشتر شوند که باعث کند شدن هر چه بیشتر سیستم میشود.
- هوکها در هر صورت محدود هستند و هر تغییری را نمیتوان در عملکردهای سیستم به انجام رساند. اگر در تابعی از وردپرس هوک تعریف نشده باشد، امکان تغییر عملکرد آن تابع توسط افزونهها وجود ندارد.
راه حلهای جایگزین برای هوکها
یکی از روشهای مدرن که در برنامهنویسی مدرن استفاده میشود IoC یا Inversion of Control یا وارونگی کنترل است. در این روش امکان جایگزین کردن کلاسها یا توابع استفاده شده در سیستم به طول کلی وجود دارد و به همین دلیل کنترل بیشتری روی عملکردهای اصلی هسته سیستم به وجود میآید.
روشهای دیگری مثل Dependency Injection و Composition نیز وجود دارند که میتوانند برای برخی عملکردهای سیستم مورد استفاده قرار گیرند.
با توجه به ساختار قدیمی کدهای وردپرس و برخی محدودیتهایی که در زبان برنامهنویسی php وجود دارند و همچنین نیاز به سازگاری بین نسخههای وردپرس، انجام تغییرات بنیادین در هستهی وردپرس به کندی صورت میپذیرد.