تا این‌جا ما یک افزونه ساختیم که عملاً هیچ کاری انجام نمی‌ده. باید به وردپرس بگیم که کدهای ما رو در چه زمانی اجرا کنه. این‌کارو به دو صورت می‌شه انجام داد: قلاب‌های افزونه (Plugin Hooks) و توابع پوسته (Template Tags).

قلاب‌های افزونه
وردپرس موقعی که می‌خواد کاری انجام بده ابتدا بررسی می‌کنه که آیا تابعی خودشو به این تابعی که الان می‌خواد اجرا بشه متصل کرده یا نه. در این صورت اون تابع رو اجرا می‌کنه. یک مثال. حتماً تا به حال موقع ساخت پوسته متوجه فراخوانی توابع wp_head و wp_footer در لابه‌لای تگ‌های HTML قالب شدید. دلیل فراخوانی این توابع اینه که اگر افزونه‌ای نیاز داشت اطلاعاتی در هدر یا فوتر بنویسه (مثلاً چسبوندن شیوه‌نامه خودش و یا نمایش اطلاعات) خودش رو بچسبونه به این توابع تا در زمانی که وردپرس مشغول رندر صفحه برای نمایش به کاربر هست اون توابع رو اجرا کنه.
تقریبا برای هر عملیاتی که وردپرس که انجام می‌ده قلاب‌های مناسب وجود داره. مثلاً وقتی که یه کاربر در سایت ثبت نام می‌کنه، وقتی یک مطلب جدید نوشته یا حذف می‌شه، وقتی دیدگاهی ارسال می‌شه، و… این قلاب‌ها این انعطاف‌پذیری رو به نویسنده‌ی افزونه می‌دن تا بتونه کدهای خودش رو در زمان مناسب اجرا کنه و تغییرات دلخواه رو در هسته وردپرس بدون دستکاری مستقیم فایل‌ها انجام بده.
لیستی از قلاب‌ها رو در این‌جا ببینید: http://codex.wordpress.org/Plugin_API

حالا، ما دو نوع قلاب داریم: Action و Filter. با استفاده از فیلترها وردپرس از توابع ما انتظار داره بعد از اجرای کدهاشون مقداری رو برگردونند (دستور return) ولی در اکشن‌ها نیازی به برگرداندن مقدار نیست. مثلا، می‌دونید که تابع the_content که درون حلقه وردپرس استفاده می‌شه محتوای نوشته‌ها رو برمی‌گردونه. ما می‌تونیم یه تابع بنویسیم و متصلش کنیم به این تابع the_content، کدهای مورد نظر رو روی محتوا اجرا کنیم (مثلاً ویرایش، تبدیل کاراکترها، اضافه کردن متنی به نوشته و…) و بعد باید خود محتوا رو دوباره به وردپرس برگردونیم.

تئوری کافیه! فایل افزونه‌ای که در آموزش قبلی ایجاد کردید رو باز کنید و کدهای زیر رو توش کپی کنید:

[php]
<?php

add_filter(’the_content’, ‘bigbang’);

function bigbang($content) {

}
?>
[/php]

اتصال تابع مورد نظر به یکی از توابع وردپرس با دستور add_filter انجام می‌شه. پارامتر اول تابعی هست که می‌خوایم بهش متصل شیم و پارامتر دوم تابع ما هست که عملیات پردازش رو انجام می‌ده. خیلی ساده، یه تابع با نام بیگ‌بنگ! معرفی کردیم تا زمان اجرای تابع the_content (که مسئول فرستادن محتوای نوشته به مرورگر هست) اجرا بشه.
الان با مرورگر خود به مسیر وردپرس‌تون برید. چی می‌بینید؟ بوم! محتوای پست‌ها نمایش داده نمی‌شه! این به این دلیل هست که همان‌طور که گفتیم فیلترها از توابع ما انتظار دارند مقداری رو برگردونیم. در واقع، با معرفی متغیر $content به عنوان پارامتر تابع سفارشی ما، می‌تونیم به محتوای ارسال شده از طرف وردپرس به تابع‌مون دسترسی داشته باشیم، روش عملیات انجام بدیم و در نهایت مقدار پردازش شده رو برگردونیم. با برنگردوندن مقدار وردپرس هیچی رو نمایش نمی‌ده.
وسط براکت‌های تابع دستور return $content; رو اضافه کنید. دوباره سایت رو ببینید: محتوا بدون تغییر نمایش داده می‌شه.
ایده رو گرفتید؟ کافیه متغیر $content رو ویرایش کنید و دوباره برش گردونید.
علاوه بر تابع add_filter، تابع add_action رو هم داریم که می‌تونیم به یه اکشن متصل بشیم. مثلا، گفتیم که تابع wp_head رو در بخش head فایل header.php فراخوانی می‌کنیم. می‌تونیم با add_action به اون تابع متصل بشیم و اطلاعات مورد نیازمون رو در بخش هدر سند تولید شده توسط وردپرس بنویسیم:

[php]
function dolly_css() {
echo "
<style type=’text/css’>
#dolly {
position: absolute;
top: 4.5em;
margin: 0;
padding: 0;
}
</style>";

}

add_action(’wp_head’, ‘dolly_css’);
[/php]

از اکشن استفاده کردیم، چون در این‌جا ما مقداری رو برگشت ندادیم (return) بلکه خیلی ساده با دستور echo اطلاعات رو به خروجی فرستادیم.

این‌ها رو داشته باشید تا در قسمت بعدی چندین افزونه مفید بنویسیم!

۳ پاسخ برای “ساخت افزونه برای وردپرس – بخش دوم”

  1. silvercover گفت:

    درود،

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

  2. ارش گفت:

    من که مخم هنگ کرد
    شاعر میگه:
    تکیه بر جای بزرگان نتوان زد به گزاف
    ای . . . . . . .

  3. tweener گفت:

    @سیلورکاور: سپاس‌! متاسفانه یادم رفت اینو تو مطلب بگم. ممنون از توجه‌تان.

    @ ارش: ساده بود که…