اليوم سأتناول شرح كيفية برمجة إضافات Plugins لبرنامج المدونات Wordpress، المثال الذي سأتناوله عبارة عن إضافة وظيفتها جلب حالة الطقس من موقع ياهوو، ومن ثم عرضها على المدونة باللغة العربية او الإنجليزية، بناء على رغبة مدير المدونة.
المثال رغم بساطته، إلا أني سأحاول فيه جاهداً أن أجمل كثيراً من الأفكار والدوال التي تساعد في بناء أضخم الإضافات.
سيتلخص محور حديثنا على ما يلي:
1. الخطوة الأولى في بناء الإضافة
2. اسناد القيم الافتراضية في الإضافة
3. لوحة تحكم للإضافة
4. بناء الاضافة
5. إستخدام الاضافة
سنبدأ الآن على بركة الله، بسم الله:
1. الخطوة الأولى في بناء الإضافة
تبدأ الخطوة الأولى في بناء الإضافة، بإضافة ترويسة الاضافة:
وهكذا تكون:
كود PHP:
/*
Plugin Name: Majds Weather
Plugin URI: http://MajdsBlog.com/
Description: To show the weather of your city, in your blog.
Version: 1.0
Author: Majd Shaweesh
Author URI: http://MajdsBlog.com
*/
حيث ان:
Plugin Name: هو إسم الاضافة
Plugin URI: الوصلة الخاصة بدعم الاضافة
Description: وصف حول وظيفة هذه الاضافة
Version: الاصدارة
Author: إسم منتج هذه الاضافة
Author URI: وصلة صفحة المنتج
2. اسناد القيم الافتراضية في الإضافة
عند تشغيل الاضافة للمرة الأولى، فإن القيم تكون عادة NULL، ولذلك نحتاج بهذه الحالة إلى أن نوجد قيماً إفتراضية، يمكن إستخدامها والتعامل معها عند تشغيل الإضافة في المرة الاولى، وقبل التعامل معها من قبل مدير المدونة.
يمكننا ذلك من خلال add action init، وسنرى مثالاً على ذلك.
كود PHP:
function weather_init() {
$weather_options = array();
$weather_options['lang'] = 'ar';
add_option('weather_options', $weather_options);
}
add_action('init','weather_init');
نرى هنا اننا إستخدمنا الدالة add_action، وكان البرامتر الأول init، منادياً الدالة weather_init والتي تقوم بإسناد القيم الافتراضية.
نلاحظ أيضاً أننا إستخدمنا add_option وذلك لإضافة القيم، وأصبح إسم الخيارات الخاصة بالاضافة weather_options، يمكن التعامل معها كما سنرى، بدلاً من إستخدام قاعدة البيانات لتخزين القيم.
3. لوحة تحكم للإضافة
بالتأكيد الاضافة التي قمت ببرمجتها سيحتاج مدير المدونة أن يستخدمها بسلاسة، يمكنك ذلك من خلال إضافة صفحة خاصة بإضافك في لوحة تحكم المدير، من خلال الأمر add_action وبارمتر admin_menu، كما سنرى في المثال التالي:
كود PHP:
add_action('admin_menu', 'weather_create_admin');
نلاحظ أن الاضافة ستتم إضافتها إلى لوحة الادارة، لكن بعد مناداة الدالة weather_create_admin والتي تحتوي على الأمر الخاص بإضافة الخيار الخاص بالادارة في لوحة التحكم:
كود PHP:
function weather_create_admin() {
if (function_exists('add_options_page')) {
add_options_page('Majds Weather Options', 'Majds Weather', 8, basename(__FILE__), 'manage_weather');
}
}
نلاحظ أننا إستخدمنا الدالة add_options_page لإضافة صفحة الخيارات إلى لوحة التحكم.
يهمنا في ما كتبنا سابقاً، ما يلي:
ان title الخاص بصفحة ادارة الاضافة سيكون: Majds Weather Options
وأن إسم الاضافة الظاهر في لوحة التحكم سيكون: Majds Weather
وعند النقر على Majds Weather سيقوم بمنادة الدالة الخاصة بإدارة الاضافة وهي manage_weather
أما في الدالة manage_weather فنجد، صفحة كافة خيارات عمل الاضافة، وسنلقي نظرة على ما فيها:
كود PHP:
function manage_weather() {
//array contain the languages available
$langs = array(
'ar'=>'ar',
'en'=>'en'
);
//submitting the data
if(!empty($_POST['Submit'])) {
$weather_options = array();
$weather_options['lang'] = addslashes($_POST['lang']);
update_option('weather_options', $weather_options);
}
//Printing the administrator content
$weather_options = get_option('weather_options');
echo '<form method="post" action="'.$_SERVER['REQUEST_URI'].'"> ';
echo '<div class="wrap">';
screen_icon();
echo '<h2>Majds Weather Options</h2>';
echo '<table class="form-table">';
echo '<tr><td>';
echo 'Lang: <select name="lang">';
do {
echo '<option value="'.stripslashes(current($langs)).'"'.((current($langs)==$weather_options['lang']) ? ' selected="selected"' : '').'>'.stripslashes(current($langs)).'</option>';
}while(next($langs));
echo '</select>';
echo '</td></tr>';
echo '</table>';
echo '<p class="submit"><input type="submit" name="Submit" class="button" value="Save Changes" /></p>';
echo '</div>';
echo '</form>';
}
سأشرح فيها ما هو متعلق ببرمجة الاضافات بشكل عام، أما الأمور الأخرى المتعلقة بلغة PHP فلن أشرحها
نجد أننا عندما أردنا إعتماد التغيير في قيم الخيارات الخاصة بالاضافة إستخدمنا الدالة update_option
وعندما أردنا إستخدام قيم options في عمل الاضافة او الطباعة إستخدمنا الدالة get_option مع إرسال إسم الخيار كبرامتر.
4. بناء الاضافة
نأتي الآن الى الكود الخاص بالاضافة، المتعلق بإستقبال حالة الطقس من موقع ياهوو، وطباعة حالة الطقس الآن:
كود PHP:
function get_weather() {
$xml = file_get_contents("http://xml.weather.yahoo.com/forecastrss?p=WEXX0001&u=c");
preg_match_all('/<yweather:condition.*?text="(.*?)".*?code="(.*?)".*?temp="(.*?)".*?date="(.*?)"/mi', $xml, $current);
preg_match_all('/<yweather:forecast.*?date="(.*?)".*?low="(.*?)".*?high="(.*?)".*?text="(.*?)".*?code="(.*?)"/mi', $xml, $forecast);
// To download every possible Yahoo! weather code (to find out the codes for rain), run...
// curl http://us.i1.yimg.com/us.yimg.com/i/us/we/52/[0-50].gif -o weather_#1.gif
$rain = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47);
$date = date("Y-m-d", strtotime($current[4][0]));
$day0 = $current[3][0];
$day0_text = $current[1][0];
$day1 = $forecast[3][0];
$day1_text = $forecast[4][0];
$day2 = $forecast[3][1];
$day2_text = $forecast[4][1];
$rain = in_array($current[2][0], $rain) ? 1 : 0;
$weather_options = get_option('weather_options');
if($weather_options['lang']=='ar')
echo 'الحرارة الآن: '.$day0;
else
echo 'Now the weather is: '.$day0;
}
هنا أيضاً نرى أننا إستخدمنا get_options لمعرفة القيم، والتي ساعدتنا في آلية إعتماد الطباعة سواء باللغة العربية أو الإنجليزية.
5. إستخدام الاضافة
لطباعة الاضافة في مدونتك، يكفيك فقط مناداة الدالة get_weather، في المكان الذي ترغبه:
كود PHP:
echo get_weather();
ولكني أفضل أن تستخدم
كود PHP:
if (function_exists('get_weather')) {
echo get_weather();
}
اما كود الاضافة كاملاً:
كود PHP:
/*
Plugin Name: Majds Weather
Plugin URI: http://MajdsBlog.com/
Description: To show the weather of your city, in your blog.
Version: 1.0
Author: Majd Shaweesh
Author URI: http://MajdsBlog.com
*/
//Function for managing
function manage_weather() {
//array contain the languages available
$langs = array(
'ar'=>'ar',
'en'=>'en'
);
//submitting the data
if(!empty($_POST['Submit'])) {
$weather_options = array();
$weather_options['lang'] = addslashes($_POST['lang']);
update_option('weather_options', $weather_options);
}
//Printing the administrator content
$weather_options = get_option('weather_options');
echo '<form method="post" action="'.$_SERVER['REQUEST_URI'].'"> ';
echo '<div class="wrap">';
screen_icon();
echo '<h2>Majds Weather Options</h2>';
echo '<table class="form-table">';
echo '<tr><td>';
echo 'Lang: <select name="lang">';
do {
echo '<option value="'.stripslashes(current($langs)).'"'.((current($langs)==$weather_options['lang']) ? ' selected="selected"' : '').'>'.stripslashes(current($langs)).'</option>';
}while(next($langs));
echo '</select>';
echo '</td></tr>';
echo '</table>';
echo '<p class="submit"><input type="submit" name="Submit" class="button" value="Save Changes" /></p>';
echo '</div>';
echo '</form>';
}
function weather_create_admin() {
if (function_exists('add_options_page')) {
add_options_page('Majds Weather Options', 'Majds Weather', 8, basename(__FILE__), 'manage_weather');
}
}
function get_weather() {
$xml = file_get_contents("http://xml.weather.yahoo.com/forecastrss?p=WEXX0001&u=c");
preg_match_all('/<yweather:condition.*?text="(.*?)".*?code="(.*?)".*?temp="(.*?)".*?date="(.*?)"/mi', $xml, $current);
preg_match_all('/<yweather:forecast.*?date="(.*?)".*?low="(.*?)".*?high="(.*?)".*?text="(.*?)".*?code="(.*?)"/mi', $xml, $forecast);
// To download every possible Yahoo! weather code (to find out the codes for rain), run...
// curl http://us.i1.yimg.com/us.yimg.com/i/us/we/52/[0-50].gif -o weather_#1.gif
$rain = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47);
$date = date("Y-m-d", strtotime($current[4][0]));
$day0 = $current[3][0];
$day0_text = $current[1][0];
$day1 = $forecast[3][0];
$day1_text = $forecast[4][0];
$day2 = $forecast[3][1];
$day2_text = $forecast[4][1];
$rain = in_array($current[2][0], $rain) ? 1 : 0;
$weather_options = get_option('weather_options');
if($weather_options['lang']=='ar')
echo 'الحرارة الآن: '.$day0;
else
echo 'Now the weather is: '.$day0;
}
function weather_init() {
$weather_options = array();
$weather_options['lang'] = 'ar';
add_option('weather_options', $weather_options);
}
add_action('init','weather_init');
add_action('admin_menu', 'weather_create_admin');
بالتوفيق
مجد شاويش :: MajdsBlog.com