آموزش اکشن‌ها، فیلترها و هوک‌ها برای وردپرس‌کاران | قسمت اول: هوک‌ها و اکشن‌ها

31 فروردین 1399
file-z2g6vx0EqM

من یک وردپرس کار هستم. زمانی که می خواستم «نحوه ی استفاده از هوک ها در وردپرس» را یاد بگیرم (اون اوایل!)، خیلی دنبال یک آموزش مناسب گشتم اما خیلی زود ناامید شدم. زیرا هیچ مقاله یا آموزش خوبی که بتواند اکشن و فیلتر و هوک در وردپرس را برای من توضیح دهد وجود نداشت. در حقیقت مقالات زیادی بودند که این مسائل را توضیح می دادند اما بسیار پیچیده نوشته شده بودند. این مقالات فقط برای برنامه نویسی ها و توسعه دهندگان حرفه ای قابل فهم بود. مثلا اینطور آموزش را شروع کرده بودند:

"اکشن ها و فیلترها این امکان را برای شما فراهم می آورند تا بتوانید فانکشنلیتی خاصی را به سایت اضافه کنید و یا رفتار سایت را با استفاده از هوک ها و با بازفراخوانی یک فانکشن به یک تگ خاص در کدهای هسته تغییر دهید!"

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

دروس پایه

هر برگه ی وردپرس از فانکشن ها (functions) و کوئری های (database queries) زیادی تشکیل شده است که با قالب وردپرس همکاری می کنند و با هم خروجی سایت را نمایش می دهند. خروجی هایی مثل متن ها، عکس ها، استایل ها و غیره. مرورگر، همه ی این چیزهای عجیب و غریب را (فانکشن ها و کوئری ها و متن ها و کدها و...) کنار هم می گذارد و نتیجه را در قالب یک برگه از سایت، به ما نمایش می دهد.

در طول کدهای وردپرس هوک هایی (hook) وجود دارند. hook در لغت به معنای قلاب یا چنگک است. به این خاطر اینگونه نامگذاری شده است که کدنویسان کدهایشان را به این هوک ها اصطلاحا آویزان (hang) می کنند. یعنی کدها به یک چنگک (که hook باشد) آویزان یا وابسته می شوند. (در ادامه بهتر متوجه خواهید شد)

دو نوع هوک وجود دارند: اکشن ها (Actions) و فیلترها (Filters).

  • اکشن ها این امکان را به شما می دهند تا عملکردی (functionality) را در یک نقطه ی خاص از پروسه ی بارگذاری برگه، اضافه نمایید. مثلا زمانی که می خواهید ویجت یا منو یا پیام تبلیغاتی ای را به برگه ی خود اضافه کنید، این کار را با اکشن ها انجام می دهید.
  • فیلترها این امکان را به شما می دهند که داده ها را هنگام پردازش رهگیری و اصلاح کنید. مثلا می خواهید یک کلاس css دیگر را به یک المان html اختصاص دهید، یا می خواهید بخشی از برگه ی خود را اصلاح و ویرایش کنید. به زبان ساده تر:

اکشن ها چیزی را انجام می دهند، و فیلترها چیزی را تغییر می دهند!

بررسی جزئیات

«وقتی گیل (Gill) از راه رسید، به او بگویید که برای تهیه نقاشی به فروشگاه برود. وقتی جک رسید و از خودش تعریف و تمجید کرد، رویش را کم کنید».

اکشن ها:

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

ما می توانیم کار بالا را با استفاده از هوک ها و اکشن ها انجام دهیم. با چه فانکشنی؟ با فانکشن add_action. با چه هوکی؟ آن را تعریف می کنیم (هوک: بعد از رسیدن گیل). در حقیقت هوک نشان دهنده ی زمان انجام اکشن می باشد. (به خاطر دارید که اکشن کاری را انجام می داد)

اگر بخواهیم جمله ی بالا را در قالب کدهای php بنویسیم، چیزی شبیه به کد زیر خواهد شد:

// فرستادن گیل برای تهیه ی نقاشی
add_action( 'after_gill_arrives' , 'send_gill_to_get_paint', 10 , 2 );
function send_gill_to_get_paint( $gill_has_keys, $gill_has_car ) {
// آنگاه اگر گیل هم کلید داشت و هم ماشین داشت
if ( $gill_has_keys && $gill_has_car ) {
    echo 'گیل لطفا برو نقاشی بخر و بیاور.دستت درد نکنه!';
  }
}<br>

در کد بالا انتظار دارم بتوانید کلمات انگلیسی کد را ترجمه کنید. ولی به هر حال معنای هر یک را می نویسم:

  • after gill arrives: بعد از اینکه گیل رسید.
  • send gill to get paint: گیل را بفرستید تا نقاشی تهیه کند.
  • gill has keys: گیل کلید دارد.
  • gill has car: گیل ماشین دارد.

در کد بالا چه کار کردیم:

  • ما با نوشتن کد بالا باعث رخ دادن یک اتفاق شده ایم یا در حقیقت باعث انجام شدن چیزی شده ایم. در اصطلاح برنامه نویسی، عمل «send gill to get paint» را به عمل «after gill arrives» قلاب یا وابسته (hook) کرده ایم. یعنی «send gill to get paint» زمانی اتفاق خواهد افتاد که «after gill arrives» اتفاق بیفتد. اتفاق افتادن دومی، وابسته به اتفاق افتادن اولی است.
  • فانکشن send_gill_to_get_paint را اضافه کردیم تا در شرایطی خاص، متنی را برای ما به نمایش بگذارد.
  • از دو آرگومان برای ایجاد شرایط بیشتر نیز استفاده کردیم. آرگومان های «gill_has_keys» و «gill_has_car». بگذارید شرایط را کمی برایتان واضح تر کنم. در ابتدای کد، یک عمل را به عملی دیگر قلاب کردیم یعنی گفتیم زمانی که اولی اجرا شد، دومی را نیز فراخوانی کن. حال اگر دومی دو شرط رو برو را هم داشت، فلان متنی را به نمایش بگذار.
  • عدد 10 اولویت اجرای اکشن را مشخص می کند. این عدد به صورت پیش فرض 10 می باشد که باعث می شود پس از اجرای فانکشن های پیش فرض وردپرس به اجرا در بیاید. اگر بخواهیم فانکشنی قبل از اکشن ما (که عدد 10 را گرفته) به اجرا در بیاید، باید به آن عددی کوچک تر از 10 را اختصاص بدهیم.
  • عدد 2 نشان دهنده ی تعداد آرگومان هایی (متغیرهایی) است که فانکشن می تواند داشته باشد. این آرگومان ها از طرف اکشن‌هوک به فانکشن پاس داده می شوند.

اکشن چگونه کار می کند؟

به زبان ساده، add_action به وردپرس می گوید «زمانی که به هوک مربوطه رسیدی (do_action() hook) کاری را انجام بده».

پس در مثال بالا فقط زمانی می توانیم از add_action استفاده کنیم که اکشن‌هوک after_gill_arrives در پوسته یا افزونه وجود داشته باشد. افزونه یا پوسته ی ما باید یک چنین چیزی را درون خود داشته باشد:

do_action( ‘after_gill_arrives’ , $gill_has_keys = true , $gill_has_car = true );

کد بالا به وردپرس می گوید که یک هوک با نام after_gill_arrives ایجاد کند. این هوک همه ی اکشن هایی که به آن متصل باشند را فراخوانی و اجرا خواهد کرد. همچنین آرگومان هایی را پاس میدهد که در اینجا gill_has_keys$ و gill_has_car$ هستند.

یک مثال ساده از add_action

در مثال زیر می خواهیم مقداری نوشته یا متن را بعد از هدر بنویسیم.

// Add some text after the header
add_action( '__after_header' , 'add_promotional_text' );
function add_promotional_text() {
  // If we're not on the home page, do nothing
  if ( !is_front_page() )
    return;
  // Echo the html
  echo "<div>Special offer! June only: Free chocolate for everyone!</div>";
}<br>

در کد بالا فرض بر آن است که ما در درون کدهای اصلی پوسته ی خود، کد زیر را از قبل تعریف کرده ایم:

do_action ( '__after_header' )

after_header یا «بعد از هدر»، همان جایی است که add_action در کد بالا خود را هوک کرده است.

شما همچنین می توانید از remove_action برای حذف اکشن ها از هوک ها استفاده کنید. اما چگونه remove_action را باید به کدهای خود بیفزاییم؟ بله درسته! دوباره با استفاده از add_action.

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


منبع: سایت Press Customizr Documenta

نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.