تفاوت فیلتر و اکشن در افزونههای وردپرس
وردپرس سیستمی قابل توسعه و تغییر است. این تغییرات بدون تغییرات در سورس هستهی وردپرس و با استفاده از اکشنها و فیلترهای تعریف شده در سورس وردپرس قابل انجام هستند.
در ادامه معنی و مفهوم اکشن و فیلتر و نمونه کدهایی برای به کارگیری این ویژگیها در طراحی سایت با وردپرس را مشاهده خواهید کرد.
اکشن( Action ) چیست؟
اکشن یا Action یک رویداد است که در نقاط مختلف اجرای هستهی وردپرس اتفاق میافتد. افزونههای وردپرس میتوانند از اجرای این رویداد باخبر شوند و عملیات مورد نظر خود را در این نقطه به انجام برسانند. عملیات انجام شده توسط افزونهها در این نقطه اثری روی عملکرد هستهی وردپرس برجای نمیگذارند. برای مثال یک اکشن میتواند شروع به کار پردازش آدرس درخواستی باشد. در این هنگام ممکن است یک افزونهی آمارگیر بخواهد آدرسهای درخواستی کاربر را در جدولی از پایگاه داده ذخیره کند و ادامهی کار را به وردپرس واگذار کند.
فیلتر( Filter ) چیست؟
فیلترها از نظر ظاهری کاملا شبیه اکشنها هستند. با این تفاوت که میتوانند اطلاعاتی را از هستهی وردپرس دریافت کنند، آن را تغییر دهند و مجددا به هسته برگردانند. در نتیجه فیلترها ممکن است باعث ایجاد تغییرات در عملکردها یا فرآیندهای هستهی وردپرس باشند. برای مثال یک فیلتر ممکن است قبل از ارسال محتوای صفحات روی خروجی سایت فراخوانی شود. یک افزونه قبل از ارسال محتوای صفحات میتواند این محتوا را بررسی کند و پس از انجام تغییرات، آن را مجددا به هستهی وردپرس برگرداند. افزونههای فارسی که اعداد موجود در صفحه را از حالت لاتین به فارسی تبدیل میکنند از این فیلتر استفاده میکنند.
استفاده از اکشنها
استفاده از اکشنها با استفاده از دو تابع اصلی do_action برای ایجاد اکشن در هستهی وردپرس و تابع add_action در افزونهها برای گوش به زنگ ایستادن برای رخداد اکشن کاربرد دارند. به مثال مقابل توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // هستهی وردپرس - تعریف اکشن و صدا زدن توابع گوش به زنگ برای این اکشن $time = time(); do_action( 'wordpress_start', $time, $current_user_name ); // داخل افزونهی وردپرس - گوش به زنگ بودن برای رخداد اکشن add_action( 'wordpress_start', 'roka_wordpress_start', 10, 2 ); // تابعی که هنگام رخداد اکشن صدا زده میشود function roka_wordpress_start( $time, $cur_user_name ) { // انجام عمل دلخواه با توجه به ورودیهای دریافت شده از وردپرس } |
در مثال بالا تابع add_action دو پارامتر اضافی در انتها دریافت میکند. پارامتر اول به زنگ بودن را مشخص میکنند. هر چه عدد بزرگتر باشد، این تابع دیرتر از سایر افزونهها از رخداد این اکشن باخبر خواهد شد.
پارامتر دوم نشان میدهد تابع تعریف شده برای پاسخگویی به این اکشن چند پارامتر قبول میکند. این تعداد میتواند کمتر یا مساوی تعداد پارامترهای اکشن اصلی باشد.
یک تابع دیگر هم برای استفاده از اکشنها به نام do_action_ref_array نیز وجود دارد که امکان تغییر دادن و برگشت دادن متغیرهای ارسالی را دارد. البته استفاده از این شیوه وابسته به نوع اکشن استفاده شده در هستهی وردپرس است.
استفاده از فیلترها
استفاده از فیلترها با کمک دو تابع اصلی apply_filters در هستهی وردپرس برای تعریف فیلتر و تابع add_filter برای گوش به زنگ بودن رخداد فیلتر استفاده میشود. به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php // ایجاد فیلتر در هستهی وردپرس و دریافت خروجی از افزونهها $page_content = apply_filters( 'the_content', 'page content', $arg1, $arg2 ); // گوش به زنگ بودن برای زمان اجرای فیلتر - داخل کدهای افزونه add_filter( 'the_content', 'roka_the_content', 10, 3 ); // تابعی که هنگام صدا زدن شدن فیلتر اجرا میشود function roka_the_content( $content, $arg1, $arg2 ) { // تغییر محتوای صفحه بر اساس نیاز و پارامترهای ارسالی // .... // برگشت دادن محتوای صفحه به فیلتر - الزامی return $content; } |
تابع add_filter همانند تابع add_action چهار پارامتر میپذیرد. این پارامترها به ترتیب عبارتند از «نام فیلتر»، «نام تابع»، «ترتیب و اولویت اجرا»، و «تعداد پارامترهای تابع پاسخگو».
روش پیدا کردن اکشنها و فیلترهای لازم برای نوشتن افزونه
برخی از اکشنها و فیلترهای پرکاربرد در هستهی وردپرس در مستندات آن دارای توضیحات هستند. ولی بسیاری از آنها دارای مستندان نیستند و برنامهنویس با بررسی کدهای وردپرس میبایست آنها را بیابد و در افزونه و قالب مورد استفاده قرار دهد.
تعریف اکشن و فیلتر در افزونهها
تعریف اکشنها و فیلترها محدود به هستهی وردپرس نیست. بسیاری از افزونهها نیز با استفاده از این ویژگی وردپرس، افزونهی خود را قابل توسعه طراحی کردهاند.
برای مثال افزونهی بزرگ ووکامرس یکی از این موارد است که تعداد زیادی اکشن و فیلتر برای تغییر عملکرد فروشگاه اینترنتی در اختیار برنامهنویسان قرار میدهد. به همین دلیل پس از نصب ووکامرس، امکان نصب افزونههای متعدد دیگر که کارکرد فروشگاه ووکامرس را تغییر میدهند امکانپذیر است.