در این پست اشارهای خواهم داشت به این که چگونه میتوانیم برای وردپرس افزونه (Plugin) بنویسیم
. نوشتن یک افزونه راههای زیادی دارد، من در این مطلب به سادهترین راه برای شروع اشاره میکنم.
در پایان این نوشته افزونهای خواهیم نوشت که بعد از انتشار پست آن را برای چند نفر ایمیل کند، به تیترها افکت سایه بدهد
.
__________________________________________________ __
مقدمه
یکی از نقاط قدرت وردپرس افزونههای آن است که قابلیتها و تواناییهای آن را افزایش میدهد. وردپرس این امکان را به هر کاربری با کمی معلومات میدهد تا افزونه خود را بنویسد و بصورت شخصی استفاده کند یا با دیگران به اشتراک بگذارد.
برای نوشتن یک افزونه وردپرس کافیست اطلاعاتی مقدماتی در PHP, JavaScript و CSS داشته باشید.
__________________________________________________ __
چرا باید یک افزونه وردپرس بنویسیم؟
دلایل زیادی میتواند وجود داشته باشد که شروع به نوشتن یک افزونه وردپرس بکنید، ممکن است طراح قالبهای وردپرس باشید و بخواهید کاری را که دائم انجام میدهید بصورت اتوماتیک در بیاورید، ممکن است بخواهید یک افزونه وردپرس را گشترس دهید یا آن را تغییر دهید، ممکن است بخواهید از این راه کسب درآمد کنید، یا شاید هم بخاطر محبوبیت، فرض کنید یک افزونه برای وردپرس مینویسید و آن را در بانک افزونههای وردپرس قرار میدهید و هزاران نفر از آن استفاده میکنند و در قسمت مدیریت افزونههای سایت خود لینک سایت شما را مشاهده خواهند کرد.
__________________________________________________ __
شروع
هر افزونه وردپرس باید حداقل دارای یک فایل PHP باشد، همچنین میتواند دارای فایلهای دیگر شامل فایلهای جاوا اسکریپت، فایلهای استایل، عکس و… باشد، به همین دلیل بهتر است برای افزونه خود یک پوشه ایجاد کنیم.
برای شروع در مسیر wp-content/plugins یک پوشه همنام با افزونه خود ایجاد میکنیم، نام این پوشه نباید شامل فاصله (space) باشد، برای این آموزش من پوشهی myPlugin را ایجاد میکنم.
درون این پوشه یک فایل PHP ایجاد میکنیم همنام با نامِ پوشه، اگر با درست کردن قالبهای وردپرس آشنا باشید میدانید که برای اینکه وردپرس قالب شما را بشناسد باید در چند خط اول فایل style.css مشخصات قالب را وارد کنیم، در نوشتن افزونه نیز باید همین کار را انجام دهیم، بنابراین چند خط اول این فایل به مشخصات افزونه اختصاص دارد.
کد:
کد PHP:
view source
print?
01.<?php
02./*
03.Plugin Name: Name Of The Plugin
04.Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
05.Description: A brief description of the Plugin.
06.Version: The Plugin's Version Number, e.g.: 1.0
07.Author: Name Of The Plugin Author
08.Author URI: http://URI_Of_The_Plugin_Author
09.*/
10.?>
اینها اطلاعاتیست که برای شناساندن افزونه خود به وردپرس نیازمندیم، همانطور که در کد آمده خط سوم نام افزونه رو مشخص میکند که در صفحه مدیریت افزونهها نمایش داده میشود، خط چهارم آدرس افزونه را مشخص میکند، خطوط پنجم و ششم به ترتیب توضیحی از کاربرد افزونه و نسخه آن را مشخص میکنند و در خط هفتم نام سازنده افزونه مشخص میشود، در خط هشتم نیز آدرس سازنده مشخص میشود.
نکته بسیار مهمی که باید به آن توجه داشته باشید این است که Encoding این فایل باید ANSI باشد، اگر این فایل را بصورت UTF-8 یا فرمتهای دیگر ذخیره کنید هنگام راهاندازی یا استفاده از افزونه با خطای :
کد:
Warning: Cannot modify header information
مواجه خواهید شد. برای تغییر Encoding فایل میتوانید در برنامه Notepad++ از منوی Format گزینه Encoding in ANSI را انتخاب کنید مانند تصویر زیر:
یا از UTF-8 without BOM استفاده کنید.
حال که فایل که خود آماده و ذخیره کردیم میتوانید وارد صفحه مدیریت افزونههای وردپرس شویم، اگر تمام کارها را درست انجام داده باشیم افزونهای که درست کردیم را در لیست افزونه خواهیم دید.
__________________________________________________ __
استفاده از توابع Hook
hookها یک سری توابع هستند که وردپرس در خود گنجانده است، نحوه کار آنها به این صورت است که وردپرس قبل از اجرای هر یک از توابع خود یک بار توابع Hook که توسط افزونهها نوشته شدهاند چک میکند و کاری که hookها به آن اشاره دارند انجام میدهد و سپس نتیجه را نمایش میدهد.
برای مثال وردپرس قبل از اینکه عنوان هر مطلب را نمایش دهد، بررسی میکند که آیا تابع Hookای از جنس filter با مشخصه the_title وجود دارد یا نه اگر وجود داشت آن را اجرا میکند و سپس عنوان مطلب را چاپ میکند.
یا وقتی یک پست را مینویسید و بر روی دکمه انتشار کلیک میکنید وردپرس بررسی خواهد کرد که آیا باید قبل فرستادن اطلاعات به پایگاه داده کاری روی آن انجام دهد یا خیر، تمام این کارها را میتوان با توابع Hook انجام داد.
یکی از این توابع تابع register_activation_hook میباشد، این تابع دو ورودی دریافت میکند، ورودی اول مسیری است که فایل PHP اصلی افزونه در آن قرار دارد، و ورودی دوم تابعی است که باید اجرا کند.
کار این تابع این است که تابعی که به عنوان ورودی دریافت میکند را هنگامی که افزونه فعال میشود اجرا کند، برای مثال به کد زیر توجه کنید:
کد:
view source
print?
1.register_activation_hook(__FILE__, 'myPlugin_activate');
2.
3.function myPlugin_activate() {
4. // do something...
5.}
در این تکه کد مشاهده میکنید که یک تابع به اسم myPlugin_activate معرفی شده است و به وسیله تابع register_activation_hook در زمان فعالسازیه افزونه فراخوانی شده است.
در تابع myPlugin_activate میتوان کارهایی از قبیل ساختن جداول لازم در پایگاه داده، معرفی متغییرهای لازم و دیگر کارهای لازم در هنگام اجرای افزونه را انجام دهیم.
تابع دیگر register_deactivation_hook میباشد که مانند تابع قبل دو ورودی میگیرد و تابعای که به آن معرفی میشود را هنگام غیرفعال کردن افزونه اجرا میکند.
به جز تو تابع بالا توابع hook به دو دسته تقسیم میشوند:
Actions : وقتی یک رویداد خاص اتفاق میفتد یا در زمان خاصی اجرا میشوند.
Filters : برای انجام تغییراتی روی اطلاعات قبل ارسال به پایگاه داده یا نمایش استفاده میشوند.
گاهی میتواند یک کار را هم با استفاده از Actionها انجام داد هم Filterها.
__________________________________________________ __
Actions
برای استفاده از actionها کافیست یک تابع PHP که میخواهید اجرا شود بنویسید، سپس آن را در زمانی که میخواهید توسط تابع add_action اجرا کنید.
کد:
1.add_action ('plugins_loaded', 'plugin_start');
2.
3.function plugin_start() {
4. if ( is_admin() ) { } else {
5. wp_enqueue_script ("jquery");
6. require_once (dirname (__FILE__) . "/functions.php");
7. }
8.}
برای مثال در تکه کد بالا مشاهده میکنید که یک تابع با نام plugin_start نوشته شده است، سپس توسط تابع add_action در زمان plugins_loaded فراخوانی شده است، در این صورت تابع plugin_start در زمانی که افزونهها بطور کامل بارگذاری شدهاند اجرا میشود و کتابخانه جاوا اسکریپت jQuery موجود در هسته وردپرس و فایل functions.php موجود در پوشه افزونه را فراخوانی میکند.
یا برای مثال میتوانید تابعی به اسم email_friends بنویسید و آن را در زمان publish_post فراخوانی کنید، در این صورت زمانی که پست شما منتشر میشود تابع email_friends اجرا میشود و آن را برای تمام دوستان شما ارسال میکند.
میتوانید لیستی از hookهایی که میتوانید در آنها از تابع add_action استفاده کنید را در این صفحه ببینید.
__________________________________________________ __
Filters
فیلترها نیز مانند actionها کار میکنند، فقط باید یک تابع بنویسید و آن را به زمانی که میخواهید اجرا شود به وسیله تابع add_filter اختصاص دهید.
کد:
1.add_filter('comment_text','filter_profanity');
2.
3.function filter_profanity($content) {
4. global $profanities;
5. $content=str_ireplace($profanities,'{censored}',$content);
6. return $content;
7.}
برای مثال در کد بالا تابع filter_profanity نوشته شده و یک ورودی content میگیرد و با متغییر profanities از قبل تعریف شده مقایسه میکند و اگر کلمهای متشابه داشته باشد آن را با {censored} جایگزین میکند، این تابع به comment_text اختصاص داده شده و به این ترتیب متن دیدگاههارا بررسی میکند اگر در آن ناسزا بکار برده شده باشد آن را سانسور میکند.
میتوانید لیستی از hookهایی که میتوانید در آنها از تابع add_filter استفاده کنید را در این صفحه ببینید.
__________________________________________________ __
نمونه
در آخر افزونه myPlugin را این صورت کامل میکنیم:
کد:
01.<?php
02./*
03.Plugin Name: myPlugin
04.Plugin URI: http://www.radikal2.com/
05.Description: it is my first wordpress plugin
06.Version: 1.0
07.Author: Radikal2
08.Author URI: http://www.radikal2.com
09.*/
10.
11.add_action ('publish_post', 'myPlugin_email');
12.add_filter ('the_title', 'myPlugin_title');
13.
14.function myPlugin_email($post_ID) {
15. $mails = 'you-name@your-domain.com,you-name@your-domain.com,you-name@your-domain.com,';
16. mail($mails, "My Blog Updated!",
17. 'I just put something on my blog: http://blog.example.com');
18. return $post_ID;
19.}
20.
21.function myPlugin_title($t) {
22. $x = '<span style="text-shadow: 0px 0px 16px blue;">' .$t. '</span>';
23. return $x;
24.}
25.
26.?>
مشاهده میکنیم که در این کد از دو تابع add_action برای فراخوانی تابع myPlugin_email برای ارسال یک ایمیل برای تعدادی از دوستان بعد از انتشار پست و add_filter برای اضافه کردن افکت سایه به کمک یک کد CSS به تیتر مطالب استفاده شده است.
منابع: Writing a Plugin / Plugin API
خدایی نامردیه یه تشکر نزدنید کلی وقت کشید تا منتاژ کردمش