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

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

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

فیلترها در وردپرس

جمله ی «وقتی جک رسید و از خودش تعریف و تمجید کرد، رویش را کم کنید و نظرش را در اینباره عوض کنید.» را به یاد دارید؟

ما می توانیم «نظر جک راجع به خودش» را با استفاده از هوک کردن به یک فیلتر عوض کنیم. با استفاده از add_filter می توانیم یک عملکرد را اصلاح کنیم یا چیزی را در نقطه ای خاص تغییر دهیم.

عمل «کم کردن روی جک و تغییر نظر او راجع به خودش» در کد php به شکل زیر می شود:

// Cut Jack's boasting
add_filter( 'jacks_boast' , 'cut_the_boasting');
function cut_the_boasting($boast) {
  // Replace "best" with "second-best"
  $boast = str_replace ( "best" , "second-best" , $boast );
  // Append another phrase at the end of his boast
  $boast = $boast . ' However, Gill can outshine me any day.';
  return $boast;
}<br>

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

  • به دنبال همان «چیز خاص» گشتیم که میخواستیم تغییرش دهیم. آن چیز «تعریف و تمجید جک از خودش» می باشد. ما آن را در php به شکل فیلتر jacks_boast تعریف کردیم.
  • زمانی که آن چیز را پیدا کردیم، ما «بهترین بودن جک» را با دوم بودن او عوض کردیم (جای best را با second-best عوض کردیم). در اصطلاحات برنامه نویسی می گوییم: ما با استفاده از فراخوانی فانکشن cut_the_boasting اقدام به فیلترکردن خروجی نمودیم. فانکشن cut_the_boasting یک متن را به جای متنی دیگر قرار می دهد.
  • ما از آرگومان یا متغیر boast$ به عنوان یک string حاوی متنی مثل «من بهترین هستم» استفاده کردیم تا به وسیله ی این آرگومان ها بتوانیم تغییرات را اعمال کنیم.
  • در انتهای فانکشن هم یک string را بازگردانی (return) کردیم. این کار لازم است. چرا که اگر بازگردانی نکنیم، هیچ چیز نشان داده نخواهد شد (مثل این می شود که انگار جک را ساکت کرده باشید!)

فیلترها در وردپرس چگونه کار می کند؟

به زبان ساده add_filter به وردپرس می گوید که یک دیتا را با چیزی که ما می خواهیم عوض کند. چه زمانی وردپرس این عملیات تعویض را انجام دهد؟ زمانی که به فیلترهوکی با نام jacks_boast رسید.

پس فقط زمانی می توانیم از add_filter استفاده کنیم که مطمئن باشیم فیلترهوکی با نام jacks_boast در کد ما (پوسته یا افزونه) تعریف شده است. روشن است که اگر این هوک وجود نداشته باشد، فانکشن ما هرگز فراخوانی و اجرا نخواهد شد. بنابراین باید در پشت صحنه ی کدهای پوسته یا افزونه ی ما کدی مثل زیر وجود داشته باشد:

echo apply_filters('jacks_boast', "I'm the best in the world.");

این کد به وردپرس می گوید که یک فیلتر با نام jacks_boast ایجاد کند و هر فیلتری را که به آن (هوک) وابسته شده را اجرا کند و همچنین رشته ای (string) با عنوان «من بهترین هستم» یا I’m the best in the world را نیز به فیلترها پاس دهد. اگر هیچ فیلتری به هوک متصل نباشد، آنگاه می توان با استفاده از فانکشن apply_filters ، رشته ی مذکور را بازگردانی یا return کرد.

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

در مثال زیر می خواهیم آدرس url مربوط به لوگوی سایت را تغییر دهیم.

// Change url that is linked from logo
add_filter( 'tc_logo_link_url', 'change_site_main_link' );
function change_site_main_link() {
  return 'http://example.com';
}<br>

البته در رابطه با هوکِ tc_logo_link_url ، فرض بر آن است که ما در فایلی دیگر از سایت خود کد زیر را تعریف کرده ایم.

apply_filters( ‘tc_logo_link_url’, esc_url( home_url( ‘/’ ) ) )

فانکشن esc_url کاراکتر های موجود و هر چیزی که هست را حذف می کند و در مقابل، فانکشن home_url آدرس برگه ی خانه ی سایت را دوباره بازیابی می کند. بنابراین اگر هیچ گونه فیلتر کردنی در کار نباشد، فیلتر tc_logo_link_url آدرس برگه ی خانه ی سایت را بازگردانی خواهد کرد.

نکته: به خاطر داشته باشید که در استفاده از فیلترها همیشه باید چیزی را بازگردانی (return) کنید.

چرا از هوک ها استفاده می کنیم؟

حالا که می دانید هوک ها چگونه کار می کنند، می بینید که چرا داشتن دانشِ استفاده از هوک ها برای همه ی توسعه دهندگان وردپرس ضروری است. این موارد بسیار کاربردی هستند، حتی اگر توسعه دهنده ی حرفه ای نباشید و صرفا بخواهید تغییراتی در سایت خود ایجاد کنید.

با داشتن دانش استفاده از هوک ها می توانید:

  • می توانید هرچیزی را در وردپرس تغییر دهید. حتی موارد و رفتارهای بسیار ساختاری در وردپرس را هم می توانید تغییر دهید. زیرا بسیاری از فانکشن های هسته ی وردپرس از اکشن ها و فیلترها استفاده می کنند.
  • می توانید تغییرات را با سرعت و دقت بیشتری در سایت خود پیاده سازی کنید.
  • می توانید رفتار قالب یا پوسته را از درون کدها تغییر دهید، بدون اینکه بخواهید با کدهای html و css کار خود را پیچیده و مشکل کنید.
  • می توانید کدهای خواناتری و کم حجم تری بنویسید و دیباگ کردن را آسان تر کنید.
  • می توانید قابلیت فعال سازی و غیر فعال کردن تغییرات خود را در دست داشته باشید، زیرا تغییرات درون یک فانکشن نوشته شده اند.
  • می توانید تقریبا تغییراتتان را ضدبروزرسانی کنید. یعنی با بروزرسانی ها از بین نخواهند رفت.
  • می توانید کدهایی را که نوشته اید با دیگران نیز به اشتراک بگذارید یا در جایی دیگر و در سایتی دیگر هم استفاده کنید.

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

خودتان امتحان کنید

مثال هایی که تا اینجا برای شما آوردیم همگی به درستی کار می کنند. اگر یک وب سایت وردپرسی را روی هاست یا روی کامپیوتر خود به صورت لوکال نصب کرده باشید، می توانید کدهایی که تا اینجا برایتان مثال زدیم را خودتان در فایل functions.php استفاده نمایید.

چند چیزی که باید به خاطر داشته باشید:

1.در مثال اولی مربوط به گیل که از add_action در آن استفاده کردیم، باید کد زیر را درون کدهای قالب خود جای دهید چرا که هوک از قبل تعریف شده باشد:

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

2. اگر هر دو ارگومان (gill_has_keys$ و gill_has_car$) مقدار true را بگیرند، آنگاه عبارت «گیل لطفا برو نقاشی بخر و بیاور.دستت درد نکنه!» در بالای برگه ی شما نمایش داده خواهد شد. اگر یکی از این دو آرگومان، مقدارش برابر با false شود، آنگاه این عبارت نمایش داده نخواهد شد.

3. در مثال های بعدی هم که کد مربوط به تعریف هوک را نوشتیم. (after_header را تعریف کردیم)

4. در مثال مربوط به فیلتر باید کد زیر را برای نمایش عبارت تغییر کرده، به کد خود اضافه کنید: (قبلا گفتیم که apply_filters چکار می کند)

echo apply_filters(‘jacks_boast’,”I’m the best in the world.”);

5. در مثال مربوط به تغییر آدرس url لوگوی سایت، فیلتر هوک tc_logo_link_url نیز باید درون کدهای قالب تعریف می شد.

6. کدها باید در فایل functions.php کپی شوند. اما برای کاهش ریسک بهتر است از یک child theme برای اعمال تغییرات استفاده کنید. زیرا با این کار نیازی به تغییر فایل functions.php اصلی قالب خود نیست. به یاد داشته باشید که قبل از اعمال تغییر در فایل functions.php قالب، حتما یک یک‌آپ از آن را تهیه کنید تا در صورت بروز مشکل بتوانید آن را رفع نمایید.

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

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


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

نویسنده شوید

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

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