تعلم أساسيات لغة PHP وأهميتها في تطوير ووردبريس

يستخدم ووردبريس مجموعة مختلفة اللغات والتقنيات البرمجية الأساسية التي يفيدك تعلمها في التقدم خطوة للأمام في التعامل مع ووردبريس من مجرد إنشاء وتخصيص مواقع بنظام الووردبريس إلى مطور للوردبريس.

أهم هذه اللغات هي (HTML وCSS وJavaScript) التي تعمل من طرف العميل، ولغة PHP التي تعمل من طرف الخادم.

فلغة HTML هي المسؤولة عن تحديد هيكلية الموقع، ولغة CSS هي المسؤولة عن تنسيق وتصميم عناصره، أما لغة JavaScript فهي المسؤولة عن إضافة ميزات تفاعلية متقدمة مثل أشرطة التمرير والميزات التفاعلية الأخرى..

أما لغة PHP فهي التي تمكن موقع ووردبريس من التفاعل مع قاعدة البيانات وجلب البيانات منها بالاشتراك مع لغة مسؤولة عن الاستعلام من قاعدة البيانات الخاصة بالموقع مثل MySQL أو MariaDB).

وكنا قد شرحنا أساسيات استخدام HTML وCSS كما شرحنا لغة JavaScript وكيفية استخدامها في بنية نظام ووردبريس في مقالات سابقة، وفي مقال اليوم سنطرق لشرح أساسيات لغة PHP التي تعتبر اللغة الأساسية لتطوير ووردبريس

ملاحظة قبل البدء:

تجدر الإشارة لأن هذه المقالة لا تهدف إلى تعليمك PHP من الألف إلى الياء، ولكنها تهدف بشكل اساسي لمساعدتك كمطور ووردبريس في الحصول على المعرفة الأساسية التي سوف تساعدك في التعرف على القواعد الأساسية وفهم الكود البرمجي الذي يستخدمه نظام ووردبريس وفق أحدث إصدار متوفر من اللغة (PHP 8)

ما هي لغة PHP

PHP اختصار لمصطلح  Hypertext Pre_Processor أي لغة المعالج المسبقة للنص التشعبي، وهي عبارة عن  لغة برمجة مفتوحة المصدر تستخدم لأغراض البرمجة بشكل عام، ولغرض تطوير مواقع الويب بشكل خاص.

تتميز لغة PHP بكونها لغة بسيطة وخفيفة الوزن تعمل من طرف الخادم (Server-side Languages) وهي قابلة للتضمين ضمن أكواد HTML ولغات البرمجة النصية الأخرى من جانب العميل.

كما تدعم لغة PHP أيضًا مفاهيم البرمجة كائنية التوجه أو البرمجة غرضية التوجه OOP التي تتضمن مفاهيم الصفوف أو الأصناف (Classes) والأغراض أو الكائنات (Objects) والوراثة (inheritance) وما إلى ذلك..

اقرأ المزيد: البرمجة كائنية التوجه (Object Oriented Programming) في PHP

ما معنى لغة من طرف الخادم أو لغة من طرف العميل؟

كما ذكرنا مسبقًا تعتبر لغة PHP لغة برمجة نصية من طرف الخادم  بخلاف بعض لغات تطوير الويب الأخرى التي تكون من طرف العميل فماذا يعني هذا؟

فعليًا يتم تصنيف لغات برمجة الويب إلى نوعين:

  • لغة برمجة من جانب العميل Client side Programming
  • لغة برمجة من جانب الخادم Server side Programming

عندما تقوم بزيارة صفحة ويب مكتوبة بلغة من طرف العميل مثل (HTML أو CSS أو JavaScript) يتم إرسال الكود مباشرة إلى متصفحك ليقوم المتصفح بمعالجة المعلومات وإخراجها بشكل صفحة ويب، وبالتالي هذه اللغات تعتبر لغات من طرف العميل لأن المعالجة الخاصة بها تحدث على جهاز المستخدم النهائي.

أما عندما تقوم بزيارة صفحة ويب مكتوبة بلغة PHP _أو أي لغة أخرى من طرف العميل_ ففي هذه الحالة تتم أولاً عملية معالجة كود PHP بواسطة الخادم.

أي يتم تنفيذ كود PHP بالكامل على خادم الويب البعيد، ثم يتم الحصول على نتيجة هذه المعالجة بشكل كود HTML وبعدها يقوم الخادم البعيد بإرسال هذه الصفحة الناتجة إلى متصفح المستخدم.

سوف يتلقى المستخدم كود HTML الذي يمثل صفحات ديناميكية تتضمن محتويات الموقع، ويتم عرض هذه الصفحات على متصفح الإنترنت الخاص بجهازه المحلي.

كيف يمكن كتابة وتنفيذ كود PHP؟

كي تتمكن من تشغيل الأكواد البرمجية من طرف الخادم، فأنت بحاجة إلى بيئة تطوير تتضمن خادم يمكنهتنفيذ الأكواد. ويمكن أن تكون بيئة التطويرهذه إما محلية أو بعيدة.

فإذا كان لديك بالفعل حساب استضافة ويب على خادم بعيد فيمكنك تشغيل الأكواد الخاصة بك عليه، أو يمكنك بدلاً من ذلك تحويل جهاز الكمبيوتر الخاص بك إلى خادم محلي عن طريق تثبيت أحد برامج المحاكاة مثل XAMPP.

في هذه المقالة سنعتمد على تشغيل الأكواد محليًا دون الاعتماد على خادم بعيد لأننا لن نحتاج لأن نكون متصلين بالانترنت لتنفيذ الأكواد، وهذا يؤدي إلى تسريع عملية التطوير ويسمح لنا بمشاهدة التغييرات على الفور في المتصفح، كمايمكننا من اختبار الكود في أكثرمن متصفح.

اقرأ المزيد:
ما هو برنامج XAMPP وكيفية تنصيبه واستخدامه
إنشاء موقع ووردبريس على الخادم المحلي (LocalHost) باستخدام برنامج XAMPP

إذا كنت قد قمت بتنصيب ووردبريس على جهاز سيرفر محلي فأنت جاهز لتنفيذ أكواد PHPعلى جهازك الحاسب الخاص بك، وكل ما ستحتاجه لكتابة الأكواد هو محررنصوص لكتابة التعليمات البرمجية الخاصة بك.

يمكنك استخدام أي محرر نصوص بسيط كالمفكرة، لكن محرر النصوص الجيد يمكنه تسريع عملية التطوير ويساعدك في كتابة أكواد PHP وتصحيح الأخطاء كماأن بعض محررات الكود تتضمن دعم لسكربت ووردبريس.

هناك الكثيرمن محررات النصوص المناسبة التي يمكنك الاعتماد عليها مثل Atom و Sublime Text و VSCode و PhpStorm و NotePad ++ ويمكنك اختيار المحرر الذي يناسبك.

في هذا المقال سوف نستخدم محرر VSCode  لأنه يوفر عدة إضافات تسهل كتابة الكود وتدعم الإكمال التلقائي لوظائف PHP الأساسية وكذلك لوظائف ووردبريس الأساسية، وإضافات لإصلاح الأخطاء مثل إضافات PHP Intelephense WordPress Snippet و WordPress Toolbox و WordPress Development وغيرها الكثير مما يسهل عليك كتابة التعليمات البرمجية الخاصة بتطوير نظام ووردبريس.

طريقة كتابة كود PHP مشابهة جدًا لكيفية كتابة أكواد HTML. فهي تبدأ بكتابة الوسم <?php وتنتهي بكتابة الوسم ?> وبينهما تتم كتابة تعليمات الكود الخاص بك.

 <?php
      //اكتب الكود هنا 
    ?> 

تنتهي كل تعليمة من تعليمات PHP بفاصلة منقوطة  ; لكن لا داعي لوضع هذه الفاصلة المنقوطة في أخر سطر من الكود أي بعد السطر الذي يليه وسم الإغلاق مباشرة ?>

يجب حفظ الملف بالامتداد .php ويمكن أن يحتوي ملف PHP كما ذكرنا على أكواد HTML مع أكواد PHP مضمنة.

لكتابة كافة أكواد PHP سأنشئ مجلد باسم ola داخل المجلد htdocs الموجود داخل مجلد xampp أي سيكون المسار كما يلي C:\xampp\htdocs\ola بالشكل التالي وأنشئ داخله ملف باسم demo.php

فالمجلد htdocs هو المجلد الجذر وهو الموقع الذي سبيحث فيه Xampp عن أكواد php، والملجد ola سيكون مخصص لتجميع كافة الأكواد التي سأنفذها في شروحات هذه المقالة. الآن سأفتح كامل هذا المجلد الذي أنشأته بمحرر الأكواد VS Code، ثم سأحرر الملف demo.php وأضيف له الكود التالي:

<!DOCTYPE html>
<head>
    <title> Hello World PHP Page </title>
</head>
<body>
    <?php
      echo  "Hello World!";
    ?> 
</body>
</html>

هذا الكود يستخدم تعليمة الطباعة echo التي تقوم بطباعة السلسلة النصية الممرة بعدها، وهي هنا تطبع العبارة Hello World! في الصفحة.

كي ترى نتيجة تنفيذ الكود السابق قم بفتح الملف من خلال المستعرض (بعد التأكد من تشغيل السيرفر المحلي Xammp) وقم بالانتقال للمسار الخاص بالملف في المستعرض وسترى النتيجة كما هو مبين في الصورة التالية حيث قام الخادم بمعالجة الكود وعرض لك النتيجة فقط.

ملاحظة 1:

إذا كان الملف يحتوي على كود PHP فقط (وليس مضمن في كود HTML) فمن الأفضل حذف وسم  إغلاق PHP في نهاية الملف، فهذا يمنع من إضافة المسافات البيضاء العرضية أو الأسطر الجديدة بعد وسم إغلاق PHP مما قد يتسبب في تأثيرات غير مرغوب فيها.

ملاحظة 2:

في حال تضمين كود HTML مع كود PHP بشكل متداخل في ملف واحد يجب أن يكون أي كود HTML خارج وسمي فتح وإغلاق php، ويجب أن يكون أي كود PHP داخل هذين الوسمين.

ما هي الأمور الأساسية التي على مطور ووردبريس تعلمها في لغة PHP؟

1.التعليقات (Comments)

التعليقات في أي لغة برمجية هي عبارة عن أسطر لا يتم تنفيذها في الكود البرمجي، والهدف الأساسي منها هو توضيح طريقة عمل الكود لأي مستخدمين آخرين سيستخدمون هذا الكود. وأحيانًا تستخدم التعليقات لإبطال عمل جزء من الكود كي لا يتم تنفيذه.

يمكنك كتابة التعليقات في لغة PHP بعدة طرق كما يلي:

<?php
// تعليق مكون من سطر واحد

# تعليق مكون من سطر واحد

/*
تعليق مكون
من عدة أسطر
*/

//الكود التالي لن ينفذ
//echo  "Hello World!";

echo  "Wpar.net";

2.المتغيرات (VARIABLES)

من الهام التعرف على مفهوم المتغيرات وطريقة تعريفها  وأنواع المتغيرات المختلفة في PHP، فالمتغير في أي لغة برمجية يستخدم للتعبير عن مساحة لتخزين البيانات والتعامل معها في الذاكرة، والقيمة التي تخزن في المتغير يمكن أن تتغير أثناء تنفيذ البرنامج.
يتم تعريف المتغيرات PHP في من خلال الرمز $ يليله اسم المتغير، وبعدها يتم تحديد نوع المتغير من خلال نوع القيمة المررة له.

حيث تدعم  لغة PHP عدة أنواع من المتغيرات سواء المتغيرات البسيطة مثل (bool ،int ،float  ،string) التي تخزن قيمة واحدة، أو المتغيرات المركبة التي تخزن عدة قيم بنفس الوقت مثل (array، object، callable، iterable) إضافة للمتغيرات من نوع خاص وهي ( NULL وresource )

أسماء المتغيرات في PHP حساسة لحالة الأحرف أي أن $ var و $ VAR يعتبران متغيران مختلفين، ويجب أن يبدأ اسم المتغير بحرف أو شرطة سفلية ولا يمكن أن يبدأ برقم، لكن يمكن أن يحتوي على رقم بعد المحرف الأول للاسم
على سبيل المثال الكود التالي يعرف أنواع مختلفة من المتغيرات في php

$v_bool = TRUE;   //متغير منطقي
$v_str  = "foo";  //سلسلة نصية 
$v_str2 = 'foo';  //سلسلة نصية
$v_int = 12;     // عدد صحيح
// مصفوفة
$v_array = array( 
    "foo" => "bar",
    "bar" => "foo",
);

ولمعرفة نوع أي متغيرمعين توفر php دالتين لذلك هما var_dump() و gettype() على سبيل المثال:

echo var_dump($v_bool);  //  bool(true) يطبع  
echo gettype($v_int);    // integer يطبع 

المتغيرات ذات الطاق العام والمتغيرات ذات النطاق العام العالي (Global and Superglobal Variables)

بشكل عام في لغات البرمجة ومن بينها لغة PHP تكون المتغيرات محدودة النطاق أي لا يمكنك الوصول إلى المتغيرات التي تعرفها في الكود إلا في مجال أو نطاق معين ويتم تحديد هذا المجال حسب أسس وقواعد كل لغة

وكي تجعل المتغيرات عامة عليك أن تحدد ذلك صراحة باستخدام الكلمة المفتاحية global كما يلي:

<?ph
 global $g_var; 
?>

تملك لغة PHP مجموعة متغيرات عامة على مستوى عالي وتكون هذه المتغيرات معرفة مسبقًا ويمكنك استخدمها مباشرة في أي مكان في الكود دون أي تصريح مسبق.

سبيل المثال يتم تخزين بيانات الجلسات وملفات تعريف الارتباط في متغيرات عامة عالية المستوى هي $_COOKIE و $_SESSION لتكون متاحة باستمرار في جميع أنحاء الموقع مع ملاحظة أن قيم متغير الجلسة $_SESSION تحفظ في الخادم، في حين أن قيم متغير$_COOKIE تحفظ في المتصفح من طرف العميل.

كذلك يوفر نظام ووردبريس مجموعة من المتغيرات العالمية لتخزين معلومات مختلفة على سبيل المثال يتم تخزين معلومات حول المستخدم مثل فيما إذا كان المستخدم قد قام بتسجيل الدخول أم لا، ونوع المتصفح الذي يزور المستخدم من خلاله موقع الويب في متغيرات عامة.
كما يتم تخزين معلومات حول صفحات الموقع في متغيرات عامة كذلك، على سبيل المثال عند تصفح منشورمعين يتم تخزين كافة تفاصيل المنشور الحالي في متغير عام $post، وعند تصفح منشورات تحت تصنيف معين يتم تخزن كافة هذه المنشورات التابعة لهذا التصنيف في متغير عام $ wp_query وهكذا بحيث يمكنك استخدامها في التعليمات البرمجية الخاصة بك.

تنبيه!

إن التعامل مع قيم المتغيرات العامة مهم لفهم طريقة عمل ووردبريس وتطوير القوالب والإضافات. وبالرغم من أن تعريف المتغيرات لتكون عامة يعتبر طريقة سهلة لمشاركة المعلومات في جميع أجزاء موقع الويب، إلا أنها يجب أن تستخدم بحذر لأنها يمكن أن تكون ثغرة لتخريب موقعك فكونها عامة هذا يعني أنه يمكن لأي شخص استخدمها مباشرة وتغيير قيمتها.

3.الثوابت (VARIABLES)

الثابت في لغة البرمجة هو عبارة عن معرف يستخدم لتخزين قيمة ثابتة لا يمكنها أن تتغير أثناء تنفيذ الكود البرمجي، وتكون الثوابت في PHP حساسة لحالة الأحرف كما في حال المتغيرات، ويفضل أن تبدأ أسماؤها بأحرف كبيرة.

لا يمكن إسناد قيمة للثابت بشكل مباشر وإنما يتم تعريف الثابت وتحديد قيمته باستخدام الدالة define() حيث نمرر لهاذه الدالة اسم الثابت وقيمته، ويمكن قراءة قيمة الثابت من خلال اسمه مباشرة أو من خلال الدالة constant()

وتكون معظم استخدامات الثوابت عادة في الكود من أجل تخزين إعدادات الموقع على سبيل المثال:

<?php
define('LOCATOR',   "/locator");
define('CLASSES',   LOCATOR."/code/classes");
define('FUNCTIONS', LOCATOR."/code/functions");
define('USERDIR',   LOCATOR."/user");
define("MINSIZE", 50);
echo LOCATOR; // يطبع /locator
echo constant("LOCATOR"); // يطبع نفس الكود السابق

4.التعليمات الشرطية (Conditional Statements)

تستخدم التعليمات الشرطية في لغة PHP للتحكم بتنفيذ الكود البرمجي كما هو الحال في العديد من لغات البرمجة الأخرى، فهي تسمح لك باستخدام شروط لعرض المحتوى بناءً على معايير معينة، ولها عدة أشكال أهمها:

  • تعليمة if البسيطة التي تختبر شرط واحد وتنفذ الكود عند تحققه فقط.
  • تعليمة if else التي تختبر الشرط وعكسه بحيث تنفذ الكود عند تحقق الشرط وتنفذ كود آخر في حال عدم تحققه.
  • تعليمة if elseif else التي تختبر مجموعة من الشروط بحيث تنفذ الكود عند تحقق أي شرط من بينها، وتنفذ كود في النهاية في حال عدم تحقق أي شرط مما سبق.

مثال:

<?php if( date( 'G' ) > 18 ) : ?>	
 <h2>ليلة سعيدة </h2>
<?php else : ?>
 <h2>يوم سعيد</h2>
<?php endif ?>

الكود السابق يعرض إما رسالة ليلة سعيد أو يوم سعيد حسب الوقت الذي يتم فيه تنفيذ الكود، فهو يعتمد على الدالة date( 'G' ) التي ترجع عدد بين الصفر و23 حيث أن العدد صفر يمثل منتصف الليل والعدد 23 يمثل الساعة 11 مساء. فإذا كانت القيمة التي ترجعها الدالة أكثر من 18 فهذا يعني أننا بعد الساعة 6 مساءً لذا نعرض الرسالة التي تقول "ليلة سعيدة" على الصفحة وإلا فإننا نعرض الرسالة "يوم سعيد".

5.تعليمة التضمين (Include)

هذه التعليمة تنسخ محتويات ملف إلى ملف آخر وحيث يتم وضع المسار إلى الملف المطلوب بعد الكلمة الأساسية include بالشكل التالي

include 'path_to_file';

وهي تستخدم في مواقع الويب بشكل عام وفي مواقع ووردبريس بشكل خاص عندما تريد تضمين نفس الأكواد البرمجية في عدة مواضع في قالب ووردبريس. فمن خلالها يمكنك أن تقوم بإدخال عبارات PHP في ملف آخر _قبل أن يقوم السيرفر بمعالجتها_

يمكن أن تفيدك هذه التعليمة بشكل كبير لتجنب تكرار أكواد الترويسة والتذييل والقوائم الخاصة بالموقع بدلاً من كتابة أكوادها في ملفات أو صفحات متعددة. حيث يمكنك وضع كود الرأس والتذييل والقوائم في ملفات منفصلة مثل header.php وfooter.php وmenu.php وتضمينها في باقي الصفحات (ملفات نماذج القالب الأخرى) .

كما يمكنك من خلالها تحميل الكود من ملف functions.php إلى داخل الملف index.php ، يمكنك استخدام عبارة include للقيام بذلك. إذا كان الملف functions.php يتضمن الكود التالي

<?php

// functions.php

function get_copyright()
{
	return 'Copyright &copy; ' . date('Y') . ' ووردبريس بالعربية كافة الحقوق محفوظة';
}
echo get_copyright();

يمكن استدعاء هذا الكود داخل الملف كما يلي:

<?php 

// index.php file
include 'functions.php';

إذا تمكنت PHP من العثور على الملف function.php فسيتم تحميل الكود الخاص بالملف وتنفيذه وطباعة عبارة حقوق النشر داخل الصفحة index.php كما يلي

أما في حال لم يتم العثور على الملف المطلوب فسوف ينتج الكود رسالة تحذيرية بالشكل التالي:

6.التعليمات التكرارية أو الحلقات (Loops)

تستخدم الحلقات من أجل تنفيذ المهام المتكررة مثل التنقل عبر عناصر مصفوفة من البيانات، أو إرسال رسائل بريد إلكتروني إلى قائمة بريدية وما إلى ذلك..وتتضمن لغة PHP عدة أشكال للتعليمات التكرارية وأهمها:

  • while: هي أبسط أشكال الحلقات وهي تكرر تنفيذ الكود الموجود داخلها طالما أن هناك شرط ما محقق (تختبر الشرط ثم تنفذ).
  • do-while: تكرر تنفيذ الكود الموجود داخلها حتى يصبح شرط ما غير محقق (تنفذ ثم تختبر الشرط).
  • for: تكرر تنفيذ الكود الموجود داخلها عدد محدد من المرات
  • foreach: تُستخدم حصرًا للتكرار عبر عناصر المصفوفة (لطباعة عناصرها أو تنفيذ عمليات معينة عليها..)

على سبيل المثال يستخدم ووردبريس حلقات التكرار بشكل أساسي لعرض منشورات المدونة بالشكل التالي:

<?php 
if ( have_posts() ) {
	while ( have_posts() ) {
		the_post(); 
		//
		// نعرض هنا محتوى المقال
		//
	} // end while
} // end if

ستلاحظ عند تصفح الكود البرمجي في ووردبريس اأنه يستخدم الحلقات بشكل كبير، حيث أنها تستخدم ضمن أي ملف قالب يعرض مجموعة من المقالات، وكذلك في صفحات البحث، وصفحات الأرشيف، وملف الفهرس وصفحات المنشورات الفردية وغيرها من المواضع..

7.التوابع أو الدوال Functions

الدوال أو التوابع البرمجية هي عبارة عن كتل من التعليمات البرمجية التي تنفذ مجموعة من المهام المحددة وهي تستخدم لتغليف أجزاء من الكود البرمجي وإعطائها اسم محدد.

تأخذ هذه الدوال المعلومات على شكل برامترات، وتنفذ مجموعة من العمليات على تلك البرامترات وتعيد نتيجة الكود.

لا يتم تنفيذ الدوال البرمجية تلقائيًا عند تحميل الصفحة وإنما يتم تنفيذها عند استدعائها أي عند اسم الدالة البرمجية وتمرير البرامترات المناسبة لها متى ما احتجنا لذلك، لتقوم الدالة بتنفيذ كتلة التعليمات الخاصة بها بناء على قيم هذه البرامترات دون الحاجة لتكرار كتابة نفس الكود.

هناك نوعان رئيسيان من الدوال في PHP:

دوال تعرف من قبل المستخدم

يمكن تعريف توابع مخصصة من قبل المستخدم لإنجاز مهام محددة حسب متطلباته، حيث يتم تعريف التوابع في PHP وفق الشكل التالي:

<?php
function function_name($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "Example function.\n";
    return $retval;
}
?>

أسماء الدوال تتبع نفس القواعد التي تتبعها التسميات الأخرى في PHP وهي غير حساسة لحالة الأحرف. حيث أن اسم الدالة يمكن أن يبدأ بحرف أو بشرطة سفلية وبعدها يمكن وضع أي عدد من الأحرف أو الأرقام أو الشرطات السفلية.

يمكنك تمرير المعلومات إلى الدوال من خلال قائمة البرامترات التي تمرر ضمن قوسين () بعد اسم الدالة وتفصل بينها بفواصل

اعتبارًا من الإصدار PHP 8، يمكن أن تحتوي قائمة برامترات الدالة على فاصلة في النهاية بعد اسم آخر برامتر وهذه الفاصلة يتم تجاهلها، لكنها مفيدة في حالة تمرير عدد كبير من الوسطاء، أو في حال كون أسماء البرامترات طويلة لذا في هذه الحالة يفضل كتابة البرامترات بشكل عمودي لجعل الكود مقروءًا بشكل أفضل.

<?php
function takes_many_args(
    $first_arg,
    $second_arg,
    $a_very_long_argument_name,
    $arg_with_default = 5,
    $again = 'a default string', // This trailing comma was not permitted before 8.0.0.
)
{
    // ...
}
?>

دوال جاهزة (built-in)

هي دوال مضمنة في لغة PHP حيث تحتوي PHP على أكثر من 1000 دالة مدمجة يمكن استدعاؤها مباشرة داخل الكود البرمجي لأداء مهمة محددة. (كما تضيف نواة ووردبريس كذلك دوال php مضمنة جاهزة خاصة به) يمكنك استخدامها في توسيع وتخصيص الكود البرمجي الخاص بك وكل ما عليك هو استدعاؤها وتمرير البرمترات المناسبة لها.
لكن قبل استدعاء أي دالة جاهزة من الضروري أن تعرف كيفية عمل الدالة، وماالذي ترجعه، وما هي القيم التي يجب أن تمرر لها لكتابة كود PHP صحيح.

قائمة بكافة الدوال الجاهزة في PHP

قائمة بكافة الدوال الجاهزة في نواة ووردبريس

على سبيل المثال، استخدمنا في الفقرات السابقة عدة دوال جاهزة مثل الدالة date() التي تعيد التاريخ والتي يمكن أن نمرر لها وسيط أو برامتر يمثل تنسيق التاريخ المطلوب. والدالة have_posts() التي تعيد قيمة منطقية True  في حال كان هناك مقالات وFalse في حال عدم وجودها.

ومن الأمثلة الأخرى على دوال جاهزة في نواة ووردبريس تستخدم بشكل كبير:

  • get_post_type (): تعيد نوع المنشور سواء كان منشور افتراضي في ووردبريس أم منشور من نوع مخصص
  • get_the_title (): تعيد عنوان المنشور
  • the_excerpt () تعيد مقتطف المنشور
  • the_content () تعيد محتوى المنشور
  • the_tags () تعيد وسوم المنشور

وهناك الكثير من الدوال الجاهزة الأخرى التي يمكنك الاستفادة منها في تطوير ووردبريس.
على الرابط التالي لائحة بأشهر 100 دالة جاهزة في ووردبريس

8.مفهوم البرمجة الشيئية (OOP)

تدعم لغة PHP لغة برمجة شيئية أو غرضية التوجه (Object Oriented Programming) أو اختصارًا (OOP) وهي أحد المفاهيم البرمجية الحديثة نسبيًا والتي تعتمد على مفهوم الصفوف أو الأصناف (Classes) والكائنات أو الأغراض (Objects) والتي تسمى أحيانًا حالات (Instances)

حيث يتم في البرمجة الشيئية إنشاء صفوف تحتوي على بيانات ودوال برمجية معًا بحيث يتضمن الصف مجموعة من الخصائص التي تكون عادة خاصة private بالصف كي لا يتم تعديلها خارج كود الصف، ومجموعة من الإجراءات أو الدوال البرمجية التي تكون عادة عامة public كي يتم استدعاؤها خارج كود الصف، ويعمل الصف كقالب أو نموذج يمكن من خلاله إنشاء مجموعة من الكائنات أو الحالات المختلفة.

لنأخذ بداية مثال من الواقع لفهم الأمر إذا أدرنا بناء منزل بداية ننشيء مخطط للمنزل. المخطط نفسه ليس منزلًا ولكنه مخطط تفصيلي للمنزل. يمكن اعتبار المخطط على أنه الصف Class، عند بناء منزل فعلي بالاعتماد على هذا المخطط فالمنزل الفعلي هو الكائن.

وبما أنه يمكننا بناء عدة منازل متماثلة من نفس المخطط فبفس الطريقة يمكننا إنشاء كائنات متعددة من نفس الصف، ولكن يمكن تخصيص كل منزل وفق احتياجاتنا مثلاً قد يكون لكل منزل ألوان دهان مختلفة وديكورات داخلية مختلفة.. باختصار الصف عبارة عن مخطط لإنشاء كائن.

اقرأ المزيد: البرمجة كائنية التوجه (Object Oriented Programming) في PHP

الآن لنأخذ مثالًا برمجيًا يوضح الأمر، لنفترض أننا نريد إنشاء صف يمثل مقالة أو تدوينة سيكون للتدوينة خصائص مثل معرف المقالة والعنوان والمحتوى نفسه واسم الكاتب وهل هي منشورة أم لا، وتاريخ النشر وما إلى ذلك.. وسيكون لها إجراءات أو دوال خاصة بها مثل نشر وتعديل وحذف المقالة.

نعبر عن هذا الأمر بلغة PHP كما يلي:

<?php
class Blogpost
{
private  $id;
private  $title;
private $post;
private  $author;
private $is_published;
private  $publish_date;

public function publish() {
        // Publish the post here
    } 
public function delete() {
        // Delete the post here
    }
public function edit() {
        // edit the post here
    }
 
}

بعد أن عرفنا صف يمثل المقالة يمكننا الاعتماد عليه كنموذج إنشاء عدة مقالات مختلفة كما يلي:

$first_post = new Blogpost();
$second_post = new Blogpost();

بالمقابل هناك مفهوم برمجي أسبق يسمى البرمجة الإجرائية ( Procedural programming) ويقتصر الكود البرمجي في هذا النوع من البرمجة على كتابة مجموعة من الإجراءات أو الدوال البرمجية التي تؤدي عمليات على البيانات.

رغم أن أن نظام ووردبريس لازال يعتمد بشكل أكبرعلى أسلوب البرمجة الإجرائية، فمعظم المطورين يعتمدونه في تطوير قوالب وإضافات ووردبريس إلا أن الاستفادة من البرمجة الشيئية في التطوير يمكن أن يجعل الكود أكثر قابلية للاستخدام.

9.استخدام مجالات الأسماء (Namespace)

لابد أن تكون أسماء الصفوف والإجراءات والدوال فريدة وغير مكررة في الموقع حتى لا يحدث تعارض فيما بينها، لكن باستخدام مجالات الأسماء يمكن استخدام نفس الصف أو الإجراء دون حدوث تضارب فيما بينها، لأن كل واحدة ستعمل في مجال أسماء PHP خاصة بها

على سبيل المثال يمكن في ملف أول file-A.php ضمن الموقع تسمية دالة باسم do_something

// file-A.php contains a function under the myCompany\PackageA namespace
namespace myCompany\PackageA;
  
function do_something() {
  // do things
}

وفي ملف آخر file-B.php ضمن نفس الموقع يمكن استخدام نفس الاسم للدالة do_something() لأننا استخدمنا هنا مجال أسماء مختلف

// file-B.php contains a function with the same name
// but under a different namespace
namespace myCompany\PackageB;
  
function do_something() {
  // do things
}

اقرأ المزيد: مجالات الأسماء في PHP

يفضل الاعتماد على مجالات الأسماء عند تطوير اي قوالب أو إضافات في ووردبريس فهذا يجعل الكود أكثر تنظيمًا ويحسن أداءه ويجعله أقل عرضة لأخطاء التعارض.

فعند تطوير قالب أو إضافة ووردبريس خاصة بك يمكنك أن تستخدم مجال أسماء مميز وفريد على سبيل المثال يمكن أن تستخدم اسم مجال هو اسم شركتك، أو اسمك الشخصي، أو اسم القالب أو الإضافة التي تقوم بتطويرها.

سنكتفي بهذا القدر من الشرح عن php لأن المقال كما ذكرت بداية ليس موجهًا لتعليمك كافة تفاصيل اللغة بل هو موجه لمساعدتك على تعلم الأساسيات التي تفيدك في تطوير قالب أو إضافة ووردبريس متكاملة وتعمل بشكل صحيح.

وإذا رغبت في تعلم المزيد ستجد في الفقرة التالية مجموعة من المصادر الهامة التي تساعدك على تعلم اللغة بشكل مفصل ومعمق.

مصادر لتعلم المزيد حول لغة PHP

استخدام PHP ضمن ووردبريس

إذا استعرضت ملفات موقع ووردبريس الخاصة بك ستتمكن من رؤية مئات الملفات البرمجية وأكواد PHP سواء ضمن مجلد النواة الأساسي لنظام ووردبريس، أو ضمن المجلدات الخاصة بالقوالب والإضافات الخارجية.

إن فهم الطريقة التي تعمل بها هذه الملفات تسهل عليك مهمة تعلم تطوير ووردبريس بشكل كبير. وفي هذه الفقرة سنركز بشكل أكبر على ملفات قوالب ووردبريس ونحاول فهمها بمزيد من التفصيل بعد أن كونها فكرة أساسية عن لغة php نساعدنا في فهم ما يجري.

وقد شرحنا في مقالات سابقة الملفات الأساسية لملفات قالب ووردبريس وتسلسلها الهرمي لذا من الضروري أن تتصفح هذه الملفات وتفهم آلية عملها بشكل جيد كي تتمكن من إدارة موقعك وتطويره بشكل ناجح.

على سبيل المثال دعونا نستكشف ملفات القالب الافتراضي المسمى twentytwentyone الذي يأتي بشكل ضمني مع أي تثبيت ووردبريس.

بما أننا نعمل على السيرفر المحلي سنصل لملفات هذا القالب من خلال المسار التالي C:\xampp\htdocs\testsite\wp-content\themes مع استبدال testsite باسم مجلد المواقع الخاص بك.

لنفتح الملف content.php من القالب الافتراضي ونلقي نظرة عليها هذا الملف المسؤول عن عرض محتوى مقالات المدونة في القالب (ستجده ضمن المسار الفرعي \template-parts\content) لمجلد القالب ونحاول قراءة أكواد php ضمن الملف.

إذا تجاهلنا كود php الذي يتضمن عدة أسطر من التعليقات في بداية الملف وقرأنا أول سطربعده سيكون التالي

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

يمكننا أن نستنتج من قراءة الكود السابق أن هذا الكود يستخدم دالتين جاهزتين في ووردبريس هما الدالة the_ID() التي تجلب لنا معرف المنشور الحالي، والدالة post_class () التي ترجع الصفوف الخاصة بعنصر HTML محدد وهي تفيدنا في تصميم وتنسيق هذه المقالة لاحقًا.

الأسطر التالية من الملف تتضمن كود PHP التالي

		<?php if ( is_singular() ) : ?>
			<?php the_title( '<h1 class="entry-title default-max-width">', '</h1>' ); ?>
		<?php else : ?>
			<?php the_title( sprintf( '<h2 class="entry-title default-max-width"><a href="%s">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>
		<?php endif; ?>

لدينا هنا تعليمة شرطية (if-else) تستدعي بداية الدالة الجاهزة is_single () التي تعيد true في حال كنا ضمن صفحة تعرض منشور واحد فقط في الموقع وإلا فإنها تعيد false.
وفي حال كان الشرط محقق سوف نستدعي الدالة the_title التي تعرض لنا عنوان هذا المنشور بتنسيق h1. وإذا كان الشرط غير محقق فما زلنا نعرض العنوان من خلال الدالة the_title لكن بتنسيق h2 ونعرض كذلك رابط ضمن هذا العنوان لينقلنا للصفحة الخاصة بالمنشور الفردي.

لاحظ أن الأٌقواس () تكون بعد بعض أسماء الدوال فارغة، والأقواس بعد بعضها الآخر يتضمن عدة قيم وهذا يعتمد على البرامترات التي تحتاج الدالة للحصول عليها خلال استدعائها.

كما ذكرنا سابقَا من الضروري معرفة برامترات كل دالة من خلال العودة للتوثيق الخاص بها، على سبيل المثال الدالة the_title() حسب التوثيق الرسمي للوردبريس تحتاج ثلاث برامترات كما يلي

the_title( string $before = '', string $after = '', bool $echo = true )

البرامتر الأول يسمح لنا بإضافة HTML قبل العنوان، والبرامتر الثاني يسمح لنا بإضافة HTML بعد العنوان، والبرامتر الثالث هو برامتر منطقي اختياري يحدد هل نريد من الدالة أن تطبع العنوان بتعليمة echo أو ترجع قيمته فقط لاستخدامها لاحقًا.

كود PHP الأخير الموجود في هذا الملف هو التالي

		<?php twenty_twenty_one_post_thumbnail(); ?>

وهو عبارة عن استدعاء لدالة خاصة معرفة ضمن القالب وليست دالة جاهزة، وإذا بحثنا عن كود تحقيق هذه الدالة سنجده في ملف آخر ضمن القالب هو الملف template-tags.php الموجود ضمن المجلد الفرعي inc، ومهمة هذه الدالة حسب تحقيق الكود الخاص بها هو عرض الصورة المصغرة أو ما يعرف باسم الصورة المميزة للمنشور.

كلما تعمقت في فهم التفاصيل البرمجية ومعرفة مهمة كل دالة وكل تعليمة برمجية في القالب ستكون لديك المرونة في استخدامها وتطويعها في تطوير قالبك.

فالتعلم بهذه الطريقة ممتع ويشجعك على العودة لتوثيق كل دالة والتبحر في الكود البرمجي مما يطور مهاراتك في التعامل معه بمرونة أكبر.
قد لا تفهم كل شيء من أول مرة لكن شيئًا فشيئًا ستصل إلى ربط الأمور ببعضها وفهم كل ما يجري في كواليس قالب ووردبريس.

وهناك بعض الأمور والمفاهيم الأخرى التي يتضمنها نظام ووردبريس والتي شرحناها في مقالات منفصلة والتي تعزز عملية فهم كامل الكود وننصح بالعودة إليها مثل مفهوم الخطافات في ووردبريس التي تسمح لك بتعديل الوظائف الافتراضية للوردبريس، وواجهات برمجة التطبيقات API، وشرح الصف WP_Query في ووردبريس وحلقة ووردبريس التي تتحكم في عرض المنشورات..

وتذكر أنك خلال عملية التعلم والتطوير قد ترتكب بعض الأخطاء وهذا أمر طبيعي، وكي تتمكن من استكشاف سبب الخطأ ولهذا السبب من الضروري أن تمكن ميزة وضع التصحيح (Debug Mode) التي تظهر أي أخطاء في التعليمات البرمجية لمعرفة سبب الخطأ والعمل على حله، لأن ووردبريس تلغي افتراضيًا هذه الميزة كنوع من الحماية.

لقرأ المزيد: تمكين وضع تصحيح الأخطاء Debug Mode في ووردبرس

الخلاصة

إن تعلم لغة PHP أمر أساسي لأي شخص يرغب في تعلم تطوير ووردبريس واكتساب خبرة في تطوير القوالب والإضافات، لكن لا يتوجب عليك الاطلاع على كبيرة وصغيرة تختص بلغة PHP قبل أن تبدأ بتطوير ووردبريس.

يكفي أن تتعلم المبادئ الأساسية للغة وتحاول أن تفهم أهم أكواد PHP التي يستخدمها ووردبريس وتجرب أن تفهم بشكل كامل الأكواد المستخدمة في أحد القوالب أو الإضافات البسيطة وتعدل عليها وتفهم آلية عملها حتى تتضح لك الصورة الكاملة وبعدها يمكنك أن تبدأ بتطوير قوالب وإضافات أكثر تقدمًا.

فبمجرد أن تكون لديك معرفة عملية جيدة بالكود المصدري المستخدم في ووردبريس، ستتمكم من البدء في إنجاز الأمور بنفسك وتطويعها بما يناسب متطلباتك. المهم أن تبدأ وتضع في حسبانك أن أن البرمجة تتطلب منك بعض الجهد والالتزام في التعلم، ومهارة في البحث، والصبر في حل أي مشكلات تواجهك خلال رحلة التطوير.

م.علا صالح مديرة المحتوى في موقع ووردبريس بالعربية. حاصلة على إجازة في هندسة البرمجيات ونظم المعلومات، وماجسيتر في علوم الويب. عملت لفترة طويلة في التدريس الأكاديمي، ما أكسبني خبرة في إعداد المحاضرات والشروحات التعليمية ولا سيما في المجال التقني.