<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x628;&#x631;&#x645;&#x62C;&#x629; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/page/5/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x628;&#x631;&#x645;&#x62C;&#x629; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</description><language>ar</language><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x646;&#x634;&#x626; &#x631;&#x62A;&#x628;&#x629; &#x639;&#x636;&#x648; &#x645;&#x64F;&#x62E;&#x635;&#x64E;&#x651;&#x635;&#x629; &#x641;&#x64A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%A6-%D8%B1%D8%AA%D8%A8%D8%A9-%D8%B9%D8%B6%D9%88-%D9%85%D9%8F%D8%AE%D8%B5%D9%8E%D9%91%D8%B5%D8%A9-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r104/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/wp-custom-user-roles_(1).png.991f12b8ed12bfc33a04fbce6804bded.png" /></p>

<p dir="rtl">إحدى المميزات الرئيسية لووردبريس والتي عادة لا يعرف عنها الكثيرون هي أن هناك رتبًا للأعضاء مختلفة الصلاحيات والمستويات. وهي تساعد على التأكد من وصول المستخدمين للأماكن التي يحتاجونها فقط دون العبث بأدوات قد تتسبب بتوقّف الموقع. سنتحدث عنها باختصار في هذا المقال بالإضافة إلى كيفية  إنشاء رتب أعضاء مُخصَّصة بنفسك.</p><p dir="rtl" style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_06/wp-custom-user-roles_(1).png.6ec1759010bc44b47d21627d7f6dfa8c.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2950" src="https://academy.hsoub.com/uploads/monthly_2015_06/wp-custom-user-roles_(1).thumb.png.c2b99cfc52a0ec7c4b9d7824ec5c7299.png" class="ipsImage ipsImage_thumbnailed" alt="wp-custom-user-roles_(1).thumb.png.c2b99"></a></p><p dir="rtl">لقد كانت رتب الأعضاء جزءًا لا يتجزأ من تجربة ووردبريس منذ الإصدارة رقم 2.0. ومع ذلك لا يدرك معظم الناس وجودها، فيمنحون حقوق الإدارة الكاملة لكل شخص يملك وصولًا إلى لوحة التحكم الخاصة بهم (وهذا بالطبع غير مستحب لأسباب عديدة). يأتي ووردبريس مجهزًا بستّ رتب افتراضية:</p><ul><li><strong>مدير:</strong> يملك جميع الخصائص والوظائف الإدارية في الموقع.</li><li><strong>محرر:</strong> يمكنه نشر وإدارة مقالات جميع المستخدمين، بما في ذلك مقالاتهم الخاصة.</li><li><strong>مؤلف:</strong> يمكنه نشر وإدارة مقالاته الخاصة.</li><li><strong>مساهم:</strong> يمكنه كتابة وإدارة مقالاته الخاصة ولكن لا يمكنه نشرها.</li><li><strong>مشترك:</strong> يمكنه فقط إدارة نبذته الخاصة.</li></ul><h2 dir="rtl">لِم نستخدم رتب الأعضاء المُخصَّصة؟</h2><p dir="rtl">بالنسبة لمعظم الناس تفي رتب الأعضاء الافتراضية بالمطلوب. ولكن هناك حالات تحتاج فيها لرتبة ذات صلاحيات مختلفة عن الصلاحيات المتاحة في الرتب الافتراضية. وفي هذا المقال سنعرف كيف تنشئ رتب أعضاء مُخصَّصة بنفسك دون الاستعانة بالإضافات.</p><p dir="rtl">دعنا نلقِ مثالًا من العالم الواقعي. إذ عادة ما أستخدم رتب الأعضاء المُخصَّصة للتأكد من أن عملائي يملكون نفاذًا فقط للأشياء التي يحتاجونها. قد يختلف البعض مع هذا بحجة أنه موقع العميل ويجب أن يملك صلاحيات المدير بصفته المالك. وهذا صحيح إذا كنت ستسلم الموقع إلى العميل ولن تكون مسئولًا عن صيانة الموقع.</p><p dir="rtl">لكن إذا كنت مسئولًا عن الحفاظ على الموقع قائمًا وفعّالًا طوال اليوم، فهنا أقترح عليك تحديد صلاحيات العميل عن طريق رتبة مُخصَّصة. هكذا أستطيع منح العميل كل شيء يحتاجه للإبقاء على موقعه نشطًا، مثل إضافة المحتوى، وربما إضافة فعاليات أو أي شيء يريدون فعله. ولكن ما لا يستطيعون فعله هي الأشياء التي قد تتسبب بسقوط الموقع أو تعطيل وظيفته. إذ أحظر صلاحيات إضافة أو حذف الإضافات والقوالب، وتحديث البنية الأساسية، وكل الوظائف التي تقع ضمن مجالي في صيانة الموقع.</p><h2 dir="rtl">وظائف ووردبريس الأساسية</h2><p dir="rtl">لإدارة الرتب والصلاحية بكفاءة، هناك خمس وظائف بسيطة:</p><ul dir="rtl"><li><strong><span style="font-family:courier new,courier,monospace;">()add_role:</span></strong> تتيح لك إضافة رتبة مُخصَّصة.</li><li><strong><span style="font-family:courier new,courier,monospace;">()remove_role:</span></strong> تتيح لك حذف رتبة مُخصَّصة.</li><li><strong><span style="font-family:courier new,courier,monospace;">()add_cap:</span></strong> تتيح لك إضافة صلاحيات جديدة إلى الرتبة.</li><li><strong><span style="font-family:courier new,courier,monospace;">()remove_cap:</span></strong> تتيح لك حذف صلاحيات من الرتبة.</li><li><strong><span style="font-family:courier new,courier,monospace;">()get_role:</span></strong> تعرض لك معلومات عن رتبة ما بالإضافة إلى الصلاحيات المُلحقة بها.</li></ul><p>سنستخدم فقط وظيفة<strong><span style="font-family:courier new,courier,monospace;"> ()add_role</span></strong> في هذا المقال عند إنشاء رتبة مُخصَّصة لعميلنا الخيالي.</p><h2 dir="rtl">تحديد صلاحيات رتبة العضو</h2><p dir="rtl">قبل أن نبدأ في كتابة النص البرمجي علينا أن نجهز خطة، لأنه ليس من المستحب البداية في البرمجة دون خطط.</p><p dir="rtl"><strong>أولًا،</strong> نحتاج لتسمية رتبة العضو خاصتنا. ويمكننا تسميتها ببساطة "عميل Client”.</p><p dir="rtl"><strong>ثانيًا،</strong> نحتاج لتحديد صلاحيات رتبة "عميل". هناك حوالي 50 صلاحية مختلفة للاختيار منها في النسخة الافتراضية من ووردبريس (ويزداد العدد عند إنشاء الإضافات). هدفنا هو أن يستطيع العميل فعل الآتي:</p><ul dir="rtl"><li>إنشاء المقالات.</li><li>تعديل المقالات.</li><li>تعديل مقالات الآخرين.</li><li>إدارة التصنيفات.</li><li>تعديل الصفحات.</li></ul><p dir="rtl">وفي الوقت ذاته لا نريده أن يستطيع فعل الآتي:</p><ul dir="rtl"><li>تعديل القوالب.</li><li>إضافة أو حذف الإضافات.</li><li>تحديث البنية الأساسية.</li></ul><h2 dir="rtl">كتابة النص البرمجي</h2><p dir="rtl">سنضيف هذا النص البرمجي إلى ملف <span style="font-family:courier new,courier,monospace;">functions.php</span> التابع لقالبنا الفعّال. لذا دعنا نبدأ بإضافة الآتي:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">// إضافة رتبة عضو مُخصَّصة
$result = add_role( 'client', __('عميل' ), array( ) );</pre><p dir="rtl">هكذا أنشأت بإضافة ذلك النص البرمجي رتبة عضو جديدة (يمكنك العثور عليها في القائمة المنسدلة في صفحة أضف عضو جديد). لكن هذه الرتبة لا تمتلك صلاحيات بعد. لذا فالخطوة التالية بالطبع ستكون إضافة صلاحيات تفي بالمتطلبات التي ذكرناها سابقًا. فقط أضف نص المتتالية <span style="font-family:courier new,courier,monospace;">array</span> إلى النص السابق الذي قمت بإدخاله في ملف <span style="font-family:courier new,courier,monospace;">functions.php</span>.</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">// إضافة رتبة عضو مُخصَّصة
$result = add_role( 'client', __('عميل' ), array(
    'read' =&gt; true, // تسمح بصلاحية القراءة
    'edit_posts' =&gt; true, // تسمح للمستخدم بتعديل مقالاته الخاصة
    'edit_pages' =&gt; true, // تسمح للمستخدم بتعديل الصفحات
    'edit_others_posts' =&gt; true, // تسمح للمستخدم بتعديل مقالات الآخرين
    'create_posts' =&gt; true, // تسمح للمستخدم بإنشاء مقالات جديدة
    'manage_categories' =&gt; true, // تسمح للمستخدم بإدارة التصنيفات
    'publish_posts' =&gt; true, // تسمح للمستخدم بنشر المقالات، أو ستُحفظ كمسودّات
)
);
</pre><p dir="rtl">هذا سيعطينا الصلاحيات التي تمَكّن المستخدم من فعل ما يحتاجه، ولكننا ما زلنا بحاجة لحظر الصلاحيات التي قد تؤدي إلى سقوط الموقع. لذا سنضيف النص التالي:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">// إضافة رتبة عضو مُخصَّصة

$result = add_role( 'client', __('عميل' ), array(
    'read' =&gt; true, //  تسمح بصلاحية القراءة
    'edit_posts' =&gt; true, // تسمح للمستخدم بتعديل مقالاته الخاصة
    'edit_pages' =&gt; true, // تسمح للمستخدم بتعديل الصفحات
    'edit_others_posts' =&gt; true, // تسمح للمستخدم بتعديل مقالات الآخرين
    'create_posts' =&gt; true, // تسمح للمستخدم بإنشاء مقالات جديدة
    'manage_categories' =&gt; true, // تسمح للمستخدم بإدارة التصنيفات
    'publish_posts' =&gt; true, // تسمح للمستخدم بنشر المقالات، أو ستبقى كمسودّات

    'edit_themes' =&gt; false, //  تمنع المستخدم من تعديل القوالب
    'install_plugins' =&gt; false, // لا يستطيع المستخدم تنصيب إضافات جديدة
    'update_plugin' =&gt; false, // لا يستطيع المستخدم تحديث الإضافات
    'update_core' =&gt; false // لا يستطيع المستخدم تحديث البنية الأساسية
)
);</pre><h2 dir="rtl">كيف تتأكد أن رتبة العضو قد أضيفت بشكل صحيح</h2><p dir="rtl">للتأكد من أن رتبة العضو تعمل جيدًا، سننشئ عضوًا جديدًا بالرتبة المذكورة، ثم نسجل الدخول إلى العضوية الجديدة ونلاحظ التغير الحاصل في الأدوات المتاحة في لوحة التحكم، وهذا بناءً على أيّ الصلاحيات منحتها وأيّهم منعتها. وتظهر الصورة بالأسفل ما يجب أن تراه إذا أضفت رتبة العضو كما فعلنا سابقًا.</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/custom-user-role_(1).png.1c9191ee9570ea319dd9091c6ac3e430.png"><img data-fileid="2878" class="ipsImage ipsImage_thumbnailed" alt="custom-user-role_(1).thumb.png.02a12b3d9" src="https://academy.hsoub.com/uploads/monthly_2015_06/custom-user-role_(1).thumb.png.02a12b3d9cba3a06bbcef3e6685f4c9a.png"></a></p><p dir="rtl">كما ترى، الأدوات المتاحة لهذا العضو قد قلت كثيرًا نتيجة للصلاحيات التي تم منحها ومنعها. يمكنك أن ترتاح الآن كمطور/مدير للموقع أنك لن تستقبل رسالة من العميل يقول فيها "لا أعرف ماذا حدث، ولكن فجأة لم يعد موقعي موجوداً".</p><p dir="rtl">مترجم بتصرف من مقال <a rel="external nofollow" href="https://managewp.com/create-custom-user-roles-wordpress">How to Create Custom User Roles in WordPress</a> لكاتبه Al Davis.</p>
]]></description><guid isPermaLink="false">104</guid><pubDate>Wed, 24 Jun 2015 15:04:31 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x645;&#x637;&#x648;&#x631; &#x644;&#x62A;&#x647;&#x64A;&#x626;&#x629; &#x625;&#x636;&#x627;&#x641;&#x627;&#x62A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x644;&#x644;&#x62A;&#x631;&#x62C;&#x645;&#x629;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D8%B7%D9%88%D8%B1-%D9%84%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D8%AA%D8%B1%D8%AC%D9%85%D8%A9-r105/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/wp-plugins-i18n.png.d48bebf60172c69d828f29f5d35225cb.png" /></p>

<p>توجد الكثير من المقالات التّتي تتحدّث عن ترجمة إضافات Plugins ووردبريس، إلّا أنّ القليل منها يتطرّق لتفاصيل عمليّة التّرجمة عندما تكون مهمَّة يوميّة.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/wp-plugins-i18n.png.bbfb2621e8a65b1de5cc9741c4b03f1d.png"><img data-fileid="2896" class="ipsImage ipsImage_thumbnailed" alt="wp-plugins-i18n.thumb.png.5c4cf6d923ef6f" src="https://academy.hsoub.com/uploads/monthly_2015_06/wp-plugins-i18n.thumb.png.5c4cf6d923ef6ffd3991154c80d074e3.png"></a></p><p>مالّذي يحدُث عند تغيير جزء من الشّفرة البرمجيّة Code؟ مالّذي يحدُث عند إضافة سلاسل محارف Strings جديدة؟ مالّذي يحدُث عند تحديث إضافة إلى إصدار جديد؟</p><p>هذه هي نوعيّة الأسئلة الّتي سيُجيب عليها هذا المقال. سنتطرَّق، خطوة بخطوة، كيف نعمل من أجل أن تكون الإضافات الجديدة أو المُحدَّثة جاهزةً للتّرجمة إلى أيّ لغة.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/01_WordPress_Arabic.png.b2e3a8dfacee44e0b97c532b897360f1.png"><img data-fileid="2879" title="يتوفّر ووردبريس بلغات عدّة: تُضَمَّن في نظام ووردبريس لإدارة المحتوى قابليّة الاستخدام بأيّ لغة، على الرّغم من أنّ لغة الواجهة الافتراضيّة هي الإنجليزية الأميركية (التّرميز en_US)" alt="يتوفّر ووردبريس بلغات عدّة: تُضَمَّن في نظام ووردبريس لإدارة المحتوى قابليّة الاستخدام بأيّ لغة، على الرّغم من أنّ لغة الواجهة الافتراضيّة هي الإنجليزية الأميركية (التّرميز en_US)." class="ipsImage ipsImage_thumbnailed" src="https://academy.hsoub.com/uploads/monthly_2015_06/01_WordPress_Arabic.thumb.png.c627c7991846a92d77e6518b63033046.png"></a></p><p>يتوفّر ووردبريس بلغات عدّة: تُضَمَّن في نظام ووردبريس لإدارة المحتوى قابليّةُ الاستخدام بأيّ لغة، على الرّغم من أنّ لغة الواجهة الافتراضيّة هي الإنجليزية الأميركية (التّرميز en_US).</p><h2 id="إنشاء-إضافة">إنشاء إضافة</h2><p>أوّل ما يجب تنفيذه هو إنشاء إضافة. سننشئ إضافةً للتّطبيق عليها. يُمكنك متابعة درس <a href="https://academy.hsoub.com/code/php/wordpress/%D9%85%D9%8F%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-wordpress-r38/">مُقدّمة إلى برمجة إضافات Wordpress</a> للمزيد حول برمجة إضافات ووردبريس.</p><p>ستعمل الإضافة على كتابة نصّ تحفيزي في التّرويسة Header.</p><p>أولًا أنشئ مجلَّدًا جديدًا ضمن مجلَّد الإضافات وسمِّه <code>wp-admin-motivation</code>. ثمّ أنشئ ملفًّا ضمن هذا المجلّد وسمِّه <code>wp-admin-motivation.php</code>. في ما يلي الشّفرة الّتي يجب وضعها في الملفّ:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;?php
/*
Plugin Name: Admin Motivation
Plugin URI: http://danielpataki.com
Description: Shows motivational messages in the admoin bar
Author: Daniel Pataki
Version: 1.0
Author URI: http://danielpataki.com
Text Domain: wp-admin-motivation
*/
function get_motivation_text() {
$motivation = array(
'You are awesome',
'This website is boss',
'You look great today',
'Your earlobes are well rounded, good job!'
);
shuffle( $motivation );
return $motivation[0];
}
add_action( 'admin_notices', 'show_motivation_text' );
function show_motivation_text() {
$text = get_motivation_text();
echo "&lt;p id='wp-admin-motivation'&gt;$text&lt;/p&gt;";
}
add_action( 'admin_enqueue_scripts', 'motivation_assets' );
function motivation_assets($hook) {
wp_enqueue_style( 'motivation-styles', plugin_dir_url( __FILE__ ) . 'styles.css' );
}</pre><p>تخلِط الدّالّة الأولى <code>()get_motivation_text</code> مصفوفة Array من العبارات التّحفيزيّة باستخدام دالّة <code>shuffle</code> الموجودة في PHP، ثمّ بعد الخلط تختار العبارة الأولى من المصفوفة. يُمكن عدّ دالّة <code>()get_motivation_text</code> وسيلةً لتوزيع العبارات التّحفيزيّة عشوائيًّا.</p><p>نربُط في الخطوة التّاليّة بين دالّة <code>()show_motivation_text</code> والخطّاف Hook المسمَّى <code>admin_notices</code>. تحصُل دالّة <code>()show_motivation_text</code> على عبارة تحفيزيّة عشوائيّة عن طريق <code>()get_motivation_text</code> ثمّ تطبع العبارة داخل فقرة ذات معرّف <code>wp-admin-motivation</code>.</p><p>تكون العبارة التّحفيزيّة، بالوصول إلى هذه النّقطة، مرئيّة؛ ولكنّنا سنغيّر موضعها لتكون إلى جانب تبويب خيّارات/مساعدة (Options/help). نستخدم CSS لهذا الغرض.</p><p>تكتفي بعض الإضافات بوضع بضعة أسطر CSS في التّرويسة، إلّا أنّ الطّريقة الصّحيحة للتّعامل مع CSS هيّ إدراج الأسطُر ضمن الطّابور Queue؛ وذلك عن طريق ربط دالّة <code>()motivation_assets</code> بالخطّاف <code>admin_enqueue_scripts</code> وإدراج CSS في الطّابور هناك.</p><p>يحدّد النّمط مواضع النّصّ مع أخذ اتّجاه الكتابة من اليمين إلى اليسار Right-to-left, RTL في الحسبان.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">#wp-admin-motivation {
float: right;
padding-right: 15px;
padding-top: 7px;
margin: 0;
font-size: 11px;
}

.rtl #wp-admin-motivation {
float: left;
padding-left: 15px;
}</pre><p>الإضافة جاهزة الآن للعمل. المشكل الوحيد هو أنّ العبارات التّحفيزيّة تستخدم الإنجليزيّة فقط. إن أردت استخدام لغة أخرى فسيتطلّب الأمر إنشاء إضافة مماثلة وإبدال العبارات الإنجليزيّة بعبارات اللّغة المستهدفة. تخيّل أنّك تُريد استهداف عشرين لغةً، يعني هذا أنّك ستحتاج لعشرين إضافة لا يوجد فرق بينها سوى في العبارات المعروضة. الكثير من الجهد المهدور، لا بدّ من وجود وسيلة أخرى.</p><h2 id="تدويل-internationalizing-إضافة">تدويل Internationalizing إضافة</h2><p>يهدف تدويل الإضافات في الأساس إلى جعلها جاهزةً لتُترجَم. يتطلّب التّدويل تغليفَ سلاسل المحارف Strings في دوالّ خاصّة تُسخدَم لتحميل التّرجمات الصّحيحة.</p><p>توجد العديد من دوالّ التّدويل إلّا أنّنا سنأخذ فقط واحدةً منها، وهي دالّة <code>()__</code>، ونترك البقيّة إلى أن نفهم المثال.</p><p>تأخذ الدّالّة <code>()__</code> معطييْن: النّص الّذي نُريد ترجمته ونطاق النّصّ Text domain. في ما يلي الصّيغة العامّة لاستخدام هذه الدّالّة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;?php $greeting = __( 'Hello There!', 'text-domain' ); ?&gt;</pre><p>نحصُل بعد استخدام دالّة <code>()__</code> على ترجمة النّصّ إن كانت موجودة، وإلّا فإنّ الدّالّة تُعيد النّصّ الأصليّ. تستخدم الدّالّةُ اللّغةَ الحاليّة لتحديد التّرجمة المطلوبة. يُمكنك الانتقال بين لغات ووردبريس في الإعدادات. تُطبَّق اللّغة المُختارة في الإعدادات على جميع التّرجمات.</p><p>نأتي الآن لنطاق النّصّ، حتّى تكتمل عندنا الصّورة. نطاق النّصّ هو طريقة لتجميع التّرجمات مع بعض. لدى القالب Theme الّذي تستخدمه نطاق نصّ خاصّ به، نفس الشّيء بالنّسبة لجميع الإضافات. تجعل نطاقات النّصوص من التّفريق بين التّرجمات عمليّةً أيسر.</p><p>يجب أن يكون نطاق النّصّ، بالنّسبة للإضافات، مطابقًا لاسم مجلّد الإضافة. يعني هذا، في مثالنا، أنّ نطاق النّصّ يجب أن يكون <code>wp-admin-motivation</code>. كلّ ما ياوجّب علينا فعله، من أجل تدويل الإضافة، هو تغليف سلاسل المحارف بالدّالّة <code>()__</code>.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$motivation = array(
__( 'You are awesome', 'wp-admin-motivation'),
__( 'This website is boss', 'wp-admin-motivation'),
__( 'You look great today', 'wp-admin-motivation'),
__( 'Your earlobes are well rounded, good job!, 'wp-admin-motivation')'
);</pre><h2 id="تنفيذ-الترجمات">تنفيذ التّرجمات</h2><p>جعلنا في الخطوة السّابقة سلاسل المحارف جاهزةً للتّرجمة، لكن لحدّ الآن لا توجد أيّ ترجمات على الموقع. يجب أن نخبر ووردبريس أين توجد ترجمات الإضافة. الطّريقة المعياريّة لذلك هي إنشاء مجلّد فرعيّ باسم <code>lang</code> ضمن مجلَّد الإضافة. أنشئ مجلّد <code>lang</code> الآن وأضف الشّفرة التّاليّة في الملفّ الرّئيس للإضافة حتى يعرف ووردبريس أين توجد التّرجمات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">add_action('plugins_loaded', 'wan_load_textdomain');
function wan_load_textdomain() {
load_plugin_textdomain( 'wp-admin-motivation', false, dirname( plugin_basename(__FILE__) ) . '/lang/' );</pre><p>تعدّ دالة <code>()load_plugin_textdomain</code> أساسيّةً هنا ويجب أن تُستدعى من دالّة مربوطة بالخطّاف <code>plugins_loaded</code>. أوّل معطى لدالّة <code>()load_plugin_textdomain</code> هو اسم نطاق النّصّ الّذي تحدّثنا عنه سابقًا، الثّاني مهجور Deprecated، والثّالث هو مجلّّد اللّغة.</p><p>ستكون أسماء ملفّات التّرجمات على صيغة <code>plugin_name-locale.mo</code>. حيثُ <code>plugin_name</code> اسم الإضافة و<code>locale</code> المحلّيّة. سنرى في ما بعد كيفيّة إنشاء هذه التّرجمات. تذكّر، في الوقت الحاليّ، أنّك يجب أن تضع ملفّات التّرجمات هنا.</p><p>ملحوظة: المحليّة Locale هي مجموعة من المُعطيات تحدّد لغة المستخدم، دولته، وأيّ تفضيلات خاصّة قد يودّ المستخدم رؤيتها في لغة الواجهة. سنختار ترجمة العبارات التّحفيزيّة الموجودة في الإضافة إلى اللّغة العربيّة؛ لذا سيكون المفّ باسم <code>wp-admin-motivation-ar.mo</code>.</p><p>بالوصول إلى هذه النّقطة سيعمل كلّ شيء بالطريقة المرجوَّة، ينقُصُنا فقط إنشاء التّرجمات.</p><h2 id="إنشاء-الترجمات">إنشاء التّرجمات</h2><p>توجد طُرُق متعدّدة لإنشاء ترجمات إلّا أنّ النّتيجة في النّهاية متطابقة. ستحصُل على ملفّين، أحدهما بامتداد <code>po.</code> والآخر بامتداد <code>mo.</code> الأوّل يُمكن للأشخاص قراءته، ويُمكنك فتحه بأيّ محرّر نصوص والتّعديل عليه. أمّا الملفّ ذو الامتداد <code>mo.</code> فهو نتاج تحويل ملفّ <code>po.</code> إلى صيغة مقروءة بالنّسبة للآلة، ذات حجم أصغر بكثير إلّا أنّه لا يمكن للإنسان قراءتها.</p><p>في ما يلي مثال على ملفّ PO غير مُترجَم. توجد في أعلى الملفّ معلومات أساسيّة عن التّرجمة، المترجِم والمشروع؛ تليها سلاسل محارف تُمكن ترجمتها متبوعة بأماكن التّرجمات المنتظَرة.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">msgid ""
msgstr ""
"Project-Id-Version: WP Admin Motivation 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-04-27 13:09+0100\n"
"PO-Revision-Date: 2015-04-27 13:09+0100\n"
"Last-Translator: Daniel Pataki &lt;contact@tastique.org&gt;\n"
"Language-Team: Daniel Pataki &lt;hello@danielpataki.com&gt;\n"
"Language: Hungarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-KeywordsList: __;_e\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SearchPath-0: ..\n"

#: ../wp-admin-motivation.php:20
msgid "You are awesome"
msgstr ""

#: ../wp-admin-motivation.php:21
msgid "This website is boss"
msgstr ""

#: ../wp-admin-motivation.php:22
msgid "You look great today"
msgstr ""

#: ../wp-admin-motivation.php:23
msgid "Your earlobes are well rounded, good job!"
msgstr ""</pre><p>الصّيغة العامّة للأسطُر في ملفّ التّرجمة هي التّاليّة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">#: مسار الملفّ الّذي توجد به السّلسلة:رقم السّطر حيثُ توجد السّلسلة
msgid "السّلسة المطلوبة ترجمتها"
msgstr "التّرجمة"</pre><p>قد تظنّ أنّ كون أماكن تواجد السّلاسل مذكورة مباشرةً بعد ذكر رقم السّطر الّذي تتواجد به يجعل من إنشاء وصيّانة ملفّات التّرجمة أمرًا شاقًّا. لهذا السّبب توجد أدوات مخصًّصة للمساعدة. تُساعد أدوات المدير Admin tools في توليد ملفّات <code>po.</code> للإضافات الموجودة في مستودع ووردبريس. كما يُمكن أيضًا إنشاء ملفّات <code>po.</code> عبر البرنامج الرّائع Poedit.</p><p>نزّل Poedi وشغّله؛ انقُر على File (ملفّ) ثمّ New catalog (مسرَد جديد). أدخل المعلومات المطلوبة في النّافذة المنبثقة. لا تهتّم بطقم المحارف (Charset) وصيّغ الجمع (Plural forms)؛ سنكتفي الآن بالمعلومات الأساسيّة.</p><div class="figure"><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/02_Poedit_Catalog_properties.png.611399e99daaa1cdfb871836d2c40628.png"><img data-fileid="2883" class="ipsImage ipsImage_thumbnailed" alt="02_Poedit_Catalog_properties.thumb.png.2" src="https://academy.hsoub.com/uploads/monthly_2015_06/02_Poedit_Catalog_properties.thumb.png.25c1109055bddbe71a140f0d06200f56.png"></a></p><p class="caption">انتقل إلى تبويب Sources paths (مسارات المصادر). يُخبر مربَّع Paths (المسارات) Poedit أين يجب عليه البحث عن السّلاسل القابلة للتّرجمة ذات العلاقة بالمسار القاعديّ (Base path).</p><p class="caption" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/03_Poedit__Sources_paths.png.922ea2c20169223b2270ae8f1fe6080b.png"><img data-fileid="2880" class="ipsImage ipsImage_thumbnailed" alt="03_Poedit__Sources_paths.thumb.png.396ab" src="https://academy.hsoub.com/uploads/monthly_2015_06/03_Poedit__Sources_paths.thumb.png.396ab2082d360cf2f537b4087bb2bd2f.png"></a></p><p class="caption">سنضع التّرجمات ضمن مجلَّد فرعيّ في الإضافة؛ يعني هذا أنّ لدينا خيّارين لإعداد المسارات في Poedit:</p></div><ul><li>ضبط المسار القاعديّ Base path على القيمة <code>/..</code> (المجلَّد الأب) وإعطاء القيمة <code>.</code> (المجلَّد الحاليّ) لمربَّع المسارات Paths.</li><li>ضبط قيمة المسار القاعديّ Base path على قيمة المجلَّد الحاليّ <code>.</code> وقيمة مربَّع المسارات Paths على المجلَّد الأب <code>/..</code>.</li></ul><p>يُخبر الخيّار الأوّل Poedit أنّ الشّفرة البرمجيّة للإضافة موجودة في المجلَّد الأب لمجلَّد اللّغة lang؛ أي أنّ البرنامج سيذهب للمجلَّد الأب ويبحث في ذلك المجلَّد. أمّا الخيّار الثّاني فيقول إنّ المجلَّد الّذي يوجد به الملفّ الحاليّ هو مجلَّد اللّغة؛ وأنّ الملفّات الّتي يجب التّحقّق منها توجد في المجلَّد الأعلى، لذلك استخدمنا <code>/..</code> في مربَّع المسارات Paths. سنعتمد في هذا الدّرس الخيّار الثّانيّ.</p><p>الخطوة التّاليّة هي ضبط الكلمات المفتاحيّة في تبويب Sources keywords (الكلمات المفتاحيّة للمصادر). نحدّد في هذا التّبويب أسماء دوالّ التّرجمة المستخدَمة. في المثال هنا نحتاج فقط لإضافة دالّة <code>__</code>. في أغلب الحالات ستحتاج لإدراج دالتّيْن إلى ثلاث؛ راجع التّرجمة المتقدّمة أدناه.</p><p>لم يبق إلّا الموافقة على البيانات المُدخَلة. سيطلُب منك البرنامج مكان حفظ الملفّ؛ اختر مسار المجلَّد lang إن كنت اعتمدت الخيّار الثّاني في إعداد المسارات أعلاه. سيبحث Poedit في ملفّات الإضافة ويعثُر على السّلاسل الجاهزة للتّرجمة.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/04_Poedit_-_Strings_detected.png.cfc6579be0d4c15d1f3aba022eb8a079.png"><img data-fileid="2881" class="ipsImage ipsImage_thumbnailed" alt="04_Poedit_-_Strings_detected.thumb.png.3" src="https://academy.hsoub.com/uploads/monthly_2015_06/04_Poedit_-_Strings_detected.thumb.png.392a7b5f32579395db93b4714a16e0c4.png"></a></p><div class="figure"><p class="caption">يُمكنك بعدها ترجمة هذه السّلاسل إلى اللّغة الّتي تُريد.</p><p class="caption" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/05_Poedit_Strings_translated.png.e7d950493a51489f06441c63b092f9bc.png"><img data-fileid="2882" class="ipsImage ipsImage_thumbnailed" alt="05_Poedit_Strings_translated.thumb.png.4" src="https://academy.hsoub.com/uploads/monthly_2015_06/05_Poedit_Strings_translated.thumb.png.4820bfc60a402b7d2f3700d22596b062.png"></a></p><p class="caption">احفَظ الملفّ بعد الانتهاء من التّرجمة وسيولّد Poedit ملفّ MO في مجلَّد lang. تجب إعادة تسميّة ملفّ MO (اسم الملفّ في الإعداد الافتراضيّ هو <code>default.mo</code>) ليوافق الصّيغة الّتي ناقشناها سابقًا؛ أي أن اسم الملفّ، في المثال لدينا، هو <code>wp-admin-motivation-ar.mo</code>. بالنّسبة لملفّ PO فلايهمّ اسمه كثيرًا، إلّا أنّ من الأفضل تسميّته بنفس الطّريقة لكي تعرف بسهولة أيّ ملفّ PO يوافق ملفّ MO إذا كانت توجد الكثير من الملفّات في مجلَّد اللّغات.</p></div><p>ستظهر العبارات التّحفيزيّة باللّغة العربيّة؛ بعد وضع ملفّ اللّغة في مجلَّد اللّغات ضمن الإضافة وتفعيل اللّغة العربيّة في إعدادات ووردبريس.</p><h2 id="صيانة-الترجمات">صيّانة التّرجمات</h2><p>يبدو تحديث التّرجمات صعبًا للوهلة الأولى، إلّا أنّه ليس كذلك. صحيحٌ أنّ ملفّ PO يحوي رقم السّطر الّذي توجد به السّلسلة المُترجمَة، لكن ووردبريس لا يعتمد على أرقام الأسطُر عند استخدام ملفّ PO. الهدف من استخدام الملفّ والسّكر الّذيْن توجد بهما سلسلة المحارف المُترجَمة هو مساعدة المترجِم بحيث يُمكن النّظر إلى مكان وجود العبارة ومن ثمّ ترجمتها حسب السّيّاق الّذي وردت فيه.</p><p>لن تحتاج إلى ملفّات التّرجمة إن كانت التّعديلات الّتي تُجريها تقتصر على الشّفرة البرمجيّة الّتي توجد بها سلاسل المحارف الجاهزة للتّرجمة دون أن تعدّل على هذه الأخيرة. ما أفعله عادةً هو إنشاء ملفّ POT ثمّ أحدّثه في كلّ مرة أحدّث فيها الإضافة، حتى ولو لم تتغيَّر سلاسل المحارف.</p><p>تُشبه ملفّات POT ملفّات PO؛ إلّا أنّها لا تحتوي على أيّ ترجمات، فكلّ ما تحتويه هو الجمل والعبارات الجاهزة للتّرجمة؛ أيّ أنّها قوالب فقط. تكون التّرجمات سهلة ما دام ملفّ القالب محدَّثًا ويحوي رقم السّطر الصّحيح لكلّ سلسلة محارف.</p><p>إذا احتجت إلى تحديث ملفّ لغة فكلّ ما عليك فعله هو فتحه عن طريق Poedit ثمّ النّقر على أيقونة التّحديث Update وسيُشعرك البرنامج بالسّلاسل الجديدة والمُعدَّلة ويمكنك بعدها التّعديل عليها.</p><h2 id="قبول-الترجمات">قبول التّرجمات</h2><p>من الأمور الّتي يحدُث فيها الارتباك كثيرًا، على الأقلّ هذا ما حدث لي أولَ وهلة، هو كيفيّة إنشاء ترجمات جديدة لإضافة. كيف يُمكنني إضافة ترجماتي الخاصّة؟ كنتُ أظنّ أنّ هذه العمليّة تحدُث آليًّا، لكنّها ليست كذلك.</p><p>عندما يُعجَب أحدهم بإضافة فإنّه يترجمها إلى لغته باستخدام ملفّ POT المضمَّن في الإضافة ثمّ يُرسل التّرجمة (ملفّات MO وPO) إلى مطوّر الإضافة الّذي يضعها في ملفّ lang، يُنشئ إصدارًا جديدًا ويدفعها إلى مستودع ووردبريس. عندما يتلقّى مستخدم الإضافة التّحديث تظهر الإضافة بلغة واجهة ووردبريس لديه، إن كانت ضمن اللّغات الموجوة في ملفّ lang.</p><p>أستضيف كلّ مستودعاتي على Github وهو ما يسهّل على المترجمين إرسال ملفّات التّرجمة لي باستخدام طلبات السّحب Pull requests. كلّ ما عليّ فعله بعدها هو الضّغط على زرّ وإنشاء إصدار جديد من مستودع ووردبريس.</p><h2 id="الترجمات-المتقدمة">التّرجمات المتقدّمة</h2><p>تعرّفنا في ما سبق على طريقة ترجمة سلاسل محارف قاعديّة عن طريق دالّة <code>()__</code>. توجد 14 دالة ترجمة في ووردبريس يُمكن استخدامها لتدقيق ضبط ترجماتك. على الأرجح لن تحتاج إلّا إلى 3 أو 4 منها. نبدأ بالأشهر من بينها.</p><h3 id="section">1- ()__</h3><p>هذه هي الدّالّة الأساسيّة للتّرجمة. تأخذ سلسلة محارف وتُعيد التّرجمة إن كانت موجودة.</p><h3 id="e">2- ()e_</h3><p>نفس عمل الدّالّة السّابقة تقريبًا، إلّا أنّها بدلًا من إرجاع التّرجمة تعرضها مباشرةً.</p><h3 id="n">3- ()n_</h3><p>تتيح هذه الدّالة وسيلة أنيقة للتّعامل مع الجموع. تأخذ الدّالّة أربعة معطيات: صيغة المفرد، صيغة الجمع، العدد الّذي على أساسه ستعرض الصّيغة (صيغة المفرد أو الجمع) ونطاق النّصّ. في ما يلي مثال سريع:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;?php
$messages = get_message_count();
// الاستعمال المبَسَّط: لا تُظهر الدّالة العدد الفعليّ
$text = _n( 'You have one message', 'You have lots of messages', $messages, 'my-message-app' );
// في طريقة الاستعمال هذه نُظهر العدد الفعليّ للرّسائل
$text = sprintf( _n( 'You have one message', 'You have %s messages', $messages, 'my-message-app' ), $messages )
?&gt;</pre><p>في هذا المثال نحصُل على عدد الرّسائل ضمن متغيّر <code>messages</code> ثمّ نستخدم هذا المتغيّر في دالّة <code>()n_</code> الّتي تعتمد على قيمة المتغيّر لاختيّار سلسلة المحارف الّتي تعرضها (بصيغة المفرد أو الجمع). في طريقة الاستعمال المبسَّط للدّالة لا يظهر عدد الرّسائل ضمن سلسلة المحارف المعروضة حيثُ توجد عبارتان، الأولى للعرض إذا كانت قيمة <code>messages</code> مفردة وتُعرَض الثّانيّة في حالة الجمع. إذا أردنا عرض العدد نستخدم عبارة <code>s%</code> في المكان الّذي نُريد أن يُعرض فيه العدد.</p><p>بالنّسبة لملفّ PO فينبغي أخذ اللّغة الّتي نريد التّرجمة إليها في الحسبان. في أغلب اللّغات الأوروبيّة لا توجد سوى صيغة واحدة للجمع: إذا كان المعدود أكبر من أو يُساوي اثنين يُعدّ جمعا، أي أنّ هناك حالتين فقط (واحدة للمفرَد والأخرى للجمع).</p><p>في اللّغة العربيّة يتغيّر المعدود حسب العدد في ما مجموعه خمس صيّغ (مفرَد، مثنَّى وثلاث حالات بالنّسبة للجمع)، إضافةً للصّيغة الّتي يكون العدد فيها يُساوي صفرا (أيّ أنّ المجموع يُساوي ستة). لمن يُريد التّفصيل في المسألة فليراجع فصل العدد والمعدود في النّحو :).</p><p>لأخذ هذه التّغييرات في الحسبان عند إنشاء ملفّ التّرجمة نُخبر Poedit بعدد صيّغ الجمع الموجودة لدينا، بالنّسبة للعربيّة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&gt;=3 &amp;&amp; n%100&lt;=10 ? 3 : n%100&gt;=11 ? 4 : 5;</pre><div class="figure"><p class="caption" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/06_Poedit_plural_forms.png.82971c76d1f67b0a9b4fb0e9f104e4f8.png"><img data-fileid="2886" class="ipsImage ipsImage_thumbnailed" alt="06_Poedit_plural_forms.thumb.png.4b49678" src="https://academy.hsoub.com/uploads/monthly_2015_06/06_Poedit_plural_forms.thumb.png.4b496783b3536d2dba58274adf2ad86b.png"></a></p></div><p>قبل البدء في البحث عن سلاسل المحارف نُضيف الدّالة <code>n_</code> في تبويب Sources keywords (الكلمات المفتاحيّة للمصادر) حتى يتعرّف عليها البرنامج؛ إضافةً للدّالّة <code>__</code> السّابقة.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/07_Poedit_keywords.png.48bbef6cff0c71e44be386c6ab1a095f.png"><img data-fileid="2884" class="ipsImage ipsImage_thumbnailed" alt="07_Poedit_keywords.thumb.png.5c9b56aa782" src="https://academy.hsoub.com/uploads/monthly_2015_06/07_Poedit_keywords.thumb.png.5c9b56aa78268aab3d9d7f3423c8a6ce.png"></a></p><p><strong>ملحوظة:</strong> من المهمّ جدًّا كتابة الدّالّة بالصّيغة <code>n:1,2_</code> الّتي تعني أنّ المُعطى الأوّل (الرّقم 1) يعبّر عن صيغة المفرد وأنّ المعطى الثّاني لصيغة الجمع.</p><p>يمكننا الآن إنشاء ملفّ اللّغة وترجمة العبارات الواردة فيه مع أخذ الجمع بالحسبان.</p><div class="figure"><p class="caption" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/08_Poedit_plural_forms.png.541ace7f6953a9a566b20e78f6edaeca.png"><img data-fileid="2885" class="ipsImage ipsImage_thumbnailed" alt="08_Poedit_plural_forms.thumb.png.deaf1e6" src="https://academy.hsoub.com/uploads/monthly_2015_06/08_Poedit_plural_forms.thumb.png.deaf1e678d6d73e655cbc70dd02fa29f.png"></a></p><p class="caption"><strong>ملحوظة:</strong> أبقِ عبارة <code>%s</code> في التّرجمات الّتي تحتاج ذلك، أي الّتي يكون العدد فيها اثنان فما فوق. ستُبدَل هذه العبارة بالعدد الفعليّ أثناء تنفيذ البرنامج. مثلًا إذا كان العدد بين 3 و 10 (التّبويب الرّابع في الصّورة، الّذي يحمل العنوان Form 3) فيمكن أن تكون التّرجمة “توجد لديك 3 رسائل” أو “توجد لديك 8 رسائل”. القيمة (3 و 8) ستُعرف أثناء عمل الإضافة الّتي ستضعها مكان <code>%s</code>.</p></div><h3 id="x">4- ()x_</h3><p>تهدف هذه الدّالّة إلى الوقاية من الخلط بين الكلمات مختلفة المعنى الّتي تُكتَب بنفس الطّريقة. مثلًا إذا كنت تستخدم كلمة pair بمعنى “زوج أشخاص” وبمعنى “ربط بجهاز بلوتوث” فيُمكن أن يشتبه المعنى. لمنع الاشتباه ولمساعدة المترجم على اختيّار العبارة المناسبة في لغته استخدم دالّة <code>()x_</code>.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">_x( 'Pair', 'A pair of people', 'my-plugin-textomaind' );
_x( 'Pair', 'As in: pairing devices', 'my-plugin-textomaind' );</pre><h3 id="ex-و-nx">5- ()<em>ex و ()</em>nx</h3><p>يُشبه عمل هاتيْن الدّالتيْن عمل دالّة <code>()x_</code> أعلاه. الفرق هو أنّ <code>()ex_</code> تعرض النّتيجة مباشرةً في حين أنّ <code>nx_</code> تُضيف إمكانيّة تحديد صيغة للجمع.</p><h2 id="تخليص-escaping-الترجمات">تخليص Escaping التّرجمات</h2><p>تتيح الدّوال السّتّ التّاليّة إمكانيّة تخليص التّرجمة من أجل الاستخدام الآمن في نصوص HTML (الثّلاث الأخيرة) أو خاصيّاته attributes (الثّلاث الأولى).</p><ul><li>()esc_attr__</li><li>()esc_attr_e</li><li>()esc_attr_x</li><li>()esc_html__</li><li>()esc_html_e</li><li>()esc_html_x</li></ul><h2 id="ترجمات-noop">ترجمات Noop</h2><p>تسجّل دوالّ Noop سلاسل المحارف بصيغة الجمع في ملفّ POT دون أن تترجمها. يعود السّبب في ذلك إلى أنّ العدد غير معروف سلفًا، وهو ما يعني أنّنا سنحتاج لدالّة أخرى للحصول على العدد وبالتّالي اختيّار صيغة المعدود (الجمع). لهذا السّبب نستخدم دالّة Noop ثمّ نترجم القيمة الحقيقيّة لاحقًا بعد الحصول على العدد. راجع <a rel="external nofollow" href="https://kovshenin.com/2013/_n_noop/">المقال التّالي</a> للمزيد.</p><p>تستخدم الدّوال التّاليّة لهذا الغرض:</p><ul><li><em>()n_</em>noop_</li><li><em>()nx_</em>noop_</li><li>()translate_nooped_plural</li></ul><h2 id="ترجمة-javascript">ترجمة Javascript</h2><p>ربّما ننساءل ماذا عن سلاسل المحارف الموجودة ضمن شفرة Javascript؟ يقدّم ووردبريس الحلّ عبر دالّة <code>()wp_localize_script</code>. تأخذ هذه الدّالّة ثلاثة معطيات: مِقبض Handle (معرّف) السّكريبت الّذي نُريد ترجمته، اسم كائن Object للاستخدام داخل السّكريبت ومصفوفة التّرجمة. في ما يلي مثال على ترجمة سلاسل محارف ضمن Javascript:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">add_action( 'admin_enqueue_scripts', 'motivation_assets' );
function motivation_assets($hook) {
wp_enqueue_script( 'motivation-scripts', plugin_dir_url( __FILE__ ) . 'scripts' );
wp_localize_script( 'motivation-scripts', 'wma', array(
'section_title' =&gt; __( 'Today's motivation', 'wp-admin-motivation' )
));
}</pre><p>بعد إضافة التّرجمات يُمكنك استخدامها في ملفّ Javascript المُسجَّل. يجب عليك استخدام اسم الكائن ومفاتيح مصفوفة التّرجمة:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">jQuery.html( "&lt;h2&gt;" + wma.section_title + "&lt;/h2&gt;" );</pre><h2 id="خاتمة">خاتمة</h2><p>يستخدم ملايين الأشخاص لغاتِهم للتّعامل مع ووردبريس، فلمَ لا تساعدهم في عمل نفس الشّيء مع منتجاتك؟ فلا جعل الإضافات جاهزة للتّرجمة أمر صعب ولا صيّانتها تُمثّل كبير إزعاج.</p><p>يُساعد تجهيز سلاسل المحارف للتّرجمة وإنشاء ملفّات po وmo الجميع كما أنّه يزيد من جودة المنتج.</p><p>ترجمة بتصرّف لمقال <a rel="external nofollow" href="https://premium.wpmudev.org/blog/translating-wordpress-plugins/">Everything You Need to Know About Translating WordPress Plugins</a> لكاتبه <a rel="external nofollow" href="https://premium.wpmudev.org/blog/author/danielpataki/">Daniel Pataki</a>.</p>
]]></description><guid isPermaLink="false">105</guid><pubDate>Tue, 23 Jun 2015 13:51:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62F;&#x62E;&#x644; &#x62A;&#x639;&#x62F;&#x64A;&#x644;&#x627;&#x62A; &#x639;&#x644;&#x649; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x62F;&#x648;&#x646; &#x627;&#x644;&#x645;&#x633;&#x627;&#x633; &#x628;&#x645;&#x644;&#x641;&#x627;&#x62A; &#x627;&#x644;&#x628;&#x646;&#x64A;&#x629; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x629;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%AF%D8%AE%D9%84-%D8%AA%D8%B9%D8%AF%D9%8A%D9%84%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%AF%D9%88%D9%86-%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%B3-%D8%A8%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-r103/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-core-files-changes.png.9457b344d2841dbf805baf47bb832c40.png" /></p>

<p dir="rtl">
	إذا كنت تستخدم ووردبريس لفترة، أو حتى إذا كُنت مستخدمًا جديدًا، فغالبًا ما ستحتاج في وقت ما أن تجري بعض التعديلات في النص البرمجي لموقعك. قد يكون أي شيء، مثل إضافة خاصية أساسية إلى موقعك لا تتطلب إضافة كاملة plugin، أوإنشاء قالب فرعي child theme، وهذا فقط غيض من فيض.
</p>

<p dir="rtl">
	لكن توقف ها هنا! هناك بعض القواعد الأساسية التي يجب معرفتها فيما يتعلق بتعديل النص البرمجي في ووردبريس، بالإضافة إلى بعض المناطق التي يجب تفاديها تمامًا. وهذا ما سنتناوله في مقالنا.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="2820" href="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-core-files-changes.png.71e6908bc46c52270e2bcf2f26d5c2cd.png" rel=""><img alt="wordpress-core-files-changes.thumb.png.0" class="ipsImage ipsImage_thumbnailed" data-fileid="2820" src="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-core-files-changes.thumb.png.0983c9d58c41702a9f7284959f448965.png"></a>
</p>

<h2 dir="rtl">
	قاعدة عامة: إياك أن تعدّل في البنية الأساسية لووردبريس (WordPress Core)
</h2>

<p dir="rtl">
	ربما قد تكون سمعت تلك العبارة الخالدة مرارًا من متمرسي ووردبريس: “لا تعدّل في البنية الأساسية" “Don’t hack core". ما يعنيه هذا هو أنك يجب ألا تلمس الملفات الأساسية، وهي الملفات المسؤولة عن عمل ووردبريس.
</p>

<p dir="rtl">
	لم هذا؟ حسنًا، هناك العديد من الأسباب، لكن دعنا نكتف باثنين من أهمها هنا:
</p>

<ol>
<li>
		عدم ضمان استمرارية موقعك مستقبلًا. إذا أجريت تعديلات في بنية ووردبريس، فإنك تخسر القدرة على التحديث مع المحافظة على تعديلاتك. أي ببساطة، عندما يصدر تحديث جديد وتضغط على زر التحديث لينطبق على موقعك (لأنك شخص منظم يحافظ على تحديث موقعه بانتظام)، فإن تعديلاتك سيتم الكتابة فوقها بالتحديث. مما يضطرك لإعادة كتابتها، وهذا مضيعة للوقت في رأيي.
	</li>
	<li>
		توجد بالفعل إضافة متاحة لهذا. عندما تعدل في بنية ووردبريس، فإنك تفعل بالضبط ما تفعله الإضافات: تغيير، أو إضافة إلى الطريقة التي يعمل بها ووردبريس. بالتالي <a href="https://academy.hsoub.com/search/?tags=%D9%85%D8%AF%D8%AE%D9%84+%D8%A5%D9%84%D9%89+%D8%A8%D8%B1%D9%85%D8%AC%D8%A9+%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA+%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3" rel="">الإضافات</a> هي طريقة أفضل بكثير في تحقيق ما تريد فعله بدلًا من تعديل البنية الأساسية.
	</li>
</ol>
<p dir="rtl">
	إذًا الآن تعرف لم لا يجب تعديل البنية الأساسية، دعنا نر ما المتاح تعديله بأمان.
</p>

<h2 dir="rtl">
	بنية ملفات ووردبريس
</h2>

<p dir="rtl">
	هذه لقطة توضح بنية ملفات موقع ووردبريس نموذجي.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="2813" href="https://academy.hsoub.com/uploads/monthly_2015_06/edit-wordpress-core-files-1_(1).png.819959a0c7fe96a5cc356ff6f8167883.png" rel=""><img alt="edit-wordpress-core-files-1_(1).thumb.pn" class="ipsImage ipsImage_thumbnailed" data-fileid="2813" src="https://academy.hsoub.com/uploads/monthly_2015_06/edit-wordpress-core-files-1_(1).thumb.png.3838c40f5650e636941185a356256571.png"></a>
</p>

<p dir="rtl">
	سترى أن هناك ثلاث مراحل عليا من المجلدات ومجموعة من الملفات.
</p>

<p dir="rtl">
	المجلدات المسماة <span style="font-family:courier new,courier,monospace;">wp-admin</span> و<span style="font-family:courier new,courier,monospace;">wp-include</span> محظورة، يجب ألا تلمس شيئًا هناك. أما مجلد <span style="font-family:courier new,courier,monospace;">wp-content </span>فإنه يحوي القوالب، الإضافات، وأي صورة أو مستند نصي رفعتها على الموقع. ويمكنك أن تجري تعديلات على قالبك الخاص عن طريق ملف <span style="font-family:courier new,courier,monospace;">functions.php</span>.
</p>

<p dir="rtl">
	وبالنسبة لملفات المستوى الأعلى، فالملف الوحيد المسموح بالتعديل فيه هو ملف <span style="font-family:courier new,courier,monospace;">wp-config.php</span>. سنغوص في بعض الأمثلة لكيفية تعديل كلا الملفين لاحقًا، لكن دعنا نتحدث عن بعض من أفضل الممارسات قبل أن نفعل.
</p>

<h2 dir="rtl">
	أفضل الممارسات لتعديل ملفات ووردبرس
</h2>

<p dir="rtl">
	يأتي ووردبريس مع محرر قوالب وإضافات كجزء من الخواص الأساسية. يمكنك أن تجده في موقعك من الشريط الجانبي: 
</p>

<p dir="rtl" style="text-align: center;">
	<strong>المظهر &gt; المحرر</strong> أو <strong>Appearance &gt; Editor</strong>
</p>

<p dir="rtl">
	ألقِ نظرة عليه إذا أحببت، ثم بعدها انس أمره تمامًا، لأنك لن تستخدم محرر ووردبرس لأي شيء. في الحقيقة، أود أن تحذف هذه الخاصية تمامًا من ووردبرس لسببين:
</p>

<ol dir="rtl">
<li>
		هذا المحرر ليس محررًا نصّيّا برمجيًا كامل الوظائف، ويمكن بسهولة ارتكاب أخطاء تنتج عنها "شاشة الموت البيضاء".
	</li>
	<li>
		حين تضغط على زر الحفظ، ليس هناك زر للرجوع. ليس هناك إمكانية لإعادة المحاولة. معظم محررات النصوص البرمجية الجيدة تُتيح لك إمكانية التّراجع عن التغييرات التي أجريتها في حال لم تعمل كما يجب.
	</li>
</ol>
<p dir="rtl">
	إذًا، ما هو البديل؟ حسنًا، إذا أردت استخدام محرر نص برمجي، فستحتاج دراية بـ FTP .
</p>

<p dir="rtl">
	FTP هو اختصار لـ File Transfer Protocol بروتوكول نقل الملفات. ولنشرح ذلك بأنه عبارة عن نقل الملفات من جهازك إلى خادم الويب الذي يوجد عليه موقعك. ستحتاج للاتصال بموقعك عن طريق عميل FTP، ثم تحمّل نسخة من الملف الذي تريد تغييره، أجرِ التغييرات ثم ارفعه إلى الخادم، وسيحل محل النسخة القديمة في الخادم.
</p>

<p dir="rtl">
	بعض محررات النصوص البرمجية – <a href="https://panic.com/coda/" rel="external nofollow">Coda</a> على سبيل المثال– يسمح لك بتعديل الملفات مباشرة على الخادوم. والبعض الآخر يسمح باستعراض تعديلاتك (عادة لملفات <a href="https://wiki.hsoub.com/HTML" rel="external">HTML </a>وCSS فقط). إذا كان محرر النص البرمجي الخاص بك يفعل هذا، فمن المستحسن أن تحفظ نسخة من الملف الأصلي باسم جديد (وليكن filename_old.php مثلًا). بهذه الطريقة، إذا ارتكبت أي خطأً لا تستطيع الرجوع فيه، فيمكنك ببساطة حذف الملف المعدّل، وإعادة تسمية النسخة الاحتياطية التي أنشأتها إلى اسمها الأصلي وكل شيء سيكون على ما يرام.
</p>

<h2 dir="rtl">
	حان الوقت لتعديل بعض ملفات ووردبريس
</h2>

<p dir="rtl">
	سنجري بعض التعديلات البسيطة على ملفين <span style="font-family:courier new,courier,monospace;">wp-config.php</span> و<span style="font-family:courier new,courier,monospace;">functions.php </span>وهي ملفات غير تابعة للقالب، غالبًا ما ستحتاج إلى تعديلها.
</p>

<h3 dir="rtl">
	تعديل ملف wp-config.php
</h3>

<p dir="rtl">
	ملف <span style="font-family:courier new,courier,monospace;">wp-config.php</span> هو واحد من أهم الملفات في موقع ووردبريس الخاص بك. ولا يأتي مع النسخة الأساسية لووردبريس؛ إذ أنك تنصب ملفًا يُدعى <span style="font-family:courier new,courier,monospace;">wp-config-sample.php</span>. ويُنشأ ملف <span style="font-family:courier new,courier,monospace;">wp-config.php</span> أثناء عملية التنصيب (تحديدًا عند إدخال معلومات قاعدة البيانات الخاصة بموقعك)، أو يمكنك ببساطة إعادة تسمية ملف <span style="font-family:courier new,courier,monospace;">wp-config-sample</span> إلى <span style="font-family:courier new,courier,monospace;">wp-config</span> وإضافة معلومات قاعدة البيانات إلى الملف.
</p>

<p dir="rtl">
	ستجد كلّا الملفين في الجذر الأساسي لمسار الويب. إذا أتممت عملية التنصيب (لقطة لها بالأسفل)، بما في ذلك إعدادات قاعدة البيانات الخاصة بالموقع، فإنك بالفعل قد أنشأت ملف <span style="font-family:courier new,courier,monospace;">wp-config.php</span>. الآن، دعنا نفتحه في محرر النص البرمجي المفضل لديك لنجري بعض التغييرات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="2814" href="https://academy.hsoub.com/uploads/monthly_2015_06/edit-wordpress-core-files-3-1024x769_(1).png.54cf2c708e20f660389603185857b532.png" rel=""><img alt="edit-wordpress-core-files-3-1024x769_(1)" class="ipsImage ipsImage_thumbnailed" data-fileid="2814" src="https://academy.hsoub.com/uploads/monthly_2015_06/edit-wordpress-core-files-3-1024x769_(1).thumb.png.c92154a5c0241c236f8b40b3128fff9a.png"></a>
</p>

<h3 dir="rtl">
	مثال نص برمجي مفيد: تعطيل التحديثات التلقائية
</h3>

<p dir="rtl">
	كانت التحديثات التلقائية جزءًا من ووردبريس منذ الإصدارة رقم 3.7. ولا يفضل الجميع هذه الخاصية، إذ يودون لو أنهم يغلقونها. كل ما تحتاجه لفعل هذا هو إضافة ذلك السطر إلى ملف <span style="font-family:courier new,courier,monospace;">wp-config.php</span> الخاص بموقعك.
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style="">
<span class="com">/* تعطيل تحديثات ووردبرس الة */</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_AUTO_UPDATE_CORE'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span></pre>

<p dir="rtl">
	عندما أضيف نصًا برمجيًا إلى ملف <span style="font-family:courier new,courier,monospace;">wp-config</span>، فإنني أتأكد دومًا من وضعه في مكان يسهل الرجوع إليه عند الحاجة. انظر إلى السطر 85 في ملف <span style="font-family:courier new,courier,monospace;">wp-config.php</span> (من السهل الوصول إليه باستخدام محرر النص البرمجي)، ستجد هذه الجملة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style="">
<span class="com">/* That's all, stop editing! Happy blogging. */</span></pre>

<p dir="rtl">
	بمعنى:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style="">
<span class="com">/* هذا هو المطلوب! توقف عن التعديل. نتمنى لك التوفيق في موقعك! */</span></pre>

<p dir="rtl">
	إنني أضع جميع تعديلاتي قبل ذلك السطر مباشرة. وبهذا أستطيع العثور على جميع التعديلات التي أجريتها في مكان ثابت مع كل موقع أعمل عليه. فقط تأكد من حفظ نسخة احتياطية من الملف قبل أية تعديلات.
</p>

<h3 dir="rtl">
	تعديل ملف functions.php
</h3>

<p dir="rtl">
	ملف <span style="font-family:courier new,courier,monospace;">functions.php </span>يسمح لك بتعديل وظائف ووردبريس. إذ يعمل هذا الملف كإضافة، فينشء خصائص ومزايا جديدة في موقع ووردبريس الخاص بك.
</p>

<p dir="rtl">
	وعادة ما تجد الملف موجودًا في مجلد القالب الخاص بك في المسار <span style="font-family:courier new,courier,monospace;">/wp-content/themes/yourthemename/ </span>(حيث yourthemename هو اسم القالب). إذا لم تمتلك واحدًا، يمكنك بسهولة إنشاءه؛ فقط تأكد من أنك تضعه في القالب المٌفعّل.
</p>

<p dir="rtl">
	إذا بدأت بملف جديد، فستحتاج لبداية نص PHP مستخدمًا<span style="font-family:courier new,courier,monospace;"> php?&gt;</span>. وعلى عكس ملف php التقليدي، فإنك لن تحتاج لإغلاق النص البرمجي (في الواقع، تقل احتمالية الأخطاء إذا تركته مفتوحًا).
</p>

<p dir="rtl">
	وستجد بالأسفل مثالين للخصائص التي يمكنك إضافتها إلى ملف <span style="font-family:courier new,courier,monospace;">functions.php</span> خاصتك ملحقة بالنص البرمجي، لا تنس أنه من المستحب إضافة التعديلات الكبيرة عن طريق قالب فرعي.
</p>

<h3 dir="rtl">
	مثال نص برمجي مفيد: إضافة دعم المُصغّرات thumbnails
</h3>

<p dir="rtl">
	إذا كان قالبك لا يدعم المُصغّرات، فيمكنك إضافة النص البرمجي التالي إلى ملف <span style="font-family:courier new,courier,monospace;">functions.php</span> الخاص بك:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style="">
<span class="pln">add_theme_support</span><span class="pun">(</span><span class="pln"> </span><span class="str">'post-thumbnails'</span><span class="pun">);</span></pre>

<p dir="rtl">
	لاستخدامه في قالبك، فقط أضف هذا السطر من الكود إلى الحلقة loop حيث تريد للمُصغرات أن تظهر:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style="">
<span class="pun">&lt;?</span><span class="pln">php the_post_thumbnail</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<h3 dir="rtl">
	مثال نص برمجي مفيد: تخصيص طول الاقتباسات
</h3>

<p dir="rtl">
	الطول الافتراضي للاقتباسات في ووردبريس هو 55 كلمة، ولكن يمكنك تعيين طول الاقتباس حسبما تريد عن طريق إضافة ذلك النص البرمجي إلى ملف <span style="font-family:courier new,courier,monospace;">functions.php</span> الخاص بك:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style="">
<span class="com">//وظيفة تخصيص طول المقتبس</span><span class="pln">
custom_excerpt_length</span><span class="pun">(</span><span class="pln">$length</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">20</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

add_filter</span><span class="pun">(</span><span class="str">'excerpt_length'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'custom_excerpt_length'</span><span class="pun">);</span></pre>

<p dir="rtl">
	فقط كل ما تحتاجه تغيير رقم "20” إلى عدد الكلمات التي تريدها.
</p>

<h2 dir="rtl">
	الخاتمة
</h2>

<p dir="rtl">
	والآن قد أصبحت تعرف القواعد الأساسية بخصوص تعديل ملفات البنية الأساسية لووردبريس. أتمنى أن تكون قد استمتعت بالمقال. وبالطبع نود معرفة آرائكم ونسر بالإجابة على ما يلتبس عليكم في التعليقات.
</p>

<p dir="rtl">
	مُترجم بتصرف من مقالة <a href="https://managewp.com/edit-wordpress-website" rel="external nofollow">How to Edit Your WordPress Website Without Hacking Core Files</a> لصاحبها Tom Ewer.
</p>
]]></description><guid isPermaLink="false">103</guid><pubDate>Mon, 22 Jun 2015 12:11:00 +0000</pubDate></item><item><title>&#x645;&#x62B;&#x627;&#x644; &#x639;&#x645;&#x644;&#x64A; &#x644;&#x628;&#x631;&#x645;&#x62C;&#x629; &#x625;&#x636;&#x627;&#x641;&#x629; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;- &#x627;&#x644;&#x62C;&#x632;&#x621; &#x627;&#x644;&#x623;&#x648;&#x651;&#x644;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%85%D8%AB%D8%A7%D9%84-%D8%B9%D9%85%D9%84%D9%8A-%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%A3%D9%88%D9%91%D9%84-r102/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-plugins.png.93e1557d99c53d578364b5b1f8756463.png" /></p>

<meta charset="utf-8"><title></title><style type="text/css"></style><p id="-">بعد أن تطرّقنا إلى <a href="https://academy.hsoub.com/search/?tags=%D9%85%D8%AF%D8%AE%D9%84%20%D8%A5%D9%84%D9%89%20%D8%A8%D8%B1%D9%85%D8%AC%D8%A9%20%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA%20%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3">أساسيات تطوير إضافات ووردبريس</a> حان الوقت لنقوم بإنشاء إضافة لتطبيق بعض ما تعلمناه. وهذا ما سنقوم به في هذا الدرس والدرس الذي يليه من خلال إنشاء إضافة تقوم بإضافة مربع جانبي لعرض المقالات الأكثر مشاهدة في موقع ووردبريس مع إمكانية عرض عدد المشاهدات في كل مقالة.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-plugins.png.73ee809908a44071fbd039a63a3d1fa2.png"><img data-fileid="2819" class="ipsImage ipsImage_thumbnailed" alt="wordpress-plugins.thumb.png.7696d3ebb5fc" src="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-plugins.thumb.png.7696d3ebb5fc032aa03d5f5b694d892f.png"></a></p><h2 id="-">التخطيط للإضافة</h2><p>لنبدأ بتحديد الأمور التي ستقوم بها الإضافة:</p><ul><li>إحصاء عدد المشاهدات لكل مقال.</li><li>توفير شيفرة مختصرة Shortcode لعرض عدد مشاهدات المقال في أي مكان.</li><li>توفير ودجت Widget لعرض المقالات الأكثر مشاهدة.</li></ul><p>وذلك من خلال:</p><ul><li>الاستفادة من البيانات الإضافية للمقال Post Meta لإضافة حقل بيانات جديد للمقالات يستخدم في حفظ واسترجاع عدد المشاهدات.</li><li>الاستفادة من <a rel="external nofollow" href="https://codex.wordpress.org/Shortcode_API">Shortcode <abbr title="واجهة برمجية | Application Programming Interface">API</abbr></a> التي يوفرها ووردبريس لإنشاء الشيفرة المختصرة.</li><li>الاستفادة من <a rel="external nofollow" href="https://codex.wordpress.org/Widgets_API">Widget <abbr title="واجهة برمجية | Application Programming Interface">API</abbr></a> التي يوفرها ووردبريس لإنشاء الودجت واستخدام صنف WP_Query للحصول على المقالات مرتبة على حسب عدد المشاهدات.</li></ul><h2>برمجة الإضافة</h2><p>دعنا في البداية نقوم بالتخطيط لجميع الملفات والمجلدات التي سنقوم بإنشائها لبرمجة الإضافة.</p><h3 id="-">تركيبة الملفات والمجلدات</h3><p>لنبدأ أولا بإنشاء مجلد للإضافة يحمل الإسم: <span style="font-family:courier new,courier,monospace;">ha-views-widget</span> وأظن أنه اختصار جيد لاسم الإضافة واستخدامنا في البداية الحرفين <span style="font-family:courier new,courier,monospace;">ha</span> كاختصار ل <strong><span style="font-family:arial,helvetica,sans-serif;">Hsoub Academy</span></strong> :). وبالطبع سنضع هذا المجلد في مجلد إضافات ووردبريس (ونحن نفترض أنك قمت بتنصيب ووردبريس مسبقا) والموجود في المسار <span style="font-family:courier new,courier,monospace;">wp-content/plugins</span>. بعد ذلك سنقوم بإنشاء ملف php بنفس اسم المجلد وهو <span style="font-family:courier new,courier,monospace;">ha-views-widget.php</span> وهذا الملف هو الملف الأساسي للإضافة وسيحتوي على الترويسة التي بها معلومات الإضافة والتي تعرفنا عليه <a href="https://academy.hsoub.com/code/php/wordpress/%D9%85%D9%8F%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-wordpress-r38/">في الدرس الأول من هذه السلسلة</a> وبالتالي سيحتوي على هذه الترويسة:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">/**
 * Plugin Name: Hsoub Views Widget
 * Plugin URI: http://academy.hsoub.com/
 * Description: إضافة صغيرة تقوم بإضافة مربع جانبي لعرض المقالات الأكثر مشاهدة في موقع ووردبريس مع إمكانية عرض عدد المشاهدات في كل مقالة.
 * Version: 1.4.0
 * Author: Adil Elsaeed
 * Author URI: http://adilelsaeed.com
 * Text Domain: ha-widgets
 * Domain Path: /lang/
 * License: GPL2
 */</pre><p>بالطبع يمكننا أن نكتب جميع شيفرات php الخاصة بالإضافة في هذا المجلد لكن هذه ليست فكرة جيدة خصوصا إذا أردنا إنشاء إضافة سهلة التطوير والمراجعة، لذلك سنخصص ملفًا لإنشاء ومتابعة عدد المشاهدات وليكن باسم <span style="font-family:courier new,courier,monospace;">views.php</span> وملف آخر لإنشاء الودجت وليكن باسم <span style="font-family:courier new,courier,monospace;">widget.php</span> (لاحظ أنه داخل مجلد الإضافة يمكنك تسمية الملفات بأي اسم بدون خوف من التعارض مع ملفات ووردبريس الأخرى)، كما أننا سنحتاج لملف آخر لإنشاء الشيفرة المختصرة وليكن باسم <span style="font-family:courier new,courier,monospace;">shortcode.php </span>ويمكننا أن نضع هذه الملفات الثلاثة داخل مجلد باسم <span style="font-family:courier new,courier,monospace;">includes</span> للمحافظة على المجلد الرئيسي للإضافة مرتبًا. </p><p>وبالطبع ما دمنا سنكتب بعض شيفرات html فإننا سنحتاج لتنسيقها من خلال CSS وهذا يعني أننا نحتاج لملف لوضع شيفرات CSS هذه، لذلك سنقوم بإنشاء مجلد أخر باسم css وبداخله ملف <span style="font-family:courier new,courier,monospace;">widget.css</span>. هذه كل الملفات والمجلدات التي سنحتاج إليها في هذه النسخة الأولى من الإضافة.</p><h3 id="-">الملف الأساسي للإضافة</h3><p>في الملف الأساسي للإضافة سنقوم أولا بتعريف بعض الثوابت التي سنحتاج إليها لاحقا، حيث سنحتفظ بكل من مسار الإضافة ورابطها URL وكذلك النسخة الحالية للإضافة كثوابت بالصورة التالية:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">if ( !defined( 'SDG_PLUGIN_DIR' ) ) {
    define( 'HA_VIEWS_DIR', plugin_dir_path( __FILE__ ) );
}

if ( !defined( 'HA_VIEWS_URL' ) ) {
    define( 'SDG_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
}

if ( !defined( 'HA_VIEWS_VER' ) ) {
    define( 'SDG_PLUGIN_VER', '1.1.0' );
}</pre><p>لاحظ أننا استخدمنا الدالتين <span style="font-family:courier new,courier,monospace;">plugin_dir_path</span> و<span style="font-family:courier new,courier,monospace;"> plugin_dir_url</span> اللتين يوفرهما ووردبريس حيث تُرجعان مسار الإضافة ورابطها على التوالي. ثانيا سنقوم بتضمين ملفات php التي أنشأناها سابقا حتى ينفذ ووردبريس الشفرات الموجودة فيها ويتم تضمينها من خلال require_once كالآتي:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">// الملف المسؤول عن عدد المشاهدات
require_once HA_VIEWS_DIR . 'includes/views.php';

// الملف المسؤول عن الويدجت
require_once HA_VIEWS_DIR . 'includes/widget.php';

// الملف المسؤول عن الكود المختصر
require_once HA_VIEWS_DIR . 'includes/shortcode.php';</pre><p>ثالثا وأخيرًا سنقوم بصف ملف الCSS الخاص بتنسيق الويدجت من خلال استخدام الحدث <span style="font-family:courier new,courier,monospace;">wp_enqueue_scripts</span> ويمكنك معرفة المزيد حول التعامل مع ملفات CSS في ووردبريس بالإطلاع على مقال <a href="https://academy.hsoub.com/code/php/wordpress/%D8%B5%D9%81%D9%91-%D9%88%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D9%85%D9%84%D9%81%D8%A7%D8%AA-javascript-%D9%88-css-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r79/">صف و تسجيل ملفات CSS في ووردبريس</a>. وهذه هي الطريقة التي سنصف بها ملف <span style="font-family:courier new,courier,monospace;">widget.css</span>:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">add_action('wp_enqueue_scripts', 'ha_scripts');
function ha_scripts(){
        wp_enqueue_script( 'sdg-admin',  HA_VIEWS_URL . 'css/widget.css', array(), HA_VIEWS_VER);
}</pre><h3 id="-">حفظ وتحديث عدد المشاهدات</h3><p>لننتقل الآن إلى ملف <span style="font-family:courier new,courier,monospace;">views.php</span> حيث سنقوم بإضافة عداد المشاهدات لكل مقال من خلال بيانات الميتا الخاصة بالمقال post meta حيث سنقوم بإنشاء الدالة <span style="font-family:courier new,courier,monospace;">ha_set_post_views</span> والتي تقوم بتحديث عدد المشاهدات للمقال عند زيارته ولنضمن تنفيذها عند كل مقال سنقوم بإضافتها للحدث <span style="font-family:courier new,courier,monospace;">wp_head</span> والذي يتم تنفيذه في ترويسة Header كل صفحات الموقع. ويتم إضافة الدالة إلى هذا الحدث بالصورة التالية:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">add_action('wp_head', 'ha_set_post_views');</pre><p>أما بالنسبة للدالة نفسها فهذه هي صورتها:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">function ha_set_post_views() {
    // إذا لم يكن هذا مقال مفرد (صفحة أو مقال) لا تنفذ أي شيء
    if(!is_singular()){
        return;
    }
    // الوصول إلى بيانات المقال الحالي
    global $post;
    $post_id = $post-&gt;ID;
    $count_key = 'ha_post_views_count';
    // استرجاع العدد الحالي للمشاهدات
    $count = get_post_meta($post_id, $count_key, true);
    if($count==''){ // هذا يعني أنه لم يتم إنشاء الميتا الخاص بحفظ عدد المشاهدات حتى الان
    $count = 0;
    delete_post_meta($post_id, $count_key);
    add_post_meta($post_id, $count_key, '0'); // إنشاء الميتا الخاص بحفظ عدد المشاهدات
    }else{ 
        // زيادة عدد المشاهدات بمقدار مشاهدة واحدة
    $count++;
    // حفظ الميتا التي حفظنا فيه عدد المشاهدات
    update_post_meta($post_id, $count_key, $count);
    }
}</pre><p>لعل التعليقات تشرح الدالة بصورة واضحة لكن دعنا نوضح الأمور أكثر، قمنا في هذه الدالة أولا باستخدام الدالة <span style="font-family:courier new,courier,monospace;">is_singular</span> والتي تتحقق إن كان المعروض حاليا صفحة مقال مفرد (مقال، صفحة، مقال مخصص) أم لا (صفحة تصنيف مثلا أو أرشيف أو غيرهما) وفي حالة لم يكن المقال مفردًا يتوقف تنفيذ الدالة لأن مهمتها تحديث عدد المشاهدات للمقالات والصفحات والمقالات المخصصة فقط وليس بقية صفحات الموقع (الأرشيفات أو التصنيفات أو غيرها). ثانيا قمنا باستخدام المتغير العام (global) الذي يوفره ووردبريس وهو <span style="font-family:courier new,courier,monospace;">post$</span> والذي يحفظ فيه بيانات المقال الحالي (الذي يتم عرضه) حتى نحصل على معرف المقال الحالي من أجل استخدامه في تحديث عدد مشاهداته. ثالثا قمنا باستخدام الدوال update_post_meta، get_post_meta، add_post_meta و delete_post_meta والتي تمكننا من إضافة ميتا مخصصة للمقال واسترجاعها وحذفها وتحديثها على التوالي. وكما تلاحظ قمنا بالتأكد من أن عدد المشاهدات لا يساوي قيمة خالية (غير موجود) وفي حالة أنه غير موجود يتم إنشاؤه وفي حالة أنه موجود يتم زيادته بمقدار واحد وهذه كل مهمة الدالة.</p><h3 id="-">استرجاع عدد المشاهدات</h3><p>في هذا الملف أيضا (أعني ملف <span style="font-family:courier new,courier,monospace;">view.php</span>) سنقوم بإنشاء دالة أخرى تقوم باسترجاع عدد المشاهدات للمقال الحالي حتى نستخدمها لاحقا في الشيفرة المختصرة shortcode، وهذه هي الدالة:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">function ha_get_post_views(){
    // الوصول إلى بيانات المقال الحالي
    global $post;
    $post_id = $post-&gt;ID;
    $count_key = 'ha_post_views_count';
    $count = get_post_meta($post_id, $count_key, true);
    if($count==''){
    delete_post_meta($post_id, $count_key);
    add_post_meta($post_id, $count_key, '0');
    return "0 مشاهدة";
    }
    return $count.' مشاهدة';
}</pre><p>ليس هنالك الكثير مما يحتاج إلى شرح فقط قمنا باستخدام الدالة <span style="font-family:courier new,courier,monospace;">get_post_meta</span> لاسترجاع قيمة الميتا <span style="font-family:courier new,courier,monospace;">ha_post_views_count</span> وإعادتها في حالة كانت القيمة غير خالية وإعادة صفر في حالة كانت القيمة خالية وفي هذه الحالة تقوم أيضا بإضافة الميتا.</p><h3 id="-shortcode">برمجة الشيفرة المختصرة shortcode</h3><p>في هذه الجزئية سنعتمد على الواجهة البرمجية التي يوفرها ووردبريس حيث سنستخدم الدالة <span style="font-family:courier new,courier,monospace;">add_shortcode</span> والتي لها الصورة التالية:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php add_shortcode( $tag , $func ); ?&gt;</pre><p>حيث: <span style="font-family:courier new,courier,monospace;">tag$</span> هو اسم الشيفرة المختصرة التي سيستخدمها المستخدم في حالتنا هذه سنسميها<span style="font-family:courier new,courier,monospace;"> ha_views</span> وسيقوم المستخدم بإستدعائها بالصورة التالية <span style="font-family:courier new,courier,monospace;">[ha_views] </span>في المقال أو الصفحة. <span style="font-family:courier new,courier,monospace;">func<span style="line-height: 22.3999996185303px;">$</span></span> هي الدالة المسؤولة عن إرجاع محتويات الشيفرة المختصرة أي ما تقوم به الشيفرة المختصرة وفي حالتنا هذه الدالة عبارة عن دالة ترجع عدد المشاهدات للمقال الحالي وهذه هي الشيفرة النهائية في ملف <span style="font-family:courier new,courier,monospace;">shortcode.php</span></p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">function ha_views_shortcode( $atts ){
    return ha_get_post_views();
}
add_shortcode( 'ha_views', 'ha_views_shortcode' );</pre><p>لاحظ أن الدالة <span style="font-family:courier new,courier,monospace;">ha_views_shortcode</span> تقوم فقط بإرجاع القيمة المرجعة من الدالة <span style="font-family:courier new,courier,monospace;">ha_get_post_views</span> والتي عرفناها مسبقا في ملف <span style="font-family:courier new,courier,monospace;">views.php</span> والتي بدورها ترجع عدد المشاهدات للمقال الحالي. ولن نتطرق إلى شرح المزيد من التفاصيل حول الدالة <span style="font-family:courier new,courier,monospace;">add_shortcode</span> تجنبا للإطالة وربما نخصص لها مقالا مفردا بعد نهاية هذه السلسلة إن شاء الله.</p><p>سنكتفي بهذا القدر في هذا الدرس وفي الدرس الأخير من هذه السلسة سنكمل –إن شاء الله- برمجة الإضافة (حيث تبقى فقط برمجة الويدجت الذي يعرض أكثر المقالات مشاهدة)، كما سنلقي بعض الضوء على مجموعة من الأدوات والمواقع المفيدة لمطوري إضافات ووردبريس.</p>
]]></description><guid isPermaLink="false">102</guid><pubDate>Mon, 22 Jun 2015 11:57:00 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x623;&#x646;&#x648;&#x627;&#x639; &#x627;&#x644;&#x62A;&#x635;&#x646;&#x64A;&#x641;&#x627;&#x62A; Taxonomies &#x648;&#x627;&#x644;&#x62D;&#x642;&#x648;&#x644; Fields &#x641;&#x64A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%AA%D8%B5%D9%86%D9%8A%D9%81%D8%A7%D8%AA-taxonomies-%D9%88%D8%A7%D9%84%D8%AD%D9%82%D9%88%D9%84-fields-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r101/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/wp-taxonomies_(1).png.2fdc682ddbacf8d4cbfb3a61d6dd78de.png" /></p>

<p id="-taxonomies-fields">
	تعرّفنا في الدرس الأول -من سلسلة الدروس هذه المُكوّنة من درسين- على <a href="https://academy.hsoub.com/code/php/wordpress/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D9%86%D8%B4%D9%88%D8%B1%D8%A7%D8%AA-%D9%85%D9%8F%D8%AE%D8%B5%D9%91%D8%B5%D8%A9-custom-post-types-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r100/" rel="">الأنواع الثّلاثة للمحتوى المُخصّص Custom Content</a> التي نستطيع إنشاءها باستخدام ووردبريس وتحدّثنا عن فائدة كلّ واحدٍ منها.
</p>

<p>
	هذه الأنواع هي:
</p>

<ul>
<li>
		المنشورات المُخصّصة Custom posts.
	</li>
	<li>
		أنواع التّصنيفات المُخصّصة Custom taxonomies.
	</li>
	<li>
		الحقول المُخصّصة Custom fields.
	</li>
</ul>
<p>
	نظرنا بالتفصيل في ذلك الدّرس إلى أنواع المنشورات المُخصّصة custom post types موضّحين كيفيّة إنشائها وعرضها على موقعنا.<br>
	سننتقل في الدرس الثاني والأخير من هذه السلسلة إلى أنواع التّصنيفات المُخصّصة Custom taxonomies والحقول المُخصّصة Custom fields، لنتعلّم كيفية إنشائها سواءً باستخدام إضافة plugin أو عبر برمجتها بأنفسنا، وكيفيّة عرضها على واجهة موقعنا، فلنبدأ بأنواع التّصنيفات المُخصّصة.
</p>

<p style="text-align: center;">
	 
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/wp-taxonomies_(1).png.4b395122d6ae5c8c31d22054927317a7.png" data-fileid="2811" rel=""><img alt="wp-taxonomies_(1).thumb.png.cce2fe2b7e62" class="ipsImage ipsImage_thumbnailed" data-fileid="2811" src="https://academy.hsoub.com/uploads/monthly_2015_06/wp-taxonomies_(1).thumb.png.cce2fe2b7e62c91321dff0046d0e5ea0.png"></a>
</p>

<h2 id="-taxonomy-">
	إنشاء Taxonomy مُخصّص
</h2>

<p>
	كما وجدنا مع أنواع المنشورات المُخصّصة بإمكانك أن تستخدم إضافة لإنشاء Custom Taxonomy أو تقوم ببرمجتها بنفسك في قالبك Theme أو حتى بشكلٍ أفضل أن تجعلها على شكل إضافة، إنّ الإضافات التي تستطيع استخدامها لفعل هذا هي نفسها التي استخدمناها لأنواع المنشورات المُخصّصة:
</p>

<ul>
<li>
		تزوّدك <a href="https://premium.wpmudev.org/project/custompress/" rel="external nofollow">CustomPress</a> بواجهة لإنشاء أنواع المنشورات المُخصّصة، التّصنيفات والحقول المُخصّصة وهي سهلة الاستخدام كثيرًا، إن كنت تريد إنشاء العديد من أنواع المحتوى المُخصّص ستوفر عليك هذه الإضافة عناء تثبيت أكثر من إضافة.
	</li>
	<li>
		إنّ إضافة <a href="https://wordpress.org/plugins/custom-post-type-ui/" rel="external nofollow">Custom Post Type UI</a> هي أكثر الإضافات المجانيّة انتشارًا لإضافة أنواع المنشورات المُخصّصة على مستودع الإضافات، فهي تسمح لك بإضافة أنواع المنشورات المُخصّصة وأنواع التّصنيفات ولكن لا تسمح بإنشاء الحقول المُخصّصة، واجهتها ليست سهلة الاستخدام تمامًا مثل واجهة CustomPress، مع المزيد من المصطلحات التقنيّة لكي تتمكّن من فهمها، ولكنّها تقوم بعملها. ولكن إن كنتَ واثقًا من نفسك بما فيه الكفاية لكي تُبرمج Custom taxonomies بنفسك ، فها هي طريقة فعل ذلك.
	</li>
</ul>
<h3 id="1-custom-taxonomy">
	1. برمجة Custom taxonomy
</h3>

<p>
	لا تختلف برمجة Custom taxonomy كثيرًا عن برمجة أنواع جديدة من المنشورات المُخصّصة، حيث تعطينا ووردبريس الدالّة<span style="font-family:courier new,courier,monospace;"> ()register_taxonomy</span> لعمل هذا والتي نقوم أيضًا بإرفاقها إلى خطّاف<span style="font-family:courier new,courier,monospace;"> init</span> .
</p>

<p>
	تستطيع إمّا إضافة الشّيفرة إلى ملف دالّات قالبك Theme’s Functions file أو إنشاء إضافة منفصلة، من الأفضل إنشاء إضافة لأنّك لو قمت بتغيير قالبك مستقبلًا فلن تخسر نوع تصنيفاتك Taxonomy، وهذا ما سنقوم به هنا. ابدأ بإنشاء ملف فارغ يُدعى <span style="font-family:courier new,courier,monospace;">taxonomies.php </span>واحفظه إلى مجلّد <span style="font-family:courier new,courier,monospace;">plugins</span> الموجود داخل مجلّد<span style="font-family:courier new,courier,monospace;"> wp-content</span>.<br>
	افتح الآن ملفك باستخدام مُحرّر شيفرة Code Editor وأضف إليه ما يلي:
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
&lt;?php
/*Plugin Name: Create Product Category Taxonomy
Description: This plugin registers the 'product category' taxonomy and applies it to the 'product' post type.
Version: 1.0
License: GPLv2
*/
?&gt;</pre>

<p>
	تُخبر هذه الشّيفرة ووردبريس باسم إضافتك وتزوّده بوصف description والذي ستراه عندما تقوم بتفعيل إضافتك لاحقًا.<br>
	الآن أضف ما يلي تحت السطر الذي يحتوي على */ وفوق السطر الذي يحتوي على ?&gt; :
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
function wpmudev_register_taxonomy() {

}
add_action( 'init', 'wpmudev_register_taxonomy' );</pre>

<p>
	سيقوم هذا بإنشاء دالّة فارغة والتي ستحتوي على شيفرة من أجل نوع تصنيفاتك، ومن ثمّ تُضيفه إلى خطّاف <span style="font-family:courier new,courier,monospace;">init</span>، إنّ إضافته إلى الخطّاف يجعلك متأكّدًا من أنّ ووردبريس يقوم بتشغيل دالّتك في الوقت المناسب، وبدونه لن يحدث شيء. أضف الآن ما يلي داخل الحاضنتين:
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
    // set up labels
$labels = array(
'name' =&gt; 'Product Categories',
'singular_name' =&gt; 'Product Category',
'search_items' =&gt; 'Search Product Categories',
'all_items' =&gt; 'All Product Categories',
'edit_item' =&gt; 'Edit Product Category',
'update_item' =&gt; 'Update Product Category',
'add_new_item' =&gt; 'Add New Product Category',
'new_item_name' =&gt; 'New Product Category',
'menu_name' =&gt; 'Product Categories'
);
// register taxonomy
register_taxonomy( 'productcat', 'product', array(
'hierarchical' =&gt; true,
'labels' =&gt; $labels,
'query_var' =&gt; true,
'show_admin_column' =&gt; true
) );</pre>

<p>
	فلنقم بالمرور بالتّفصيل على هذه الشيفرة لنفهم ما تعمله بشكلٍ أفضل.<br>
	نقوم في البداية بإنشاء مجموعة من labels لـِ Taxonomy الخاصة بك والذي سيتمّ استخدامه في شاشات لوحة التّحكم، على الروابط، الأزرار وعناوين الصّفحات. نستخدم بعد ذلك الدّالّة <span style="font-family:courier new,courier,monospace;">()register_taxonomy</span> لتسجيل نوع تصنيفاتك عن طريق هذه المُعاملات <span style="font-family:courier new,courier,monospace;">parameters</span>:
</p>

<ul>
<li>
		اسم نوع التّصنيفات، productcat، تحتاجه لكي يعمل نوع تصنيفاتك.
	</li>
	<li>
		نوع المنشورات الذي ستُطبِّق عليه نوع تصنيفاتك، قمنا هنا بتحديده كمنتج product ولكن بإمكانك استخدام نوع تصنيفاتك مع أكثر من نوع منشورات (بما فيها أنواع المنشورات المُضَمّنة مثل المنشورات posts والصفحات pages والمرفقات attachments) بتضمينها كلّها في مصفوفة array.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">Hierarchical:</span></strong> قم بتعيينه إلى true لكي يسلك نوع تصنيفاتك سلوك تصنيفات categories ويكون بشكلٍ شجري hierarchical، إن لم ترغب أن يكون بشكل شجريًا مثل الوسوم tags فقم بتعيينه إلى false.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">Labels:</span></strong> تُخبر هنا ووردبريس أن يستخدم الـ Labels المُعرّفة مُسبقًا.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">query_var:</span></strong> يعطيك تعيينه إلى true مرونة أكثر إن كنت ترغب بكتابة استعلام مُخصّص <a href="https://premium.wpmudev.org/blog/creating-custom-queries-wordpress/" rel="external nofollow">custom query</a> لإيجاد المنتجات التي توافق شرط taxonomy term معيّن.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">show_admin_column</span></strong>: يعني تعيينه إلى true أنّك تعرض قائمة من منتجاتك في لوحة تحكم ووردبريس، سيملك نوع التّصنيفات عمودًا من أجلك لكي تعرف أيّة شروط taxonomy تنطبق على أيّة منتجات، سنرى كيف يبدو هذا قريبًا.
	</li>
</ul>
<p>
	الآن احفظ ملفك ، ستبدو كامل الإضافة كما يلي:
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
&lt;?php
/*Plugin Name: Create Product Category Taxonomy
Description: This plugin registers the 'product category' taxonomy and applies it to the 'product' post type.
Version: 1.0
License: GPLv2
*/

// register two taxonomies to go with the post type
function wpmudev_register_taxonomy() {
// set up labels
$labels = array(
'name' =&gt; 'Product Categories',
'singular_name' =&gt; 'Product Category',
'search_items' =&gt; 'Search Product Categories',
'all_items' =&gt; 'All Product Categories',
'edit_item' =&gt; 'Edit Product Category',
'update_item' =&gt; 'Update Product Category',
'add_new_item' =&gt; 'Add New Product Category',
'new_item_name' =&gt; 'New Product Category',
'menu_name' =&gt; 'Product Categories'
);
// register taxonomy
register_taxonomy( 'productcat', 'product', array(
'hierarchical' =&gt; true,
'labels' =&gt; $labels,
'query_var' =&gt; true,
'show_admin_column' =&gt; true
) );
}
add_action( 'init', 'wpmudev_register_taxonomy' );
?&gt;</pre>

<p>
	الآن وقد اكتملت إضافتك تحتاج لتفعيلها، في لوحة تحكّم ووردبريس اذهب إلى: <strong><span style="font-family:courier new,courier,monospace;">Plugins -&gt; Installed Plugins</span></strong> لترى إضافتك معروضة:
</p>

<p style="text-align: center;">
	<img alt="activate-taxonomy-plugin-700x106.png" src="https://academy.hsoub.com/uploads/imageproxy/activate-taxonomy-plugin-700x106.png.b089f12079dc48ed5d7b2383abd9a1e5.png"></p>

<p>
	اضغط على رابط التّفعيل Activate لكي تقوم بتفعيل إضافتك، سترى الآن أنّه عندما تضغط على المنتجات Products في قائمة لوحة التّحكّم سيتمّ عرض النّوع الجّديد للتّصنيف:
</p>

<p style="text-align: center;">
	<img alt="product-categories-in-admin-menu.png" src="https://academy.hsoub.com/uploads/imageproxy/product-categories-in-admin-menu.png.b550076197c6c191a3e4bb167c0f61a2.png"></p>

<p>
	كلّ ما تحتاج إليه الآن أن تضيف بعضًا من تصنيفات المنتجات بنفس الطريقة التي تضيف بها التّصنيفات العاديّة، سيكون بعدها بإمكانك اختيار تصنيف أو أكثر منها في كلّ مرّة تُضيف بها منتجًا.<br><strong>ملاحظة:</strong> إنّ نوع تصنيفاتك الجّديد هو ليس تصنيفًا category، بل هو taxonomy كما التّصنيف هو تصنيف، لكي تستخدمه يجب عليك إضافة شروط terms، شروط نوع تصنيفاتك (على سبيل المثال تصنيفات المنتجات التي تضيفها) مشابهة للتصنيفات ذاتها والتي هي عبارة عن شروط في تصنيف taxonomy.
</p>

<h2 id="-taxonomy-">
	عرض أرشيف شروط taxonomy على موقعك
</h2>

<p>
	بعد أن أضفت بعض الشروط إلى نوع تصنيفاتك ستحتاج لعرض قائمة من المنتجات لكلّ شرط على موقعك.
</p>

<h3 id="1-permalinks">
	1. تحديث الروابط الدائمة Permalinks
</h3>

<p>
	لن يعرض ووردبريس أرشيف لشروط نوع تصنيفاتك حتى تقوم بتحديث إعدادات الروابط الدائمة.
</p>

<ol>
<li>
		من لوحة تحكّم ووردبريس اذهب إلى: <strong><span style="font-family:courier new,courier,monospace;">Settings &gt; Permalinks</span></strong>.
	</li>
	<li>
		تأكد من أنّه تم اختيار post name.
	</li>
	<li>
		اضغط على زر حفظ التغييرات Save Changes.
	</li>
</ol>
<p>
	سيكون ووردبريس الآن قادرًا على توليد الروابط الصحيحة لشروط نوع تصنيفاتك. <strong>ملاحظة:</strong> تحتاج فقط لعمل هذا مرّة واحدة بعد إنشاء taxonomy وليس كل مرّة تضيف فيها شرطًا جديدًا.
</p>

<h3 id="2-taxonomy-navigation-menu">
	2. إضافة أرشيف شرط taxonomy إلى قائمة التصفح Navigation Menu
</h3>

<p>
	إنّ إضافة صفحات أرشيف نوع تصنيفاتك إلى قائمة التصفح أسهل من إضافة أرشيف نوع المنشورات (كما فعلنا في الدرس السابق من هذه السلسلة) ، اتبع هذه الخطوات:
</p>

<ol>
<li>
		من لوحة تحكم ووردبريس اذهب إلى: <strong><span style="font-family:courier new,courier,monospace;">Appearance &gt; Menus</span></strong>.
	</li>
	<li>
		سترى على يسار الشاشة قائمة أنواع المحتوى التي تستطيع إضافتها إلى قائمتك، ومنها تصنيفات المنتجات Product Categories (إن لم تكن ظاهرة اضغط على نافذة خيارات الشّاشة Screen Options الموجودة بأعلى وأيمن الشاشة ثم ضع صح في خانة التأشير Checkbox عند Product Categories).
	</li>
	<li>
		اضغط على Product Categories لكي تكشف كل الشروط التي أضفتها.
	</li>
	<li>
		أضف كلّ واحد منها إلى القائمة واسحبها إلى المكان الذي تريده.
	</li>
	<li>
		اضغط على حفظ القائمة Save Menu لحفظ التّغييرات، لا تفوّت هذه الخطوة.
	</li>
</ol>
<p>
	في هذه الصّورة أضفنا تصنيف منتج وأدخلناه تحت رابط المنتجات Products التي قمنا بإنشائها في الدرس الأول من هذه السّلسلة:
</p>

<p style="text-align: center;">
	<img alt="tax-term-in-nav-menu.png" src="https://academy.hsoub.com/uploads/imageproxy/tax-term-in-nav-menu.png.a10a585e058a538aaecda766bc3c44e3.png"></p>

<p>
	عندما تذهب الآن إلى واجهة موقعك وتضغط على روابط أرشيف شروط نوع تصنيفاتك سترى قائمة من المنتجات التي توافق ذلك الشرط :
</p>

<p style="text-align: center;">
	<img alt="taxonomy-archive-front-end-700x517.png" src="https://academy.hsoub.com/uploads/imageproxy/taxonomy-archive-front-end-700x517.png.5be3cbae821ed2eaa9b59add1f9c8df8.png"></p>

<h3 id="3-template-">
	3. استخدام ملفات قالب Template لأرشيف الشروط
</h3>

<p>
	إن أردت عرض أرشيف لشروط نوع تصنيفاتك بشكلٍ مختلف عن الطّريقة التي يعرض بها موقعك الأرشيف تستطيع إنشاء ملف template خاص في قالبك Theme أو حتى مجموعة ملفات قالب template لكل واحد من الشروط.
</p>

<p>
	عندما يعرض ووردبريس صفحة الأرشيف لشرط نوع التّصنيفات، سيبحث خلال ملفات قالبك باستخدام القالب الشجري <a href="http://codex.wordpress.org/Template_Hierarchy" rel="external nofollow">template hierarchy</a> ويستخدم أول ملف يصادفه:
</p>

<ol>
<li>
		ملف لعرض الأرشيف بالنسبة لشرط نوع تصنيفات مُحدّد: بالنسبة للشرط الذي يُوافق المنتجات المتميّزة featured يُدعى هذا الملف <span style="font-family:courier new,courier,monospace;">taxonomy-productcat-featured-products.php</span>، لاحظ أنّنا نستخدم اسم نوع التّصنيف متبوعًا بلاحقة slug لشرط نوع التّصنيف لإنشاء اسم الملف.
	</li>
	<li>
		ملف لعرض أرشيف لشرط نوع التّصنيف لكل الشّروط في taxonomy، يُدعى <span style="font-family:courier new,courier,monospace;">taxonomy-productcat.php</span>.
	</li>
	<li>
		ملف لعرض أرشيف لكل أنواع التّصنيفات المُخصّصة، يُدعى <span style="font-family:courier new,courier,monospace;">taxonomy.php</span>.
	</li>
	<li>
		ملف لعرض كل أنواع الأرشيف يُدعى <span style="font-family:courier new,courier,monospace;">archive.php</span>.
	</li>
	<li>
		ملف عام لكل المحتوى يُدعى <span style="font-family:courier new,courier,monospace;">index.php</span>.
	</li>
</ol>
<p>
	يعمل ووردبريس من خلال هذه القائمة ويستخدم أول ملف يجده، يعمل موقعنا على قالب the twenty fifteen theme والذي يملك ملف يُدعى <span style="font-family:courier new,courier,monospace;">archive.php </span>لذا يستخدم هذا الملف.
</p>

<p>
	إن أردت عرض أرشيف نوع تصنيفاتك بشكلٍ مُختلف عن الأرشيف العادي (على سبيل المثال إزالة المقتطفات excerpts وإضافة صور مميّزة featured images) تستطيع إنشاء نسخة من الملف <span style="font-family:courier new,courier,monospace;">archive.php</span> في قالبك وتقوم بتسميته <span style="font-family:courier new,courier,monospace;">taxonomy.php </span>ومن ثمّ تحريره لعرض أرشيفك بالطريقة التي ترغب بها، ولكن حتى لو لم تقم بذلك فالأمر الجيّد هنا أنّ ووردبريس سيجد دومًا ملف قالب template file مناسب لعرض أرشيف لشرطك.
</p>

<p>
	فلننتقل الآن إلى النوع الأخير من المحتوى المُخصّص وهو الحقول المُخصّصة.
</p>

<h2 id="-">
	إنشاء حقول مُخصّصة
</h2>

<p>
	تستطيع إنشاء حقول مُخصّصة بإحدى طريقتين، استخدام الواجهة الافتراضية التي يُزوّدنا بها ووردبريس أو باستخدام إضافة plugin، قد يكون استخدام إضافة أسهل استخدامًا ويُقّدم لك بعضًا من الخيارات القويّة الأخرى لتحرير وعرض حقولك المُخصّصة ولكنّ هذا ليس ضروريًا دومًا.
</p>

<p>
	نجد من بين أفضل الإضافات لإنشاء حقول مُخصّصة:
</p>

<ul>
<li>
		<a href="https://premium.wpmudev.org/project/custompress/" rel="external nofollow">CustomPress</a>: بالإضافة إلى أنّها تُمكّنك من إنشاء أنواع منشورات مُخصّصة و taxonomies تستطيع استخدام هذه الإضافة أيضًا لإنشاء حقول مُخصّصة.
	</li>
	<li>
		<a href="https://wordpress.org/plugins/advanced-custom-fields/" rel="external nofollow">Advanced Custom Fields</a>: هذه هي الإضافة الأكثر استخدامًا لإنشاء حقول مُخصّصة، الإصدار الأساسي مجاني على مستودع إضافات ووردبريس، تُقدّم لك بعض الميّزات القويّة لتحرير وإنشاء حقول مُخصّصة.
	</li>
</ul>
<p>
	إن لم تكن ترغب باستخدام إضافة، تستطيع إنشاء حقول مُخصّصة باستخدام لوحة تحكّم ووردبريس، وهذه هي الطريقة:
</p>

<h3 id="1-">
	1. إنشاء حقول مُخصّصة باستخدام شاشات لوحة التّحكّم الافتراضية
</h3>

<p>
	إن توجّهت إلى شاشة تعديل المنشورات لواحد من منشوراتك (أو كنت تقوم بإنشاء منشور جديد) فقد ترى مربّع بيانات وصفيّة metabox للحقول المُخصّصة تحت جزء التحرير الرئيسي، تستطيع عرضها إن لم تكن ظاهرة بفتح نافذة إعدادات الشّاشة Screen Options الموجودة بأعلى ويمين الشاشة، اضغط على مربّع Custom Fields، أغلق النافذة وسترى مربّع البيانات الوصفيّة metabox قد ظهر أسفل محتواك:
</p>

<p style="text-align: center;">
	<img alt="custom-fields-admin-metabox.png" src="https://academy.hsoub.com/uploads/imageproxy/custom-fields-admin-metabox.png.beea1b68082a4b471e4694e30a7e6294.png"></p>

<p>
	لإضافة حقل مُخصّص تستطيع إمّا اختيار مفتاح موجود مُسبقًا من قائمة منسدلة على الجهة اليسرى أو أضف واحدًا جديدًا بالضّغط على رابط Enter New وكتابته فيها، بعد ذلك تكتب القيمة لحقلك المُخصّص.
</p>

<p>
	قمنا هنا بإنشاء حقل مُخصّص لمنتج أضفناه، والذي مفتاحه هو السّعر Price وقيمته 15.00:
</p>

<p style="text-align: center;">
	<img alt="custom-field-with-data.png" src="https://academy.hsoub.com/uploads/imageproxy/custom-field-with-data.png.1d3db75a69ba6126dddb5e5c8689ece0.png"></p>

<p>
	بعد أن قمت بإضافة المفتاح والقيمة يجب أن تضغط على زر إضافة حقل مُخصّص Add Custom Field لحفظ حقلك المُخصّص، فلن يقوم ووردبريس بحفظه عندما تضغط زر نشر Publish لمنشورك. تستطيع إضافة العدد الذي تحتاجه من الحقول المُخصّصة لمنشوراتك لتخزين بياناتك، لا تنسَ أن تحفظ منشورك بعد أن قمت بحفظ حقولك المُخصّصة.
</p>

<p>
	إذاً هذه هي طريقة إضافة حقل مُخصّص باستخدام واجهة لوحة التّحكّم الافتراضية، دعنا الآن نلقي نظرة على كيفيّة عرض حقولك المُخصّصة على واجهة موقعك.
</p>

<h2 id="-">
	عرض الحقول المُخصّصة على موقعك
</h2>

<p>
	لن يعرض ووردبريس بشكل افتراضي القيم التي أدخلتها في حقولك المُخصّصة ما لم يكن قالبك مُعدًّا لفعل هذا، ربّما تجد أنّ قالبك يأتي مزودًا بدعم للحقول المُخصّصة ويقوم بعرض كل حقولك المُخصّصة على صفحة واحدة لكل منشور، ولكن غالبًا لن يقوم بذلك.
</p>

<p>
	لذا ستحتاج لإضافة وسم قالب <a href="http://codex.wordpress.org/Template_Tags" rel="external nofollow">template tag</a> لفعل هذا.
</p>

<p>
	إنّ وسم القالب هو عبارة عن نوع دالّة والتي تُدخلها إلى ملف قالب theme file لتُخبر ووردبريس أن يعرض بعض البيانات.
</p>

<p>
	يعطينا ووردبريس خيارًا من وسوم القالب لعرض حقولنا المُخصّصة:
</p>

<ul>
<li>
		<strong><span style="font-family:courier new,courier,monospace;">()the_meta</span></strong> يعرض كل أنواع الحقول المُخصّصة لمنشور ما، نستخدمه داخل حلقة loop وسيعرض كل مفاتيح وقيم الحقول المُخصّصة بدون أن يُعطينا قدرة على التّحكّم بذلك.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">()get_post_meta</span></strong> يعطينا تحكّمًا أكثر، يملك مُعاملات parameters نستطيع استخدامها لتحديد أيّ الحقول المُخصّصة نريد أن نحصل عليها وإذا ما كنّا نرغب فقط باسترجاع قيمة واحدة إن كان منشورنا يملك عدّة حقول مُخصّصة بنفس المفتاح، لا يقوم فعليًا بعرض حقولنا المُخصّصة بل يقوم فقط بجلبها، ولكي نعرضها يجب أن نستخدم <span style="font-family:courier new,courier,monospace;">()echo get_post_meta</span>.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">()get_post_custom_values</span></strong> يسمح لنا بجلب كل القيم للحقول المُخصّصة والتي تملك نفس المفتاح الذي نقوم بتحديده، وهي تحتاج أيضًا لاستخدام الأمر echo قبل أن تعرض أي شيء.
	</li>
</ul>
<p>
	تقوم بشكل طبيعي بإضافة واحدة منها إلى ملف القالب template file داخل قالبك والذي يقوم بعرض منشورات مفردة أو أرشيف داخل حلقة loop، وإن أردت بشكلٍ بديل أن تعرض حقول مُخصّصة لعدد من المنشورات في مكان آخر من الموقع تستطيع استخدام <span style="font-family:courier new,courier,monospace;">()get_post_meta</span> خارج الحلقة. لن نقلق الآن حيال هذا، بل سننظر بدلًا من ذلك إلى كيفيّة فعل هذا داخل الحلقة.
</p>

<p>
	إن لم تُصادف الحلقة loop من قبل، فهي كتلة من الشيفرة block of code في داخل template files لقالبك والتي تقوم بجلب العنوان والمحتوى لكل منشور من قاعدة البيانات وتقوم بعرضه.
</p>

<p>
	الخطوة الأولى هي أن تفتح ملف<span style="font-family:courier new,courier,monospace;"> single.php</span> في مُحرّر شيفرة code editor وتجد الحلقة، تبدأ الحلقة بسطر من الشيفرة مشابه لهذا:
</p>

<pre class="ipsCode prettyprint" data-pbcklang="" data-pbcktabsize="">
while ( have_posts() ) : the_post();</pre>

<p>
	ستجد تحت هذا السطر وسوم القالب كـ <span style="font-family:courier new,courier,monospace;">()the_title و ()the_content</span>، تحتاج لإضافة حقولك المُخصّصة بينها، سنقوم بإضافة حقولنا المُخصّصة فورًا بعد العنوان.
</p>

<p>
	<strong>ملاحظة:</strong> إن كنت تعمل على قالب twenty fifteen ستجد أنّه لا يملك الحلقة في ملف <span style="font-family:courier new,courier,monospace;">single.php</span>، بدلًا من ذلك يقوم بتضمين ملف يُدعى <span style="font-family:courier new,courier,monospace;">content.php</span>، لتحرير وعرض نوع منشورات المنتج قم بإنشاء نسخة من ملف <span style="font-family:courier new,courier,monospace;">content.php</span> وقم بتسميتها <span style="font-family:courier new,courier,monospace;">content-product.php</span> وحرّرها.
</p>

<p>
	لعرض كلّ الحقول المُخصّصة للمنشور أدخل الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint" data-pbcklang="" data-pbcktabsize="">
the_meta();</pre>

<p>
	احفظ ملف قالبك.
</p>

<p>
	عندما نزور الآن واجهة موقعنا نستطيع رؤية الحقل المُخصّص الذي أضفناه لمنتجنا:
</p>

<p style="text-align: center;">
	<img alt="custom-fields-front-end-700x434.png" src="https://academy.hsoub.com/uploads/imageproxy/custom-fields-front-end-700x434.png.29caf9b6e289b398e73712db5127128a.png"></p>

<p>
	يتم عرضه بشكل افتراضي بطريقة قائمة نقطية bulleted list، تستطيع تنسيق هذه القائمة كما تريد باستخدام CSS.
</p>

<p>
	ولكن ماذا لو أردنا أن نتحكّم أكثر بالطّريقة التي يتمّ بها عرض الحقل المُخصّص؟ نستطيع استخدام<span style="font-family:courier new,courier,monospace;"> ()get_post_meta</span>.
</p>

<p>
	افتح ملف <span style="font-family:courier new,courier,monospace;">single.php</span> مرة أخرى وقم بإيجاد الشيفرة التي أضفتها ، قم باستبدالها بما يلي:
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
$price = get_post_meta( get_the_ID(), 'Price', true );
if( ! empty( $price ) ) {
echo '&lt;p&gt;Price: $' . $price . '&lt;/p&gt;';
}</pre>

<p>
	دعنا نلقي نظرة على ما تفعله هذه الشّيفرة:
</p>

<ol>
<li>
		في البداية تحصل على الحقل المُخصّص لهذا المنشور الذي يملك المفتاح Price وتقوم بتخزينه في متغير variable يُدعى <span style="font-family:courier new,courier,monospace;">price$</span>.
	</li>
	<li>
		تتحقق أنّ الحقل المُخصّص ليس فارغًا.
	</li>
	<li>
		إن لم يكن كذلك تقوم بعرض السّعر price داخل وسم فقرة paragraph tag مع بعض النّص قبله.
	</li>
</ol>
<p>
	الآن احفظ الملف وألقِ نظرة على صفحتك ، تبدو الصّفحة لدينا هكذا:
</p>

<p style="text-align: center;">
	<img alt="cusotm-fields-get-post-meta-output-700x4" src="https://academy.hsoub.com/uploads/imageproxy/cusotm-fields-get-post-meta-output-700x412.png.1d0952167c210b73dea10e6605ae780c.png"></p>

<p>
	كما ترى فقد أعطانا هذا تحكّمًا أكثر، فلن نتمكّن فقط من تحديد أيّ حقل مُخصّص نريد عرضها فيه، بل نستطيع إضافة نص قبلها ووضعها داخل عنصر فقرة إن أردنا ولو كنّا نملك حقول مُخصّصة أكثر لعرضها نستطيع إعادة الشيفرة بأي ترتيب نريده.
</p>

<p>
	<strong>ملاحظة:</strong> لأننا استخدمنا قالب Twenty Fifteen في هذا المثال فلم نقم بتحرير الملف مباشرة داخل القالب بل قمنا بدلًا من ذلك بإنشاء قالب ابن Child Theme وقمنا بعمل ملفات جديدة، يعني هذا أنّه عندما نقوم بتحديث قالب Twenty Fifteen فلن نخسر الملفات الجديدة التي أضفناها، إن كنت ستقوم بنفس الشيء ننصحك باتباع هذا الدّليل الرائع لإنشاء قوالب أبناء <a href="https://premium.wpmudev.org/blog/how-to-create-wordpress-child-theme/" rel="external nofollow">child themes</a>.
</p>

<h2 id="-">
	الخلاصة
</h2>

<p>
	إن تتبّعت كلا الدّرسين من هذه السّلسة ستعرف كم من الممكن أن يكون المحتوى المُخصّص مفيدًا وقويًا في ووردبريس، يملك كلّ واحد من أنواع المنشورات المُخصّصة، أنواع التّصنيفات والحقول المُخصّصة استخداماته وطرقه الخاصّة للحصول على أقصى ما تريد من نوع المحتوى.
</p>

<p>
	تعلّمنا في هذا الدرس كيفيّة تسجيل custom taxonomy وعرض صفحات أرشيفه على موقعنا، وكيفية إنشاء حقول مُخصّصة وعرضها على الموقع أيضًا.
</p>

<p>
	هل تستخدم custom taxonomies والحقول المُخصّصة في موقع ووردبريس الخاص بك؟ لأيّة أشياء تجدها مفيدة أكثر؟ قم بكتابك كلامك في التعليقات.
</p>

<p>
	ترجمة -وبتصرّف لـلمقال <a href="https://premium.wpmudev.org/blog/creating-content-taxonomies-and-fields/" rel="external nofollow">Creating Custom Content in WordPress: Taxonomies and Fields</a> لصاحبه Rachel McCollin.
</p>
]]></description><guid isPermaLink="false">101</guid><pubDate>Fri, 19 Jun 2015 15:24:00 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x623;&#x646;&#x648;&#x627;&#x639; &#x645;&#x646;&#x634;&#x648;&#x631;&#x627;&#x62A; &#x645;&#x62E;&#x635;&#x635;&#x629; Custom Post Types &#x641;&#x64A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D9%86%D8%B4%D9%88%D8%B1%D8%A7%D8%AA-%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-custom-post-types-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r100/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-custom-post-type.png.5dffa46d32766b469189d73c39909d1a.png" /></p>

<p id="-custom-post-types">
	من المتفق عليه عالميًّا الآن أنّ ووردبريس WordPress أكثر من مجرّد منصّة تدوين، بل هو نظام إدارة محتوى Content Management System.
</p>

<p>
	ولكن في وجهة نظري أنّ ما يجعل ووردبريس نظام إدارة محتوى قوي هو قدرته على إنشاء محتوى مُخصّص وعرضه بالطريقة التي تُريدها تمامًا.
</p>

<p>
	سنتكلّم في هذا الدرس عن الأنواع الثلاثة للمحتوى المُخصّص في ووردبريس وسنرى كيف نقوم بإنشاء ذلك المحتوى، سنقوم بتغطية:
</p>

<ul>
<li>
		أنواع المنشورات المُخصّصة Custom Post Types
	</li>
	<li>
		أنواع التّصنيفات المُخصّصة Custom taxonomies
	</li>
	<li>
		الحقول المُخصّصة Custom fields
	</li>
</ul>
<p>
	سنتطرّق في هذا الدرس -وهو الدرس الأول من سلسلة مُكوَّنة من درسين- إلى مفهوم المحتوى المُخصّص في ووردبريس وسنشرح كيفية التّسجيل والاستفادة من أنواع المنشورات المُخصّصة، بالإضافة إلى استكشاف كيف يقوم ووردبريس بعرض المنشورات التي نقوم بإنشائها باستخدام ذلك النوع المُخصّص للمنشورات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-custom-post-type.png.86909209a2c9e7858290ae141819087f.png" data-fileid="2786" rel=""><img alt="wordpress-custom-post-type.thumb.png.b73" class="ipsImage ipsImage_thumbnailed" data-fileid="2786" src="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-custom-post-type.thumb.png.b73032228b7ad3de3b18a2221b881527.png"></a>
</p>

<h2 id="-">
	فهم واستخدام كل نوع من أنواع المحتوى المُخصّص
</h2>

<p>
	من المفيد قبل البدء بإنشاء محتوى مُخصّص أن نعرف ما يفعله كلّ نوع منها وفي أيّة حالات قد نستخدمها، فلنبدأ بأنواع المنشورات المُخصّصة.
</p>

<h3 id="1-">
	1. أنواع المنشورات المُخصّصة
</h3>

<p>
	يأتي ووردبريس مُجهّزًا بشكلٍ افتراضي بمجموعة من أنواع المنشورات وهي:
</p>

<ul>
<li>
		المنشورات Posts.
	</li>
	<li>
		الصفحات Pages.
	</li>
	<li>
		المرفقات Attachments.
	</li>
	<li>
		عناصر قائمة التّصفّح Navigation menu items.
	</li>
	<li>
		المراجعات Revisions.
	</li>
	<li>
		الروابط Links (إن كنتَ تستخدم ميّزة المدوّنات blogroll).
	</li>
</ul>
<p>
	تستطيع أيضًا إنشاء أنواع خاصة بك من المنشورات المُخصّصة لتخزين المحتوى الذي لا يندرج تحت أيّ من التصنيفات السابقة، قد تتضمن الأمثلة المنتجات في موقع للتجارة الإلكترونية e-commerce أو الأحداث events في موقع للعروض Listings site، إن كنت استخدمت سابقًا إضافة Plugin لإنشاء متجر، عرض لحدث event listing أو أي نوع آخر من المحتوى الفريد فقد أنشأتَ بالمصادفة نوعًا جديدًا من المنشورات المُخصّصة حتى بدون أن تعرف ذلك.
</p>

<p>
	تستخدم العديد من الإضافات أنواع المنشورات المُخصّصة، نذكر على سبيل المثال:
</p>

<ul>
<li>
		<a href="http://premium.wpmudev.org/project/e-commerce/" rel="external nofollow">MarketPress</a>: تستخدم نوع منشورات مُخصّصة للمنتجات.
	</li>
	<li>
		<a href="http://premium.wpmudev.org/project/coursepress-pro/" rel="external nofollow">CoursePress Pro</a>: تستخدم أنواع منشورات مُخصّصة للدروس، المدرّبين والطلّاب.
	</li>
	<li>
		<a href="http://premium.wpmudev.org/project/support-system/" rel="external nofollow">Support System</a>: تستخدم أنواع منشورات مُخصّصة للتذاكر والأسئلة الشائعة FAQs.
	</li>
</ul>
<p>
	يوجد العديد من الأمثلة الأخرى ولكن تعطينا الأمثلة السابقة فكرة عن استخدامات أنواع المنشورات المُخصّصة.
</p>

<p>
	من الهام أن تتذكر أنّ أنواع المنشورات المُخصّصة هي ليست منشورات، فهي لا تملك أيّة علاقة مباشرة مع المنشورات ويجب أن تفكر بهما بشكل منفصل، يُمكنك إعداد (أو تسجيل) أنواع خاصة بك من المنشورات المُخصّصة لتسلك سلوك المنشورات أو الصفحات، الأمر عائدٌ إليك، فإن تمّ إعدادها كالمنشورات سيكون بإمكانك عرض صفحات الأرشيف الخاصة بها، أمّا إن تمّ إعدادها كالصفحات فستكون بشكلٍ شجري hierarchical، يتم إعداد معظم أنواع المنشورات المُخصّصة لتسلك سلوك المنشورات ولكن لا يعني هذا أنّ أنواعك يجب أن تكون كذلك.
</p>

<h3 id="2-">
	2. أنواع التصنيفات المُخصّصة
</h3>

<p>
	وكما وجدنا مع أنواع المنشورات المُخصّصة فإنّ أنواع التّصنيفات المُخصّصة تضيف إلى أنواع التّصنيفات الموجودة مسبقًا في ووردبريس، والتي هي:
</p>

<ul>
<li>
		التصنيفات Categories.
	</li>
	<li>
		الوسوم Tags.
	</li>
	<li>
		هيئات المنشور Post Formats.
	</li>
	<li>
		تصنيفات الرابط Link categories (والتي تنطبق على الروابط في المدوّنة blogroll إن كنت تستخدمها).
	</li>
</ul>
<p>
	تستطيع أيضًا إنشاء أنواع خاصة بك من التّصنيفات المُخصّصة لترتيب المحتوى بشكل فعال أكثر، من الهام أن تتذكر أنّ نوع التّصنيف المُخصًص هو ليس تصنيف Category ولا يملك أيّة علاقة بالتصنيفات Categories، بدلًا من ذلك فإنّ التصنيف Category هو فقط واحد من أنواع التّصنيفات المستخدمة من قبل ووردبريس.
</p>

<p>
	سيعطيك استخدامك للتصنيفات المُضمّنة مع ووردبريس في بعض الأحيان كل ما تحتاجه لترتيب المحتوى لديك، على سبيل المثال إن كنت تحتاج أن تقدّم بنية تصنيفات شجريّة hierarchical category structure، ولكن في بعض الأحيان لن يكون هذا كافيًا بالنسبة لك خاصة إن كنت تريد أن تتمكن من عرض المنشورات باستخدام أكثر من taxonomy واحد أو كنت تستخدم نوع منشورات مُخصّصة وتريد استخدام taxonomy منفصل له.
</p>

<p>
	تتضمن الأمثلة ما يلي:
</p>

<ul>
<li>
		على موقع للتجارة الإلكترونية: تكون أنواع التّصنيفات للمنتج Product غالبًا متعددة كاللون والحجم والنسيج بالنسبة لمتجر ألبسة.
	</li>
	<li>
		على موقع لعروض الأحداث: taxonomies لنوع الحدث ومكانه والمزيد من ذلك.
	</li>
	<li>
		على قاعدة المعرفة knowledgebase: إنشاء taxonomies لترتيب البيانات بطريقة شاملة، على سبيل المثال إن كانت قاعدة معرفة لتطوير الوِب فربّما تستخدم taxonomies للغات البرمجة، درجة الصعوبة والمنصّات platforms.
	</li>
</ul>
<p>
	نذكر مرّة آخرى أنّ الإضافات تستخدم أنواع التّصنيفات المُخصّصة، يوجد على سبيل المثال في إضافة MarketPress تصنيفات ووسوم للمنتج بشكلٍ مستقل عن تصنيفات ووسوم منشورات المدوّنة Blog posts، يوجد في CoursePress تصنيفات للدرس وفي نظام الدعم توجد أيضًا taxonomies لأنواع التذاكر وتصنيفات للأسئلة الأكثر شيوعًا FAQ.
</p>

<p>
	قبل أن تقرر إن كنت بحاجة تسجيل taxonomy مُخصّص فإنّك ستحتاج أن تسأل نفسك إن كان نظام التصنيفات الحالي يقوم بما تحتاجه، إن كان كل ما تحتاج إليه هو القدرة على إضافة شجرة hierarchy إلى تصنيفاتك فبإمكانك فعل هذا حاليًا.
</p>

<p>
	فإن كنّنا نقوم بتطوير موقع للتدريب على سبيل المثال وأردنا استخدام تصنيفات لترتيب المنشورات حسب المهارة أو المعلومات التي يتم تدريسها فبإمكاننا استخدام التصنيفات الشجرية hierarchical categories كما يظهر في هذه الصورة، تستطيع أن ترى هنا أننا نملك ثلاثة تصنيفات في المستوى الأعلى وهي: تطوير الإدارة management development، تطوير شخصي personal development ومهارات تقنيّة technical skills، مع وجود كافة التصنيفات الأخرى تحتها في المستوى التالي.
</p>

<p style="text-align: center;">
	<img alt="categories-177x205.png" src="https://academy.hsoub.com/uploads/imageproxy/categories-177x205.png.b545bee8d32e6e91c26f06f5385826e4.png"></p>

<p>
	ولكن ماذا لو تعقّدت الأمور أكثر قليلًا؟ فلنفرض أنّك أردت إضافة سلسلة من المنشورات حول التواصل مع فريقك.
</p>

<p style="text-align: center;">
	<img alt="categories-and-taxonomy-177x315.png" src="https://academy.hsoub.com/uploads/imageproxy/categories-and-taxonomy-177x315.png.bc3f9200c7297da1b6357ac66d1413c5.png"></p>

<p>
	ستكون الأمور أسهل لو استطعنا فصل حقيقة أنّ هذه المنشورات هي للمدراء managers وتتعلّق في نفس الوقت بمهارات التواصل communication skills، لذلك من الأفضل ربّما لو استطعنا إضافة تصنيف taxonomy للجمهور audience واستخدامه لتحديد المنشورات للمدراء managers بدلًا من أن نملك تطوير الإدارة management development كتصنيف، باستطاعتنا إنشاء تصنيف جديد للجماهير audiences، بهذه الطريقة نستطيع تحديد الموضوعات المتعدّدة ومجموعات الجمهور المتعّددة لكل منشور.
</p>

<p>
	سنرى كيفية إنشاء taxonomy مثل هذا في الدرس القادم من سلسلة الدروس هذه، حالما نقوم بإنشائها سيكون بإمكاننا الاختيار من كلا المجموعتين categories و audience في شاشة تعديل المنشور كما هو ظاهر في الصورة السابقة.
</p>

<h3 id="3-">
	3. الحقول المُخصّصة
</h3>

<p>
	النوع الثالث من المحتوى المُخصّص هو الحقل المُخصّص، يتمّ الإشارة له أيضًا بأنّه البيانات الوصفية Metadata للمنشور.
</p>

<p>
	يتكون الحقل المُخصّص من عنصرين يُمكنك رؤيتهما وتعديلهما في شاشة تعديل المنشور وهما المفتاح key والقيمة value، بإمكانك استخدام نفس المفتاح عدّة مرات للمنشورات المتعدّدة ولكن تملك كل منها قيمة فريدة يُعطي ووردبريس كل حقل مُخصّص تقوم بإنشائه مُعرّف ID فريد خاص به أيضًا، والذي يعني أنّ كلّ حقل مُخصّص لكل منشور هو فريد من نوعه حتى ولو كانت تملك نفس المفتاح والقيمة.
</p>

<p>
	يختلف هذا عن أنواع التّصنيفات المُخصًصة، فبالرغم أنّك تستطيع الاختيار من مفتاح موجود عند إنشاء حقل مُخصّص فلن يكون بإمكانك الاختيار من قيم موجودة استخدمتها سابقًا، يعني هذا بشكل عام أنّ أنواع التّصنيفات أفضل لترتيب وتصنيف البيانات.
</p>

<p>
	<strong>ملاحظة</strong>: تعطيك بعض الإضافات اختيارًا لكي تنتقي قيمة الحقل المُخصّص من صندوق قائمة منسدلة، ولكنها ستستخدم صندوق وصفي مُخصّص metabox يتم إنشاؤه من قبل الإضافة في شاشة تعديل المنشور بدلًا من واجهة الحقول المُخصّصة المعيارية التي يزودنا بها ووردبريس.
</p>

<p>
	ولكن توجد بعض الحالات التي يكون فيها استخدام حقل مُخصّص مفيدًا لترتيب البيانات، على سبيل المثال إن كنت تريد تخزين بيانات عدديّة، ففي موقع للتجارة الإلكترونيّة لن ترغب بإنشاء taxonomy لكل سعر محتمل، بل ستقوم بدلًا من ذلك بإدخال هذا في حقل مُخصّص، وتستطيع بعدها استخدام هذه البيانات للسماح للزبائن بتحديد المنتجات ذات السعر الأقل من 20$ على سبيل المثال أو ترتيبها بحسب السعر.
</p>

<p>
	تستطيع أيضًا استخدام الحقول المُخصّصة لتخزين البيانات غير العدديّة، مما يعني أنّه يمكن تخزين وعرض بيانات متماثلة بين المنشورات وعرضها بشكل منفصل عن جسم المنشور، على سبيل المثال في موقع عرض للوظائف jobs بإمكانك استخدام حقول مُخصّصة لتخزين الموقع، الراتب وعدد ساعات العمل لمكان شاغر.
</p>

<p>
	وهذا ما تفعله إضافة Jobs &amp; Experts، فهي تستخدم تجميعة combination من الحقول المُخصّصة (يُشار إليها بـ “Job Meta”) و taxonomies (يُشار إليها بـ “Category and Skill”) لترتيب البيانات:
</p>

<p style="text-align: center;">
	<img alt="jobsexperts-metadata-700x220.png" src="https://academy.hsoub.com/uploads/imageproxy/jobsexperts-metadata-700x220.png.dc2ec84cda61f2de724639aa3eec6ac1.png"></p>

<p>
	بمجرّد أن تقوم بإضافة هذه البيانات سيتمكن زوار موقع الوظائف Jobs الخاص بك من ترتيب الوظائف بحسب الميزانية، عرض الأعمال التي لا تزال مفتوحة فقط ورؤية البريد الإلكتروني للاتصال وتاريخ الانتهاء لكل وظيفة معروضة بشكل بارز، يُستخدم نوع التّصنيف للمهارات بحيث نتمكّن من عرض صفحات الأرشيف لكل واحدة منها.
</p>

<p>
	سنتعلّم كيفية إنشاء حقولنا المُخصّصة في الدرس التالي من هذه السلسلة، سننتقل في هذا الدرس إلى إنشاء أنواع المنشورات المُخصّصة.
</p>

<h2 id="-">
	إنشاء نوع منشورات مُخصّصة
</h2>

<p>
	بعد أن قمت بتحديد أنّك تحتاج إلى نوع منشورات مُخصّصة توجد طريقتان لإنجاز هذا الأمر، برمجته بنفسك أو استخدام إضافة plugin، سأقوم قريبًا بشرح الكود الضروري لتسجيل نوع منشورات مُخصّصة في قالب Theme أو إضافة Plugin، ولكن دعنا نلقي نظرة على بعض الإضافات التي تستطيع استخدامها:
</p>

<ul>
<li>
		تزوّدك <a href="http://premium.wpmudev.org/project/custompress/" rel="external nofollow">CustomPress</a> بواجهة لإنشاء أنواع المنشورات المُخصّصة، التصنيفات والحقول المُخصّصة وهي سهلة الاستخدام كثيرًا، إن كنت تريد إنشاء العديد من أنواع المحتوى المُخصّص ستوفر عليك هذه الإضافة عناء تثبيت أكثر من إضافة.
	</li>
	<li>
		إنّ إضافة <a href="https://wordpress.org/plugins/custom-post-type-ui/" rel="external nofollow">Custom Post Type UI</a> هي أشيع إضافة مجانيّة لإضافة أنواع المنشورات المُخصّصة على مستودع الإضافة plugin repository، فهي تسمح لك بإضافة أنواع المنشورات المُخصّصة وأنواع التّصنيفات ولكن لا تسمح بإنشاء الحقول المُخصّصة، واجهتها ليست سهلة الاستخدام تمامًا كما في CustomPress، مع المزيد من المصطلحات التقنيّة لكي تتمكّن من فهمها، ولكنّها تقوم بعملها.
	</li>
</ul>
<p>
	تستطيع القراءة أكثر عن الإضافات التي تساعدك على إنشاء محتوى مُخصّص في مراجعتنا عن أفضل إضافات أنظمة إدارة المحتوى <a href="http://premium.wpmudev.org/blog/top-wordpress-cms-plugins-reviewed/" rel="external nofollow">the best CMS plugins</a>. ولكن إن كنتَ ترتاح ببرمجة الأنواع الخاصّة بك فها هي طريقة تسجيل نوع منشورات مُخصّصة.
</p>

<h3 id="1-">
	1. برمجة نوع المنشورات الخاصة بك
</h3>

<p>
	يزوّدنا ووردبريس بدالّة تُدعى <span style="font-family:courier new,courier,monospace;">()register_post_type</span> تستطيع استخدامها لإنشاء نوع خاص بك من المنشورات المُخصّصة، يجب أن تضيف هذه الدالّة إلى ملف دالّات القالب أو بشكل أفضل إلى إضافة تقوم بإنشائها خصيصًا لهذا الأمر وتقوم بتشغيلها عبر <span style="font-family:courier new,courier,monospace;">hook init</span> في ووردبريس.
</p>

<p>
	<strong>ملاحظة:</strong> من الأفضل أن تُسجّل النوع الخاص بك من المنشورات المُخصّصة في إضافة بدلًا من عمل ذلك في قالبك، لأنّك إن قمت في الحالة الأخيرة بتغيير قالبك في المستقبل فلن تخسر النوع الخاص بك من المنشورات المُخصّصة.
</p>

<p>
	تحتاج لمتابعة هذه التقنيّة إلى الوصول إلى ملفات ووردبريس الخاصة بك وإلى مُحرّر شيفرة Code editor، أوصي بتجربة هذه الطريقة على موقع للتطوير والاختبار وليس على موقعك الموجود على الإنترنت.
</p>

<p>
	ابدأ بإنشاء ملف فارغ جديد يُدعى <span style="font-family:courier new,courier,monospace;">post-types.php</span> وقُم بحفظه في مجلّد <span style="font-family:courier new,courier,monospace;">plugins</span> الموجود في مجلّد<span style="font-family:courier new,courier,monospace;"> wp-content</span>.
</p>

<p>
	أضف الآن الشيفرة التالية إلى ذلك الملف:
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
&lt;?php
/*Plugin Name: Create Product Post Type
Description: This plugin registers the 'product' post type.
Version: 1.0
License: GPLv2
*/
?&gt;</pre>

<p>
	تفتح هذه الشيفرة ملف الإضافة وتُخبر ووردبريس أنّها عبارة عن إضافة، تُزوّدنا أيضًا بعنوان title ووصف description والذي سيساعدك في تحديد الإضافة عند تفعيلها على موقعك.
</p>

<p>
	أضف الآن هذه الأسطر تحت السطر الذي يحتوي على */  وفوق سطر الإنهاء ?&gt; :
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
function wpmudev_create_post_type() {

}
add_action( 'init', 'wpmudev_create_post_type' );</pre>

<p>
	سيقوم هذا بإنشاء دالّة تحمل الشيفرة لتسجيل نوع المنشورات الخاصّة بك وسيقوم بإرفاقها إلى<span style="font-family:courier new,courier,monospace;"> init hook</span> باستخدام الدالّة<span style="font-family:courier new,courier,monospace;"> ()add_action</span>، تتأكد هذه الدالّة من أنّ ووردبريس يقوم بتشغيل دالّتك في الوقت المناسب.
</p>

<p>
	تحتاج الآن لإضافة شيفرة النوع الخاص بك من المنشورات المُخصّصة داخل الأقواس curly braces:
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
// set up labels
$labels = array(
'name' =&gt; 'Products',
'singular_name' =&gt; 'Product',
'add_new' =&gt; 'Add New Product',
'add_new_item' =&gt; 'Add New Product',
'edit_item' =&gt; 'Edit Product',
'new_item' =&gt; 'New Product',
'all_items' =&gt; 'All Products',
'view_item' =&gt; 'View Product',
'search_items' =&gt; 'Search Products',
'not_found' =&gt; 'No Products Found',
'not_found_in_trash' =&gt; 'No Products found in Trash',
'parent_item_colon' =&gt; '',
'menu_name' =&gt; 'Products',
);

//register post type
register_post_type( 'product', array(
'labels' =&gt; $labels,
'has_archive' =&gt; true,
'public' =&gt; true,
'supports' =&gt; array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail','page-attributes' ),
'taxonomies' =&gt; array( 'post_tag', 'category' ),
'exclude_from_search' =&gt; false,
'capability_type' =&gt; 'post',
'rewrite' =&gt; array( 'slug' =&gt; 'products' ),
)
);</pre>

<p>
	دعنا نلقي نظرة أقرب على ما تفعله هذه الشيفرة، يخبر المقطع الأول ووردبريس أيّة تسميات labels تريد استخدامها لنوعك من المنشورات، ستقوم هذه التّسميات باستبدال التّسميات الافتراضيّة والتي هي: Posts ،Add Post... إلخ، نقوم بعد ذلك باستدعاء دالّة<span style="font-family:courier new,courier,monospace;"> ()register_post_type</span> والتي تملك المُعامِلات <span style="font-family:courier new,courier,monospace;">parameters</span> التالية:
</p>

<ul>
<li>
		<strong><span style="font-family:courier new,courier,monospace;">title:</span></strong> لن تعمل الدالّة بدونه.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">labels:</span></strong> التّسميات التي قمتَ بتحديدها مُسبقًا.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">has_archive:</span></strong> عند تعيين قيمته إلى true فأنت تُخبر ووردبريس بأنّه من الممكن إظهار صفحات الأرشفة بالنسبة لنوع المنشور هذا.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">public:</span></strong> قم بتعيين قيمته إلى true لكي تتأكد أنّه بإمكان الناس رؤية صفحة لكل منتج على موقعك.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">supports:</span></strong> عناصر مدير نظام ووردبريس WordPress admin التي يدعمها نوع المنشورات المُخصّصة.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">taxonomies:</span></strong> مصفوفة array من أنواع التّصنيفات التي تريد استخدامها مع نوع المنشورات، لقد قمت باستخدام التصنيفات والوسوم المُضمّنة، على الرغم من أنّك قد ترغب بتركها فارغة وتسجيل taxonomy مُخصّصة للنوع الخاص بك من المنشورات لاحقًا.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">exclude_from_search:</span></strong> قم بتعيين قيمته إلى false لكي تتأكد أنّه يتم تضمين منتجاتك في نتائج البحث.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">capability_type:</span></strong> يتم تعيين قيمة هذا الُمعامل كـ post لأنّ منتجاتنا ستسلك سلوك المنشورات وليس الصفحات.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">rewrite:</span></strong>  يُخبر هذا المُعامل ووردبريس ما هو الـ slug بالنسبة لأرشيف نوع المنشورات، والذي هو النص المُستخدم بعد اسم نطاقك domain كرابط له، بتعيين هذا إلى القيمة products سيكون رابط صفحة منتجك: <a href="http://mysite.com/products/" rel="external nofollow">http://mysite.com/products</a>
	</li>
</ul>
<p>
	قُم الآن بحفظ ملفك، ستبدو شيفرة الإضافة كاملةً كما يلي:
</p>

<pre class="php ipsCode prettyprint" data-pbcklang="php" data-pbcktabsize="">
&lt;?php
/*Plugin Name: Create Product Post Type
Description: This plugin registers the 'product' post type.
Version: 1.0
License: GPLv2
*/

// register custom post type to work with
function wpmudev_create_post_type() {
// set up labels
$labels = array(
'name' =&gt; 'Products',
'singular_name' =&gt; 'Product',
'add_new' =&gt; 'Add New Product',
'add_new_item' =&gt; 'Add New Product',
'edit_item' =&gt; 'Edit Product',
'new_item' =&gt; 'New Product',
'all_items' =&gt; 'All Products',
'view_item' =&gt; 'View Product',
'search_items' =&gt; 'Search Products',
'not_found' =&gt; 'No Products Found',
'not_found_in_trash' =&gt; 'No Products found in Trash',
'parent_item_colon' =&gt; '',
'menu_name' =&gt; 'Products',
);

//register post type
register_post_type( 'product', array(
'labels' =&gt; $labels,
'has_archive' =&gt; true,
'public' =&gt; true,
'supports' =&gt; array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail','page-attributes' ),
'taxonomies' =&gt; array( 'post_tag', 'category' ),
'exclude_from_search' =&gt; false,
'capability_type' =&gt; 'post',
'rewrite' =&gt; array( 'slug' =&gt; 'products' ),
)
);
}
add_action( 'init', 'wpmudev_create_post_type' );
?&gt;</pre>

<p>
	ستحتاج إلى تفعيل إضافتك الجديدة لكي يعمل النوع الخاص بك من المنشورات، اذهب إلى صفحة الإضافات Plugins في لوحة تحكم موقعك وقم بإيجاد إضافتك الجديدة:
</p>

<p style="text-align: center;">
	<img alt="activate-cpt-plugin-700x77.png" src="https://academy.hsoub.com/uploads/imageproxy/activate-cpt-plugin-700x77.png.467421b1c9d63ae88829c647486de890.png"></p>

<p>
	اضغط على رابط التفعيل Activate لكي يتم تفعيلها، سترى الآن نوعًا إضافيًا للمنشورات في قائمة لوحة التحكم:
</p>

<p style="text-align: center;">
	<img alt="admin-menu-with-new-post-type.png" src="https://academy.hsoub.com/uploads/imageproxy/admin-menu-with-new-post-type.png.2d238056b246807c7bcdd73c2e74f399.png"></p>

<p>
	تستطيع الضغط على رابط المنتجات Products والبدء بإضافة منتجات إلى موقعك بنفس الطريقة التي تفعلها مع المنشورات.
</p>

<h2 id="-front-end-">
	عرض نوع المنشورات الخاصة بك على واجهة الموقع الأمامية Front End:
</h2>

<p>
	بمجرّد أن تقوم بإضافة بعض المنتجات ستحتاج أن تكون قادرًا على عرضها على واجهة موقعك.
</p>

<h3 id="1-permalinks-">
	1. ضبط الروابط الدائمة Permalinks لكي توصلك إلى صفحات نوع المنشورات الخاصة بك
</h3>

<p>
	تحتاج في البداية لتحديث الروابط الدائمة Permalinks على موقعك بحيث يستخدم ووردبريس الروابط الصحيحة لعرض المنتجات أو أرشيف المنتجات:
</p>

<ol>
<li>
		في لوحة تحكم ووردبريس اذهب إلى إعدادات:<span style="font-family:courier new,courier,monospace;"><strong> Settings -&gt; Permalinks</strong></span>
	</li>
	<li>
		تأكد من أنّه تم اختيار خيار اسم المنشور “post name”.
	</li>
	<li>
		3.اضغط على زر حفظ التغييرات Save Changes.
	</li>
</ol>
<p>
	<strong>ملاحظة:</strong> تحتاج إلى فعل هذا حتى ولو كنت قد قمت بإعداد الروابط الدائمة مُسبقًا لأنّ ووردبريس يحتاج إلى تحديث هذه الإعدادات لأجل مجموعة الروابط الجديدة لمنتجاتك.
</p>

<h3 id="2-">
	2. إضافة نوع المنشورات الخاصة بك إلى قائمة التصفّح
</h3>

<p>
	إن كنت ترغب بإضافة منتجات إلى قائمة التصفّح لديك تستطيع الذهاب إلى: <strong style="line-height: 22.3999996185303px;"><span style="font-family: 'courier new', courier, monospace;">Appearance -&gt; Menus</span></strong>
</p>

<p>
	وسترى أنّه يتم عرض المنتجات على اليسار، قم ببساطة بسحب أي منتج إلى قائمتك لكي تُضّمنه إليها.
</p>

<p>
	إنّ إضافة أرشيف منتج أصعب قليلًا ولعمل هذا تحتاج إلى إضافة رابط مُخصّص Custom Link إلى القائمة:
</p>

<ol>
<li>
		بينما لا تزال في شاشة القوائم اضغط على صندوق القوائم Links box على اليسار.
	</li>
	<li>
		في حقل الـ URL اكتب <a href="http://mysite.com/products/" rel="external nofollow">http://mysite.com/products</a> مستبدلًا mysite.com باسم نطاقك الخاص.
	</li>
	<li>
		في حقل نص الرابط Link text اكتب Products.
	</li>
	<li>
		اضغط على زر إضافة إلى القائمة Add to Menu.
	</li>
	<li>
		بعد أن تمّت إضافة الرابط إلى القائمة قم بنقله إلى المكان المناسب وقم بحفظ القائمة.
	</li>
	<li>
		احفظ تغييراتك بالضغط على Save Menu. Don’t miss this step!
	</li>
</ol>
<p>
	عندما تزور الآن واجهة موقعك وتضغط على ذلك الرابط في القائمة سيتم نقلك إلى صفحة أرشيف منتجك، ها هي الصفحة الخاصة بي:
</p>

<p style="text-align: center;">
	<img alt="prodyct-archive-page-700x419.png" src="https://academy.hsoub.com/uploads/imageproxy/prodyct-archive-page-700x419.png.678abe11a5d78df78089892758064301.png"></p>

<h3 id="3-template-">
	3. قالب Template لنوع المنشورات الخاصة بك
</h3>

<p>
	يستخدم ووردبريس شيئًا يُدعى شجرة القالب template hierarchy لتحديد أي ملف قالب Template في قالبك Theme يجب أن يستخدمه لعرض نوع محتوى معطى، إنّ وصف كيفية عمل شجرة القالب بالتفصيل هو خارج مجال درسنا هذا، ولكن يساعدك أن تعرف كيف يقوم ووردبريس بعرض النوع الجديد الخاص بك من المنشورات.
</p>

<p>
	عندما يقوم ووردبريس بعرض منتج واحد سيبحث في قالبك عن كل واحد من هذه الملفات بالترتيب:
</p>

<ol>
<li>
		ملف لعرض منتج وحيد يُدعى <span style="font-family:courier new,courier,monospace;">single-product.php</span>.
	</li>
	<li>
		ملف لنشر كل المنشورات المفردة من أي نوع منشور كانت ، يُدعى <span style="font-family:courier new,courier,monospace;">single.php</span>.
	</li>
	<li>
		الملف العام لنشر كل أنواع المحتوى يُدعى <span style="font-family:courier new,courier,monospace;">index.php</span>.
	</li>
</ol>
<p>
	عندما يعرض ووردبريس أرشيف لمنتج سيعمل من خلال ملفات القالب Template هذه:
</p>

<ol>
<li>
		ملف لعرض أرشيف المنتج يُدعى<span style="font-family:courier new,courier,monospace;"> archive-product.php</span>.
	</li>
	<li>
		قالب أرشيف عام يُدعى<span style="font-family:courier new,courier,monospace;"> archive.php</span>.
	</li>
	<li>
		القالب الافتراضي default template وهو<span style="font-family:courier new,courier,monospace;"> index.php</span>.
	</li>
</ol>
<p>
	سيعمل ووردبريس عبر هذه الشجرة hierarchy ويستخدم ملف القالب الذي يصادفه أولًا، لذا إن كنت تريد إنشاء قالب مُخصّص custom template لمنتجاتك فمن الجيّد أن تبدأ بنسخ ملف <span style="font-family:courier new,courier,monospace;">single.php</span> وتحفظه باسم <span style="font-family:courier new,courier,monospace;">single-product.php</span> ومن ثمّ تقوم بتعديله.
</p>

<p>
	على أيّة حال إن لم تكن ترغب بإنشاء ملفات قالب template files سيقوم ووردبريس بكل سرور باستخدام الملفات الموجودة مُسبقًا ضمن قالبك، وهو ما تمّ عمله بالنسبة لي مع ملفات <span style="font-family:courier new,courier,monospace;">archive.php</span> و <span style="font-family:courier new,courier,monospace;">single.php</span> على قالب twenty fifteen theme.
</p>

<h2 id="-">
	ملخّص
</h2>

<p>
	تجعل القدرة على إنشاء محتوى مُخصّص ووردبريس قويًا جدًا: نستطيع استخدامه لإضافة وعرض العديد من أنواع المحتوى المرنة بالطريقة التي نحتاجها.
</p>

<p>
	تعلّمنا في هذا الدرس عن الأنواع الثلاثة للمحتوى المُخصّص، ما هي ومتى نستخدم كلّ واحد منها، تعلّمنا أيضًا كيف نُنشئ أنواع منشورات مُخصّصة ونعرضها على موقعنا.
</p>

<p>
	سنتعلّم في الدرس القادم كيف نقوم بإنشاء taxonomies مُخصّصة وحقول مُخصّصة.
</p>

<p>
	هل تستخدم أنواع منشورات مُخصًصة في مواقعك؟ هل تفضّل استخدام إضافة أو كتابة الشيفرة الخاصّة بك؟ في أيّة أشياء تستفيد منها؟ دعنا نعلم أفكارك في التعليقات.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://premium.wpmudev.org/blog/creating-content-custom-post-types/" rel="external nofollow">Creating Custom Content in WordPress: Custom Post Types</a> لصاحبه Rachel McCollin.
</p>

<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/R1.png.b2881370b1e2263f4ca0cc81976fa064.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2666" src="https://academy.hsoub.com/uploads/monthly_2015_06/R1.thumb.png.d1673738a355239191d8a42139806df8.png" class="ipsImage ipsImage_thumbnailed" alt="R1.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/R2.png.56ad59a41dde7e7561f068a7d121fe3c.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2667" src="https://academy.hsoub.com/uploads/monthly_2015_06/R2.thumb.png.cf996854c3a01c65d52da38bc3ee6b4f.png" class="ipsImage ipsImage_thumbnailed" alt="R2.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/R3.png.58df1fbe78d1561e52718c1e9a895458.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2668" src="https://academy.hsoub.com/uploads/monthly_2015_06/R3.thumb.png.5608e11b76bc6d67833d31d94797e0fa.png" class="ipsImage ipsImage_thumbnailed" alt="R3.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/finala.png.3535d731b4b58d03a8d7e6f3f50d12cf.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2669" src="https://academy.hsoub.com/uploads/monthly_2015_06/finala.thumb.png.304b96328e082b2e8aca6b4a32057fed.png" class="ipsImage ipsImage_thumbnailed" alt="finala.png"></a></p>
<p><a class="ipsAttachLink" href="//academy.hsoub.com/applications/core/interface/file/attachment.php?id=2670">sse-examples.zip</a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/project-img_(1).png.7b2b96269f665a7f7e55a6aaa447bac3.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2671" src="https://academy.hsoub.com/uploads/monthly_2015_06/project-img_(1).thumb.png.9f50ae309493437e3d15a4088969a3d2.png" class="ipsImage ipsImage_thumbnailed" alt="project-img (1).png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/sse.png.f7b6dd648231905fc4a08e457e3b8463.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2673" src="https://academy.hsoub.com/uploads/monthly_2015_06/sse.thumb.png.dbdd1c6982aaf625212669e661d01908.png" class="ipsImage ipsImage_thumbnailed" alt="sse.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/web-sockets.png.6452b21b98fa8a3373b21cbeb6d8cbc6.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2674" src="https://academy.hsoub.com/uploads/monthly_2015_06/web-sockets.thumb.png.bd7a0d40d4aab5136db0275ca0684444.png" class="ipsImage ipsImage_thumbnailed" alt="web-sockets.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/1_final.jpg.20f4e3263812203b7237f8884ad8df52.jpg" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2676" src="https://academy.hsoub.com/uploads/monthly_2015_06/1_final.thumb.jpg.d1f12b4a60f216f6347316404793387a.jpg" class="ipsImage ipsImage_thumbnailed" alt="1 final.jpg"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/2_wihout_img.png.d01bd4c82aeff2a68aeae3d45b2fbeac.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2677" src="https://academy.hsoub.com/uploads/monthly_2015_06/2_wihout_img.thumb.png.4d802f8ff1d8b2a40a677cb07732aaa6.png" class="ipsImage ipsImage_thumbnailed" alt="2 wihout img.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/3_final_befor_wok.png.eafeda82dfc76aa1e6b50fc13ef104f0.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2678" src="https://academy.hsoub.com/uploads/monthly_2015_06/3_final_befor_wok.thumb.png.2764cc54f597c8868b6412fa5ac21f29.png" class="ipsImage ipsImage_thumbnailed" alt="3 final befor wok.png"></a></p>]]></description><guid isPermaLink="false">100</guid><pubDate>Fri, 19 Jun 2015 14:41:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x628;&#x646;&#x64A; &#x648;&#x62F;&#x62C;&#x62A; (Widget) &#x644;&#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;&#x61F;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%A8%D9%86%D9%8A-%D9%88%D8%AF%D8%AC%D8%AA-widget-%D9%84%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3%D8%9F-r99/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/wordpress-widget.png.e9be17d438c89410c3f2f8429837ed88.png" /></p>
<meta charset="utf-8">
<title>
</title>
<style type="text/css">
</style>
<p id="-">
	هل رغبتَ يومًا في وضع شيءٍ ما ضمن الشريط الجانبيّ لموقعك إلا أنك لم تجد ما تفكّر به تمامًا ضمن الودجات Widgets الافتراضيّة أو في متجر الإضافات Plugins؟ الودجات هي أدوات فعّالة يمكن استخدامها لإظهار: محتوىً إضافي مرتبط بالصفحة، معلومات عن الكاتب، أعلى المقالات زيارةً، وغير ذلك. استخدام الودجات بشكل صحيح سيزيد من فاعليّة موقعك وتميزه، والعكس صحيح أيضًا. سنتناول في هذا المقال كيفية إنشاء ودجت خاصة بشكل مبسّط. كل ما يتوجب عليك معرفته هو أساسيات البرمجة بلغة PHP و HTML بالحدّ الأدنى، إضافةً لذلك سيكون من الجيد أن تلمّ ببعض مبادئ البرمجة الشيئيّة object oriented في PHP، رغم أنه ليس ضروريًا لفهم ما سنتحدث عنه اليوم، حيث سأطيل في شرح بعض النقاط مراعيًا ذلك.
</p>

<h2 id="-">
	الهدف
</h2>

<p>
	يعتبر التعلّم باستخدام الأمثلة أكثر الطرق نجاحًا وفاعليةً؛ لذا لنجرب وضع هدفٍ لنا في هذا المقال، ولنقل أننا سنبني ودجت لعرض المحتوى، تتضمن عنوانًا، نصًا بسيطًا، صورة، ورابط، بحيث يُعرض ذلك كلّه ضمن مربع أنيق على الشريط الجانبي. توضّح الصورة أدناه كيف تبدو الودجت بشكل افتراضي ضمن قالب Twenty Fifteen.
</p>

<p style="text-align: center;">
	<a href="https://academy.hsoub.com/uploads/monthly_2015_06/1_final.jpg.20f4e3263812203b7237f8884ad8df52.jpg" data-fileid="2676" data-fileext="jpg" rel=""><img alt="1_final.thumb.jpg.d1f12b4a60f216f6347316" data-fileid="2676" src="https://academy.hsoub.com/uploads/monthly_2015_06/1_final.thumb.jpg.d1f12b4a60f216f6347316404793387a.jpg"></a>
</p>

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

<h2 id="-">
	بناء الإضافة
</h2>

<p>
	بإمكانك نسخ كامل النصّ البرمجيّ الذي سنعمل على بناءه في هذا المقال إلى ملف<span style="font-family:courier new,courier,monospace;"> functions.php</span> الخاص بالقالب الذي تستخدمه، لكن الودجت الحقيقية تأتي على شكل إضافة plugin، وباعتبار أن إنشاء واحدة هو أمرٌ سهل فلمَ لا تُكمل معنا خطوةً بخطوة. بدايةً أنشئ مجلد جديد داخل الدليل <span style="font-family:courier new,courier,monospace;">wp-content/plugins</span> باسم معبّر عن ما سنقوم به، بالنسبة لي فقد أسميته <span style="font-family:courier new,courier,monospace;">my-featured-content</span>. تاليًا سننشئ الملف الأساسي للإضافة داخل هذا المجلد، وانتبه إلى أن يتطابق اسم الملف المُنشئ مع اسم المجلد بينما يحمل اللاحقة PHP، ففي حالتي هذه يكون اسم الملف <span style="font-family:courier new,courier,monospace;">my-featured-content.php</span>. افتح الملف الجديد وألصق به النصّ التالي، يُحَلّل هذا التعليق من قبل محرّك WordPress حيث تُستخدم البيانات الواردة ضمنه للتعريف عن الإضافة في قسم الإضافات ضمن لوحة التحكم في موقعك.
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style=""><span class="pun">&lt;?</span><span class="pln">php </span><span class="pun">/</span><span class="pln"> 
  </span><span class="typ">Plugin</span><span class="pln"> </span><span class="typ">Name</span><span class="pun">:</span><span class="pln"> </span><span class="typ">My</span><span class="pln"> </span><span class="typ">Featured</span><span class="pln"> </span><span class="typ">Content</span><span class="pln"> 
  </span><span class="typ">Version</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.0</span><span class="pln"> 
  </span><span class="typ">Plugin</span><span class="pln"> URI</span><span class="pun">:</span><span class="pln"> http</span><span class="pun">:</span><span class="com">//danielpataki.com </span><span class="pln">
  </span><span class="typ">Description</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Allows</span><span class="pln"> you to </span><span class="kwd">add</span><span class="pln"> an arbitrary featured item to the sidebar</span><span class="pun">.</span><span class="pln"> </span><span class="typ">Includes</span><span class="pln"> a title</span><span class="pun">,</span><span class="pln"> image</span><span class="pun">,</span><span class="pln"> description   </span><span class="kwd">and</span><span class="pln"> a link</span><span class="pun">.</span><span class="pln"> 
  </span><span class="typ">Author</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Daniel</span><span class="pln"> </span><span class="typ">Pataki</span><span class="pln"> </span><span class="typ">Author</span><span class="pln"> 
  URI</span><span class="pun">:</span><span class="pln"> http</span><span class="pun">:</span><span class="com">//danielpataki.com/ / </span></pre>

<p>
	حتى الآن نكون قد أنشأنا إضافة جديدة بأسلوبٍ صحيح تمامًا بحيث تظهر لدينا إلى جانب الإضافات الأخرى في لوحة تحكم WordPress بذات الأسلوب المعروف باستثناء أنها لا تحمل أية وظيفة بعد.
</p>

<h2 id="-">
	مكونات الودجت
</h2>

<p>
	إنشاء ودجت لمنصة ووردبريس يتم عبر أربع خطوات:
</p>

<ul>
	<li>
		بدء وإعداد الودجت.
	</li>
	<li>
		العمل على البنية التحتيّة backend للودجت.
	</li>
	<li>
		استكمال البنية التحتيّة للودجت وإضافة ما يلزمها من قواعد معالجة rules for processing.
	</li>
	<li>
		إضافة واجهة رسومية <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A3%D9%85%D8%A7%D9%85%D9%8A%D8%A9-frontend-web-development/" rel="">frontend </a>تدير تعامل المُستخدم مع الودجت. 
	</li>
</ul>

<p>
	جميع هذه الخطوات تُترجم عمليًا على شكل دوال functions محدّدة، لنلقي نظرة على المخطط العام للخطوات الأربع السابقة برمجيًا:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style=""><span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'widgets_init'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mfc_init'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> 

</span><span class="kwd">function</span><span class="pln"> mfc_init</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
  register_widget</span><span class="pun">(</span><span class="pln"> </span><span class="str">'mfc_widget'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln"> 

</span><span class="kwd">class</span><span class="pln"> mfc_widget </span><span class="kwd">extends</span><span class="pln"> WP_Widget </span><span class="pun">{</span><span class="pln"> 
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    </span><span class="com">// Basic widget details </span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> 
  
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> widget</span><span class="pun">(</span><span class="pln">$args</span><span class="pun">,</span><span class="pln"> $instance </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    </span><span class="com">// Widget output in the front end </span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> 
      
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> update</span><span class="pun">(</span><span class="pln"> $new_instance</span><span class="pun">,</span><span class="pln"> $old_instance </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    </span><span class="com">// Form saving logic - if needed </span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> 
  
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> form</span><span class="pun">(</span><span class="pln"> $instance </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    </span><span class="com">// Backend Form </span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">}</span></pre>

<p>
	وكما ترى فإننا أنشأنا فئة ممتدة class extending باسم WP_Widget، إذا لم يكن لديك فكرة عن معنى ذلك؛ فلا تقلق، إذ لا يلزمك هنا معرفة البرمجة الشيئيّة في PHP، كل ما يلزمنا حتى الآن هو بدء إعداد الودجت بشكل صحيح من خلال الفئة السابقة. انتبه أيضًا إلى أننا ضمنّا الدالة <span style="font-family:courier new,courier,monospace;">()mfc_init</span> داخل الحدث<span style="font-family:courier new,courier,monospace;"> widgets_init</span>، ومن خلال هذه الدالة نستخدم دالة أخرى هي <span style="font-family:courier new,courier,monospace;">()register_widget</span> لبدء إعداد الودجت بتمرير اسم الفئة <span style="font-family:courier new,courier,monospace;">mfc_widget</span> لها. الأحرف الثلاثة الأولى في اسم الفئة "mfc" تشير إلى "My Featured Content"، يدعى هذا القسم بـ "بادئة اسم الدالة" function prefixing" ويهدف إلى إنشاء الدوال بأسماء مميزة تمامًا درءًا لمشكلة التعارض بين أسماء الدوال المستخدمة في مختلف الإضافات. نودّ الإشارة هنا أيضًا إلى الفرق بين ما يسمى بـ "الطريقة" method و"الخاصيّة" property، "الطريقة" هي دالة مضمّنة ضمن فئة class أو شيء object، فإذا أنشأنا الدالة خارج فئة أسميناها "دالة"، بينما نطلق عليها اسم "طريقة" فيما لو وضعت ضمن فئة، وتسمى المتغيرات Variables المعرّفة ضمن فئة ما بـ"الخصائص" properties. حاليًا لا يوجد أهمية على التفريق بينهما، إلا أنه من الجيد أن ترتب مفاهيمك بشكل صحيح.
</p>

<h3 id="-">
	بنية الودجت
</h3>

<p>
	الطريقة <span style="font-family:courier new,courier,monospace;">()__construct</span> تضم بعض المعلومات الأساسيّة حول الودجت، والتي تحدّد الفئة WP_Widget جزءًا كبيرًا منها. عن طريق إضافة النصّ التالي إلى بنية الودجت، ستظهر الأخيرة ضمن لوحة إدارة الودجات في ووردبريس:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="pln">$widget_details </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'classname'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'mfc_widget'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'description'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln">h </span><span class="str">'Creates a featured item consisting of a title, image, description and link.'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> 
parent</span><span class="pun">::</span><span class="pln">__construct</span><span class="pun">(</span><span class="pln"> </span><span class="str">'mfc_widget'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Featured Item Widget'</span><span class="pun">,</span><span class="pln"> $widget_details </span><span class="pun">);</span><span class="pln"> </span></pre>

<h3 id="-">
	نموذج البنية التحتيّة
</h3>

<p>
	عندما يسحب المستخدم الودجت الخاصة بنا إلى الشريط الجانبي ستُعرض الودجت مع نموذج صغير لإعدادها، في مثالنا هذا نحتاج إلى الحقول التالية ضمن نموذج الودجت: العنوان، الشرح، عنوان الرابط، مسار الرابط (كما ذكرنا سنؤجّل إضافة الصورة إلى مرحلة لاحقة). في الأسفل النموذج النهائي للطريقة ()form، قد تبدو طويلة جدًا، لكن لا داعي للخوف؛ فسنشرح كل شيء بالتفصيل:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> form</span><span class="pun">(</span><span class="pln"> $instance </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
  $title </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln"> 
  </span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln">empty</span><span class="pun">(</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'title'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    $title </span><span class="pun">=</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'title'</span><span class="pun">];</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln"> 

  $description </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln"> 

  </span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln">empty</span><span class="pun">(</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'description'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    $description </span><span class="pun">=</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'description'</span><span class="pun">];</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln"> 

  $link_url </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln"> 

  </span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln">empty</span><span class="pun">(</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'link_url'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    $link_url </span><span class="pun">=</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'link_url'</span><span class="pun">];</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln"> 

  $link_title </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln"> 

  </span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln">empty</span><span class="pun">(</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'link_title'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    $link_title </span><span class="pun">=</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'link_title'</span><span class="pun">];</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">?&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln"> 
    &lt;label for="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_name</span><span class="pun">(</span><span class="pln"> </span><span class="str">'title'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">"&gt;
        </span><span class="pun">&lt;?</span><span class="pln">php _e</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Title:'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
    </span><span class="tag">&lt;/label&gt;</span><span class="pln"> 
    &lt;input class="widefat" id="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_id</span><span class="pun">(</span><span class="pln"> </span><span class="str">'title'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" name="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln">get_field_name</span><span class="pun">(</span><span class="pln"> </span><span class="str">'title'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" type="text" value="</span><span class="pun">&lt;?</span><span class="pln">php echo esc_attr</span><span class="pun">(</span><span class="pln"> $title </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" /&gt; 
</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln"> 
    &lt;label for="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_name</span><span class="pun">(</span><span class="pln"> </span><span class="str">'description'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">"&gt;</span><span class="pun">&lt;?</span><span class="pln">php _e</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Description:'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/label&gt;</span><span class="pln">    
    &lt;textarea class="widefat" id="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_id</span><span class="pun">(</span><span class="pln"> </span><span class="str">'description'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" name="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_name</span><span class="pun">(</span><span class="pln"> </span><span class="str">'description'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" type="text" &gt;</span><span class="pun">&lt;?</span><span class="pln">php echo esc_attr</span><span class="pun">(</span><span class="pln"> $description </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/textarea&gt;</span><span class="pln"> </span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln"> 
    &lt;label for="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_name</span><span class="pun">(</span><span class="pln"> </span><span class="str">'link_url'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">"&gt;</span><span class="pun">&lt;?</span><span class="pln">php _e</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Link URL:'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/label&gt;</span><span class="pln"> 
    &lt;input class="widefat" id="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_id</span><span class="pun">(</span><span class="pln"> </span><span class="str">'link_url'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" name="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_name</span><span class="pun">(</span><span class="pln"> </span><span class="str">'link_url'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" type="text" value="</span><span class="pun">&lt;?</span><span class="pln">php echo esc_attr</span><span class="pun">(</span><span class="pln"> $link_url </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" /&gt; 
</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln"> 
    &lt;label for="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_name</span><span class="pun">(</span><span class="pln"> </span><span class="str">'link_title'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">"&gt;</span><span class="pun">&lt;?</span><span class="pln">php _e</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Link Title:'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/label&gt;</span><span class="pln"> 
    &lt;input class="widefat" id="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_id</span><span class="pun">(</span><span class="pln"> </span><span class="str">'link_title'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" name="</span><span class="pun">&lt;?</span><span class="pln">php echo $this</span><span class="pun">-&gt;</span><span class="pln">get_field_name</span><span class="pun">(</span><span class="pln"> </span><span class="str">'link_title'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" type="text" value="</span><span class="pun">&lt;?</span><span class="pln">php echo esc_attr</span><span class="pun">(</span><span class="pln"> $link_title </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" /&gt; 
</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	 يبدو النصّ البرمجي السابق طويلًا لاستخدامنا أربع حقول كما أسلفنا، حيث بدأنا بالإعلان عن قيمة كل حقل، المتغيّر<span style="font-family:courier new,courier,monospace;"> instance$</span> يضم القيم الافتراضية للحقول تحسبًا لتركها فارغة من قبل المستخدم، ثم أنشأنا لكل حقل عنصرين، مربع لإدخال النصّ المطلوب وعنوان له label يوضّح وظيفته، استخدمنا برمجيًا لذلك كل من دالة <span style="font-family:courier new,courier,monospace;">()get_field_name</span> ودالة <span style="font-family:courier new,courier,monospace;">()get_field_id</span>. قد يتساءل هنا البعض؛ لماذا استخدمنا دوال للحقول الأربع بدل كتابة الأسماء والقيم بأنفسنا مباشرة؟ يعود ذلك لتجنب التعارض فيما إذا كان هناك ودجات مشابهة مستخدمة، وهكذا يتولى ووردبريس بآلياته الداخلية إدارة ذلك بشكل تلقائي. عنصر الإدخال الأخير يحمل الاسم link_url بدلًا من link فحسب. هذه هي الطريقة التي يعالج بها ووردبريس وجود مساحة متعدّدة للودجات، وأشرطة جانبية متعددة، وودجات متعددة. الكود السابق يجب أن يظهر على شكل نموذج ضمن قسم الودجات، والذي يمكن استخدامه لملئ الودجت بالمعلومات المطلوبة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/2_wihout_img.png.d01bd4c82aeff2a68aeae3d45b2fbeac.png" data-fileid="2677" data-fileext="png" rel=""><img alt="2_wihout_img.thumb.png.4d802f8ff1d8b2a40" class="ipsImage ipsImage_thumbnailed" data-fileid="2677" src="https://academy.hsoub.com/uploads/monthly_2015_06/2_wihout_img.thumb.png.4d802f8ff1d8b2a40a677cb07732aaa6.png"></a>
</p>

<h2 id="-">
	معالجة بيانات النموذج
</h2>

<p>
	تستخدم الدالة<span style="font-family:courier new,courier,monospace;"> ()update</span> للإعلان عن أية أحداث نرغب بتنفيذها قبل حفظ بيانات النموذج السابق، تشكّل الخلاصات RSS مثالًا جيدًا على ذلك، فعندما تُدخِل رابط rss وتحفظه، ستظهر لك آخر المقالات المنشورة، يمكن استخدام هذه الدالة أيضًا للتحقق من البيانات (فيما إذا كانت أرقامًا أو أحرفًا أو ما شابه،  تبعًا للمطلوب)، أو للتحقق من صحة كتابة الروابط الخ... في الحقيقة نحن لا نحتاج إلى أي شيء هنا؛ لذا فإن دالتنا الأخيرة ستكون على الشكل التالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style=""><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> update</span><span class="pun">(</span><span class="pln"> $new_instance</span><span class="pun">,</span><span class="pln"> $old_instance </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
  </span><span class="kwd">return</span><span class="pln"> $new_instance</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln"> </span></pre>

<h2 id="-">
	عرض الودجت
</h2>

<p>
	تعرض الدالة <span style="font-family:courier new,courier,monospace;">()widget</span> الودجت الخاصة بنا، يمكننا هنا إضافة وسوم HTML لتظهر على الشريط الجانبي. تأخذ هذه الدالة محدّدين Arguments؛ يحتوي الأول على بيانات متعلقة بمنطقة تموضع الودجت، بينما يضم الآخر القيم الافتراضية لمتغيرات الودجت. يتم إعداد منطقة تموضع الودجت بتعريف عدد من المعاملات Parameters، أهمها المحتوى قبل وبعد الودجت، وقبل وبعد عنوان الودجت. للتأكّد من توافق الودجت مع منصة ووردبريس ومع الإضافات الأخرى يمكنك استخدام الإطار التالي عندما تنشئ إضافة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4" style=""><span class="pln">echo $args</span><span class="pun">[</span><span class="str">'before_widget'</span><span class="pun">];</span><span class="pln"> 
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln"> empty</span><span class="pun">(</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'title'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    echo $args</span><span class="pun">[</span><span class="str">'before_title'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> apply_filters</span><span class="pun">(</span><span class="pln"> </span><span class="str">'widget_title'</span><span class="pun">,</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'title'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">).</span><span class="pln"> $args</span><span class="pun">[</span><span class="str">'after_title'</span><span class="pun">];</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln"> 
</span><span class="com">// Rest of the widget content </span><span class="pln">
echo $args</span><span class="pun">[</span><span class="str">'after_widget'</span><span class="pun">];</span></pre>

<p>
	داخل هذا الإطار نضيف قيمة حقل "الوصف" وحقل "الرابط" والذين حصلنا عليهما من حقلي link_url و link_title، شيء كهذا:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'mfc-description'</span><span class="tag">&gt;</span><span class="pln"> 
  </span><span class="pun">&lt;?</span><span class="pln">php echo wpautop</span><span class="pun">(</span><span class="pln"> esc_html</span><span class="pun">(</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'description'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln"> 
</span><span class="tag">&lt;/div&gt;</span><span class="pln">

</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'mfc-link'</span><span class="tag">&gt;</span><span class="pln"> 
  &lt;a href='</span><span class="pun">&lt;?</span><span class="pln">php echo esc_url</span><span class="pun">(</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'link_url'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">'&gt;
    </span><span class="pun">&lt;?</span><span class="pln">php echo esc_html</span><span class="pun">(</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'link_title'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
  </span><span class="tag">&lt;/a&gt;</span><span class="pln"> 
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	لا تنسَ أخيرًا استخدام دالة الهروب escaping functions والتي ستحمي البيانات قبل تقديمها للمستخدم. للمزيد حول هذا الموضوع يمكنك قراءة <a href="https://premium.wpmudev.org/blog/wp-content/uploads/2015/02/my-featured-content.zip" rel="external nofollow">المقال التالي</a> من مركز WordPress Codex.
</p>

<h2 id="-">
	إضافة صورة
</h2>

<p>
	عند البحث عن أسلوب لإضافة صورة إلى الودجت فسنحصل على عدد من الطرق لفعل ذلك، والذي يتطلب بالحدّ الأدنى معرفة أساسيات التعامل مع JS و CSS حيث سنحتاج إلى معرفة كيفية إضافة هذه الأكواد إلى الودجت خاصتنا، ما سنستخدمه هنا هو دالة إدارة الوسائط المُقدّمة من ووردبريس، حيث لا داعي لإعادة اختراع العجلة. إذا كنتَ لا تزال ترغب في بناء دالتك الخاصة، فإن أسلوب العمل لتضمين نصوص JS و CSS متشابهٌ تقريبًا. نحن بحاجة إلى تضمن بعض الأكواد تمامًا كما لو كنا نعمل على الواجهة المرئية للودجت أو في لوحة إدارة ووردبريس، تعريف هذا الحدث يتم ضمن بنية الدالة بإضافة السطر التالي: 
</p>

<pre class="javascript ipsCode prettyprint prettyprinted" data-pbcklang="javascript" data-pbcktabsize="4" style=""><span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'admin_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> $this</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mfc_assets'</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span></pre>

<p>
	إذا لم يكن لديك معرفة بالبرمجة الشيئية مع PHP فقد تختلط عليك الأمور قليلًا هنا، البارامتر الثاني للدالة<span style="font-family:courier new,courier,monospace;"> ()add_action</span> عادةً ما يكون سلسلة string تشير إلى الدالة المطلوبة، نفس الشيء يحدث هنا لكننا نبيّن أننا نريد الدالة<span style="font-family:courier new,courier,monospace;"> ()mfc_assets</span> محليًا ضمن الفئة التي أنشأناها، وليس دالة بمجال عام global scope. الخطوة التالية هي إنشاء الدالة<span style="font-family:courier new,courier,monospace;"> ()mfc_assets </span>داخل الفئة، ومن ثم إدراج نصوص JS و CSS اللازمة بداخلها:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> mfcassets</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    wpenqueue_script</span><span class="pun">(</span><span class="str">'media-upload'</span><span class="pun">);</span><span class="pln"> 
    wp_enqueue_script</span><span class="pun">(</span><span class="str">'thickbox'</span><span class="pun">);</span><span class="pln"> 
    wp_enqueue_script</span><span class="pun">(</span><span class="str">'mfc-media-upload'</span><span class="pun">,</span><span class="pln"> plugin_dir_url</span><span class="pun">(</span><span class="pln">__FILE</span><span class="pun">)</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'mfc-media-upload.js'</span><span class="pun">,</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'jquery'</span><span class="pln"> </span><span class="pun">))</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> 
    wp_enqueue_style</span><span class="pun">(</span><span class="str">'thickbox'</span><span class="pun">);</span><span class="pln"> 
</span><span class="pun">}</span></pre>

<p>
	كما ترى، فإننا أضفنا كلًا من <span style="font-family:courier new,courier,monospace;">media-upload</span> و <span style="font-family:courier new,courier,monospace;">thickbox</span> وهي سكربتات JS مُقدّمة من ووردبريس تدير تعامل المستخدم مع الوسائط، كما أضفنا السكربت الخاص بنا <span style="font-family:courier new,courier,monospace;">mfc-media-upload.js</span>، وهو ملف بسيط للغاية يدير عملية رفع الصور (سنتكلم عن ذلك بعد قليل)، أخيرًا وليس آخرًا أضفنا ملف التصميم CSS المطلوب من قبل الدالة thickbox. سنعود الآن خطوة إلى الوراء لتعديل عملنا السابق بإضافة حقل إضافة الصورة، حيث سيلزمنا معرفة قيمة حقل الصورة، وخرج عنصر التحكم بها، تمامًا كما فعلنا من قبل:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="pln">$image </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln"> 
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$instance</span><span class="pun">[</span><span class="str">'image'</span><span class="pun">]))</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    $image </span><span class="pun">=</span><span class="pln"> $instance</span><span class="pun">[</span><span class="str">'image'</span><span class="pun">];</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln">
</span><span class="str">&lt;p&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">label </span><span class="kwd">for</span><span class="pun">=</span><span class="str">"&lt;?php echo $this-&gt;get_field_name( 'image' ); ?&gt;"</span><span class="pun">&gt;&lt;?</span><span class="pln">php _e</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Image:'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;&lt;/</span><span class="pln">label</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">input name</span><span class="pun">=</span><span class="str">"&lt;?php echo $this-&gt;get_field_name( 'image' ); ?&gt;"</span><span class="pln"> id</span><span class="pun">=</span><span class="str">"&lt;?php echo $this-&gt;get_field_id( 'image' ); ?&gt;"</span><span class="pln"> </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"widefat"</span><span class="pln"> type</span><span class="pun">=</span><span class="str">"text"</span><span class="pln"> size</span><span class="pun">=</span><span class="str">"36"</span><span class="pln"> </span><span class="kwd">value</span><span class="pun">=</span><span class="str">"&lt;?php echo esc_url( $image ); ?&gt;"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">input </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"upload_image_button"</span><span class="pln"> type</span><span class="pun">=</span><span class="str">"button"</span><span class="pln"> </span><span class="kwd">value</span><span class="pun">=</span><span class="str">"Upload Image"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="pln">p</span><span class="pun">&gt;</span></pre>

<p>
	وكما ترى فإن عملنا هنا مشابه تمامًا لما سبق، الإضافة الوحيدة هي زر إدخال input مع الفئة upload_image_button. أنشئ الآن ملفًا جديدًا باسم <span style="font-family:courier new,courier,monospace;">mfc-media-upload.js</span>، سيضم هذا الملف نصّ جافا سكربت يعمل على إظهار مربع اختيار صورة عند الضغط على الزر، داخل الملف ضع الكود التالي:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="pln">jQuery</span><span class="pun">(</span><span class="pln">document</span><span class="pun">).</span><span class="pln">ready</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    $</span><span class="pun">(</span><span class="pln">document</span><span class="pun">).</span><span class="pln">on</span><span class="pun">(</span><span class="str">"click"</span><span class="pun">,</span><span class="pln"> </span><span class="str">".upload_image_button"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        jQuery</span><span class="pun">.</span><span class="pln">data</span><span class="pun">(</span><span class="pln">document</span><span class="pun">.</span><span class="pln">body</span><span class="pun">,</span><span class="pln"> </span><span class="str">'prevElement'</span><span class="pun">,</span><span class="pln"> $</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">).</span><span class="pln">prev</span><span class="pun">());</span><span class="pln">
        window</span><span class="pun">.</span><span class="pln">send_to_editor </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">html</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
             </span><span class="kwd">var</span><span class="pln"> imgurl </span><span class="pun">=</span><span class="pln"> jQuery</span><span class="pun">(</span><span class="str">'img'</span><span class="pun">,</span><span class="pln">html</span><span class="pun">).</span><span class="pln">attr</span><span class="pun">(</span><span class="str">'src'</span><span class="pun">);</span><span class="pln"> </span><span class="kwd">var</span><span class="pln"> inputText </span><span class="pun">=</span><span class="pln"> jQuery</span><span class="pun">.</span><span class="pln">data</span><span class="pun">(</span><span class="pln">document</span><span class="pun">.</span><span class="pln">body</span><span class="pun">,</span><span class="pln"> </span><span class="str">'prevElement'</span><span class="pun">);</span><span class="pln">

             </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">inputText </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">undefined</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> inputText </span><span class="pun">!=</span><span class="pln"> </span><span class="str">''</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> inputText</span><span class="pun">.</span><span class="pln">val</span><span class="pun">(</span><span class="pln">imgurl</span><span class="pun">);</span><span class="pln"> 
        </span><span class="pun">}</span><span class="pln">

        tb_remove</span><span class="pun">();</span><span class="pln"> 
     </span><span class="pun">};</span><span class="pln">
tb_show</span><span class="pun">(</span><span class="str">''</span><span class="pun">,</span><span class="pln"> </span><span class="str">'media-upload.php?type=image&amp;TB_iframe=true'</span><span class="pun">);</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln"> </span><span class="pun">});</span><span class="pln"> 
</span><span class="pun">});</span></pre>

<p>
	بعد تحديد الصورة سيُمرر رابط الصورة إلى عنصر الإدخال السابق input element كي يحفظ. أخيرًا ينبغي تمرير قيمة الحقل لإظهار الصورة ضمن الودجت:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style=""><span class="tag">&lt;p&gt;</span><span class="pln"> &lt;img src='</span><span class="pun">&lt;?</span><span class="pln">php echo $instance</span><span class="pun">[</span><span class="str">'image'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">'&gt; </span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	النتيجة النهائية ينبغي أن تكون شيئًا مشابها لما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/3_final_befor_wok.png.eafeda82dfc76aa1e6b50fc13ef104f0.png" data-fileid="2678" data-fileext="png" rel=""><img alt="3_final_befor_wok.thumb.png.2764cc54f597" class="ipsImage ipsImage_thumbnailed" data-fileid="2678" src="https://academy.hsoub.com/uploads/monthly_2015_06/3_final_befor_wok.thumb.png.2764cc54f597c8868b6412fa5ac21f29.png"></a>
</p>

<h2 id="-">
	خاتمة
</h2>

<p>
	كما ترى فإن كتابة ودجت ووردبريس ليست بالشيء الصعب، كتجربة أولى سيأخذ ذلك منك بعض الوقت، لكن مع الممارسة ستصبح العملية أبسط ولن تستغرق أكثر من 20 دقيقة على أبعد تقدير. إنها مهارة مهمة و تعطي موقعك الكثير من التميّز والتفرّد، إضافةً إلى تخفيف العبء بعض الشيء عن مطوريّ الوِب بإدارتك للشريط الجانبي ذاتيًا. إذا كنتَ تودّ الإطلاع على كامل الكود يمكنك تحميل المثال الذي كتبتُه لهذا الدرس <a href="https://premium.wpmudev.org/blog/wp-content/uploads/2015/02/my-featured-content.zip" rel="external nofollow">من هنا</a>، كما يمكنك تركيبه على منصة ووردبريس لموقعك، لكن لا تنسَ أن تطلع على الكود وتحاول أن تتعلم منه بعض الأشياء كذلك.
</p>

<p>
	 ما هي الاستخدامات التي تفكّر بها لهذه الودجت؟ دعنا نطلع على أفكارك في التعليقات.
</p>

<p>
	 تُرجم وبتصرف من المقال <a href="https://premium.wpmudev.org/blog/featured-content-widget/" rel="external nofollow">Creating a Featured Content Widget – With its Own Image Uploader</a> لصاحبه Daniel Pataki.
</p>
]]></description><guid isPermaLink="false">99</guid><pubDate>Mon, 15 Jun 2015 19:41:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x62A;&#x637;&#x648;&#x64A;&#x631; &#x642;&#x648;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x625;&#x637;&#x627;&#x631; underscores</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A5%D8%B7%D8%A7%D8%B1-underscores-r86/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_05/underscore.png.765ce522dc871c44ec13abd030b5294a.png" /></p>

<p>الانتشار الكبير في استخدام لغات تصميم الويب أدى إلى ظهور بعض إطارات العمل (Frameworks) الجاهزة التي تسهل وتسرع عملية تطوير الواجهات كذلك فإن الانتشار الواسع لووردبريس والطلب الكبير لقوالبه دفع بعض المطورين والشركات إلى تطوير العديد من الأدوات الجاهزة التي تسهل بصورة أو أخرى عملية تطوير قوالب ووردبريس، إحدى هذه الأدوات الجيدة جدا هي <a rel="external nofollow" href="http://underscores.me/">قالب Underscores _s</a> والذي يتمتع بمجموعة من المميزات (كما سنرى) تجعله من أفضل الأدوات المعينة لمطور قوالب ووردبريس. وفي هذا المقال سنتعرف على بعض مميزات قالب _s  وطريقة استخدامه والاستفادة منه، لكن دعنا في الأول نلقي نظرة سريعة على  بعض الأدوات المتاحة لمطوري قوالب ووردبريس (من قبل شركات أو مطورين أخرين) وأنواعها وفي أي الأنواع يمكن تصنيف قالب Underscores _s.</p><h2>أطر عمل قوالب ووردبريس WordPress Theme Frameworks</h2><p>أتذكر أنه عند بداية دراستي لتطوير قوالب ووردبريس شكل هذا المصطلح بعض الصعوبة بالنسبة لي ليس لأنه يحتوي على كلمة إطار عمل (Framework) فقط بل لأنه في مجتمع ووردبريس يطلق هذا المصطلح على عدة معاني حيث يختلف المعنى الذي يستخدم لأجله من بعض المطورين، لذا دعنا نحاول تجنيبك الوقوع في مثل هذا الإشكال بتعريف مبسط لكلمة إطار عمل وكذلك الإشارة الى بعض المعاني التي تستخدم لها هذه الكلمة في مجتمع ووردبريس.</p><h3><b>التعريف المبسط لإطار العمل </b><b>Framework</b><b> في مجال تطوير الويب</b></h3><p>هو عبارة عن مجموعة من الأدوات الجاهزة (عادة شيفرات برمجية) تؤدي بعض المهام الشائعة وتغنيك هذه الإطارات من كتابة هذه الشيفرات بنفسك. بالطبع فإن التعريف يمكن أن يكون أعم من ذلك لكن هذا ما نحتاجه في هذا المقال.</p><h3>إطارات عمل قوالب ووردبريس Themes Framework</h3><p>يطلق هذا المصطلح عادة على أربعة معاني في مجتمع ووردبريس (موقع ووردبريس الرسمي ذكر ثلاثة ودعني أضيف لها رقم 2 في قائمتنا هذه).</p><ol><li><strong>القالب الأب Parents Themes (البعض يطلق عليها Themes Framework)</strong> هذا النوع من الأدوات عبارة عن قالب جاهز يمكنك الاستفادة منه من خلال صنع قالبك <a rel="external nofollow" href="https://codex.wordpress.org/Child_Themes">كقالب ابن Child Theme</a> له وذلك بالاستفادة من هذه الميزة (القالب الابن) التي يوفرها ووردبريس. عادة عند إطلاق كلمة إطار عمل قوالب Themes Framework فإن المقصود هو هذا النوع من القوالب، ومن أشهر هذه القوالب هو إطار العمل Genesis ومن الإطارات ذات التطوير العربي هنالك <a rel="external nofollow" href="https://github.com/nash-ye/Momtaz-Framework">إطار العمل ممتاز</a>  وليس المقام هنا لسرد القوالب المتوفرة تحت هذا النوع من الأدوات.</li><li><strong>إطارات عمل لوحة تحكم القوالب Theme Options Framework</strong> هذا النوع من الأدوات كما يظهر من أسمه يستخدم لتسهيل مهمة إنشاء لوحة تحكم للقالب فهو يسهل عملية إضافة واسترجاع خيارات القالب وعادة ما يوفر مجموعة من الحقول المتقدمة التي تتطلب برمجتها بدونه بعض الوقت والجهد. البعض أيضا يطلق كلمة إطار عمل (هكذا بإطلاقها) على هذا النوع من الأدوات، ومن أشهر هذه الإطارات <a rel="external nofollow" href="http://reduxframework.com/">إطار عمل Redux</a>.</li><li><strong>المكتبات المساعدة Dropin Libarary </strong> هذه مجموعة من الملفات التي تقوم بتضمينها في قالبك للاستفادة من الدوال والأصناف الموجودة فيها وبالرغم من أن كثير من إطارات عمل لوحة التحكم يمكنها العمل بنفس الطريقة (تضمين ملفاتها في قالبك) لكن هذه المكتبات توفر عادة أكثر من مجرد تسهيل لعمل لوحة التحكم بل تتيح لك المزيد من التسهيلات فيما يتعلق بتطوير القالب ككل. من هذه المكتبات <a rel="external nofollow" href="http://themehybrid.com/hybrid-core">إطار العمل Hyprid</a>.</li><li><strong>القالب الابتدائي Starter Theme </strong> عبارة عن قالب جاهز بنسبة كبيرة تقوم بتطوير قالبك بالتعديل عليه مباشرة لا عن طريق استخدام قالب ابن كما في الرقم 1 من هذه القائمة، ويوفر هذا القالب عادة التركيبة الأساسية لملفات قوالب ووردبريس وبعض الدوال والإعدادات الأساسية للقالب بحيث يجعل المصمم يركز على التصميم (CSS) أو تحويل التصميم الجاهز. قالب Underscores والذي نحن بصدد التعرف عليه يقع تحت هذا النوع من إطارات العمل وتستطيع استخدامه في تطوير قالبك من الخلال التعديل المباشر عليه كما سنرى لاحقا إن شاء الله.</li></ol><h2>مميزات قالب Underscores</h2><p>هنالك عدة مميزات تجعل من الجيد إختيار هذا القالب كنقطة بداية لتطوير قالبك، ومن هذه المميزات:</p><ul><li>القالب مفتوح المصدر ومطور من قبل مجموعة من المبرمجين المحترفين وعلى رأس التطوير <a rel="external nofollow" href="http://automattic.com/">شركة Automatic</a> الراعية لووردبريس، وهذا يضمن لك توافقية عالية بين ووردبريس وقالب Underscores وكذلك احترافية في تطويره.</li><li>القالب يعتمد على HTML5 كما أنه موثق بصورة جيدة ويحتوي على نسبة مناسبة من الشيفرات (بالتالي لن تفقد الكثير من الأساسيات الموجودة في أي قالب كما أنك لن تضطر لمسح الكثير من الشيفرات).</li><li>يحتوي على مثال لتطبيق خاصية الترويسة المخصصة Custom header التي يوفرها ووردبريس.</li><li>مجموعة مخصصة من وسوم القالب Template Tags (يشير هذا المصطلح الى مجموعة من الدوال تستخدم في جلب بيانات المقال) يمكنك استخدامها لتجنب تكرار الشيفرات البرمجية.</li><li>مجموعة من تنسيقات CSS الأساسية تحتوي على توضيح لبعض فئات العناصر CSS Classes التي يولدها ووردبريس.</li><li>يتبع الCoding standard الخاصة بووردبريس وموثق بصورة ممتازة، حيث يمكنك أن تتعلم الكثير منه.</li><li>مجموعة من الدوال والإعدادات الأساسية في ملف functions.php.</li><li>يشجع على استخدام مخصص القوالب Theme Customizer وهذا أمر مهم جدا خصوصا وأنه قبل أيام قليلة من نشر هذا المقال <a rel="external nofollow" href="https://make.wordpress.org/themes/2015/04/21/this-weeks-meeting-important-information-regarding-theme-options/">أصبح إستخدام مخصص القوالب لإعدادات القالب أمر إجباري</a> لكل القوالب في مستودع القوالب الخاص بووردبريس وهذا قد يشير إلى توجه في مجتمع ووردبريس نحو المخصص ومحاولة جعلها Standerd في مسألة خيارات القالب، ولذلك في نهاية هذه السلسلة سنلقي نظرة إلى طريقة إستخدام مخصص القوالب في خيارات القالب.</li></ul><h2>طريقة استخدام Underscores</h2><p>في البداية عليك التوجه <a rel="external nofollow" href="http://underscores.me/">لموقع القالب</a> وقم بكتابة اسم القالب الذي تود تطويره في الخانة المخصصة ويمكنك الضغط على Advanced Options لإدخال المزيد من الخيارات مثل اسم المطور ورابط موقعه ووصف القالب، وسيقوم الموقع باستخدام هذه المعلومات ويولد لك القالب والذي سيبدأ التحميل مباشرة فور الضغط على Generate. طبعا ستجد أن المعلومات التي قمت بكتابتها تم استخدامها في الترويسة الأساسية للقالب والموجودة في ملف style.css وكذلك في اسم مجلد القالب. بعد ذلك يمكنك تنصيب القالب على الموقع الذي قمت بإعداده لتطوير القالب ومن الجيد أن تقوم بفتح مجلد القالب على محرر الشيفرات المفضل بالنسبة لك حتى تتابع معنا شرح بعض خصائص القالب.  </p><h3>التركيبة الأساسية للقالب (المجلدات والملفات)</h3><p>ستلاحظ أن مجلد القالب يحتوي على الملفات الأساسية لقوالب ووردبريس وهي:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">Style.css, index.php, functions.php, single.php, page.php, archive.php, search.php, 404.php, header.php, footer.php, sidebar.php, comments.php, rtl.css </pre><p>بالإضافة الى مجموعة من الملفات التي يبدأ اسمها بـ content وهي:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">Content.php, content-single.php, content-page.php, content-search.php, content-none.php</pre><p>وهذه الملفات تستخدم لوضع محتويات الحلقة The Loop لبعض ملفات القالب الأساسية التي تحتوي على حلقة لجلب المقالات مثل ملف single.php مثلا، حيث يتم تضمين ملف conent المناسب (مثلا <span style="font-family:courier new,courier,monospace;">content-single.php</span>) في ملف القالب المناسب (<span style="font-family:courier new,courier,monospace;">single.php</span>) من خلال إستخدام <a rel="external nofollow" href="https://codex.wordpress.org/Function_Reference/get_template_part">الدالة get_template_part</a> وتستخدم بهذه الطريقة:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">&lt;?php get_template_part( 'content', 'single' ); ?&gt; </pre><p>حيث أن المعامل الأول للدالة هو بداية اسم الملف والمعامل الثاني هو نهايته (ما بعد الفاصلة) وهذا يوضح لك سبب تسمية الملفات التي تبدئ بـ content بهذه الطريقة. واستخدام هذه الدالة من الأمور الجيدة في هذا القالب <a rel="external nofollow" href="https://kovshenin.com/2013/get_template_part/">لما تتميز به من مميزات</a> وحتى تحافظ على مقروئية جيدة للشيفرة البرمجية فبدلا من وضع كل الشيفرات في ملف single.php او index.php يتم فصل محتويات الحلقة -والتي عادة ما تحتوي على الكثير من شيفرات html- في ملف لوحدها ثم تضمينها. وأيضا يمكنك استخدامها مع الدالة <span style="font-family:courier new,courier,monospace;">get_post_format</span> لتضمين الملفات اعتمادا على بنية المقال. من الملفات أيضا في المجلد الرئيسي للقالب ملف <span style="font-family:courier new,courier,monospace;">README.md</span> وصورة <span style="font-family:courier new,courier,monospace;">screenshot.png</span> ولا أظن أنهما يحتاجان إلى شرح.</p><h4><b>مجلد </b><b>inc</b></h4><p>هذا أو المجلدات التي سنتحدث عنها ، حيث يحتوي على خمسة ملفات الجامع بينها أنه يتم تضمينها داخل ملف function.php كما ترى في نهاية هذا الملف من خلال استخدام الدالة   بهذه الطريقة:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">require get_template_directory() . '/inc/template-tags.php'; </pre><p>حيث أن الدالة <span style="font-family:courier new,courier,monospace;">()get_template_directory</span> ترجع مسار القالب الحالي ومن الجيد استخدام دوال ووردبريس التي يوفرها فيما يتعلق بمسارات القالب، وهذه أحد الأشياء التي عليك تعلمها من قالب Underscores بالإضافة الى العديد من الممارسات الجديدة Best Practice الأخرى كما سنرى. تضمين هذه الملفات في ملف <span style="font-family:courier new,courier,monospace;">functions.php</span> بدلا عن كتابة كل الشيفرات الوظائفية الخاصة بالقالب في ملف <span style="font-family:courier new,courier,monospace;">functions.php</span> يجعل القالب أكثر تنظيما ويسهل التعديل عليه فيما بعد بالإضافة لفصل الدوال والشيفرات على حسب وظائفها. لاحقا سنتطرق الى تفاصيل بعض هذه الملفات بعد أن نلقي نظرة سريعة على ملف <span style="font-family:courier new,courier,monospace;">functions.php</span>، لكن الأن دعنا نكمل الاطلاع على تركيبة القالب.</p><h4>مجلد js</h4><p>واضح من اسمه أنه يحتوي على ملفات الجافا سكربت الخاصة بالقالب، وبه ثلاث ملفات سنطلع على وظائفها فيما الدرس القادم إن شاء الله. وبالطبع يمكنك إضافة ملفات جافا سكربت الخاصة بك في هذا المجلد. لاحظ أنك فيما بعد قد تحتاج لإضافة مجلد لملفات CSS واخر للصور وفي هذه الحالة ربما تفضل وضع هذين المجلدين مع مجلد js في مجلد جديد باسم assest أو static مثلا.</p><h4>بقية المجلدات</h4><p>كما تلاحظ هنالك أيضا مجلد language الذي به ملفات اللغة، وملف layout وهو يحتوي على ملفي CSS يستخدمان لتوفير خيارين في تخطيط الموقع، وملف sass وبه بعض الملفات المفيدة في حالة كنت <a href="https://academy.hsoub.com/code/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-sass-r8/">تستخدم SASS</a>.</p><h2>خاتمة </h2><p>كانت هذه مقدمة سريعة على أنواع الإطارات الخاصة بعمل قوالب ووردبريس، ونظرة على طريقة تحميل قالب _s وتركيبة الملفات والمجلدات فيه، وتبقى لنا الكثير لمعرفته حول قالب _s وإستخدامه في تطوير قوالب ووردبريس وهو ما سنتطرق إليه في المقالات القادمة من هذه السلسلة إن شاء الله.  </p>
]]></description><guid isPermaLink="false">86</guid><pubDate>Wed, 27 May 2015 20:30:00 +0000</pubDate></item><item><title>&#x635;&#x641; &#x648;&#x62A;&#x633;&#x62C;&#x64A;&#x644; &#x645;&#x644;&#x641;&#x627;&#x62A; Javascript &#x648; CSS &#x641;&#x64A; &#x642;&#x648;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%B5%D9%81-%D9%88%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D9%85%D9%84%D9%81%D8%A7%D8%AA-javascript-%D9%88-css-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r79/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_05/wp_enqueue_script.png.c5e360f430446a388eaf2c257c6310a4.png" /></p>

<div id="wmd-preview-section-17">
	<p>
		مرّ معنا أثناء إضافة أرقام الصفحات كيف أضفنا ملف CSS جديد عن طريق وضع بضعة أسطر في ملف <span style="font-family:courier new,courier,monospace;">functions.php</span> في ملفات القالب. سنتناول في هذا الدرس الشرح التفصيلي لهذه الآلية، وهي الطريقة الآمنة لإضافة ملفات JavaScript و CSS.
	</p>

	<p>
		فهرس السلسلة:
	</p>

	<ul>
<li>
			<a href="https://academy.hsoub.com/programming/php/wordpress/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-html-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r32/" rel="">مقدمة إلى تطوير قوالب ووردبريس: تحويل صفحة HTML إلى قالب ووردبريس</a>
		</li>
		<li>
			<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D9%8A%D8%AD-pagination-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r54/" rel="">التصفيح (Pagination) في قوالب ووردبريس</a>
		</li>
		<li>
			<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%91%D9%84-navigation-menu-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-wordpress-r68/" rel="">إضافة قوائم التنقل (Navigation Menu) إلى قالب ووردبريس</a>
		</li>
		<li>
			صف وتسجيل ملفات Javascript و CSS في قوالب ووردبريس (هذا الدرس)
		</li>
	</ul>
</div>

<div id="wmd-preview-section-18">
	<h2 id="ما-المقصود-بالصف">
		ما المقصود بالصف؟
	</h2>

	<p>
		هو وضع الملف في صفّ/دور/طابور (queue) لتقوم ووردبريس بمعالجته لاحقاً. تخيل أنك تضع الملف في دور/طابور شراء جهاز آي فون جديد مثلاً! <br>
		وعندما يحين موعد عرض الملفات، تقوم ووردبريس بمعالجة الصفّ ومتطلبات كل ملفّ فيه، ثم إعادة ترتيب الصف حسب المتطلبات، وأخيراً عرض الملفات في مكانها المناسب مع متطلباتها.
	</p>
</div>

<div id="wmd-preview-section-19">
	<h2 id="الخطوات-العامة">
		الخطوات العامة
	</h2>

	<p>
		سنعرض الآن الخطوات بشكل عام، ثم تفصيلها وطريقة استخدامها في الفقرة اللاحقة.
	</p>

	<p>
		لصفّ ملفٍّ ما، سواء كان ملف JavaScript أو CSS نحتاج إلى:
	</p>

	<ol>
<li>
			استخدام الحدث (action) المناسب.
		</li>
		<li>
			تسجيل الملف المراد استخدامه؛ حيث يجب استخدام معرّف (handle) للملف، مسار الملف، ويمكن تحديد متطلباته (dependencies) إن وُجدت.
		</li>
		<li>
			صفّ الملف (enqueue)؛ باستخدام المعرّف المُستخدم أثناء تسجيل الملف.
		</li>
	</ol>
</div>

<div id="wmd-preview-section-20">
	<h2 id="تسجيل-وصف-ملفات-css">
		تسجيل وصف ملفات CSS
	</h2>
</div>

<div id="wmd-preview-section-21">
	<h3 id="تسجيل-ملف-css">
		تسجيل ملف CSS
	</h3>

	<p>
		لتسجيل ملفٍّ جديد نقوم باستخدام دالّة <a href="https://codex.wordpress.org/Function_Reference/wp_register_style" rel="external nofollow">wp_register_style</a>، يمكن للدالّة أن تقبل المحدّدات التالية:
	</p>

	<ul>
<li>
			<span style="font-family:courier new,courier,monospace;">handle$</span>: مطلوب، هو المعرّف الخاص بالملف، الذي سيتم استخدامه عند صفّ الملف (enqueue).
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">src$</span>: مطلوب، هو رابط (URL) ملف CSS المطلوب تسجيله، مثل:<a href="http://example.com/css/mystyle.css" rel="external nofollow">http://example.com/css/mystyle.css</a>، لكن يجب ألا يتم استخدام الرابط بهذا الشكل، بل يجب أن يكون أكثر مرونة (التفصيل في الملاحظة بعد نهاية الفقرة).
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">deps$</span>: مصفوفة من المعرّفات، التي تمثّل متطلبات الملف الذي نقوم بتسجيله، كي يتم صفّها قبل صفّ الملف المُسجَّل. القيمة الافتراضية: مصفوفة فارغة <span style="font-family:courier new,courier,monospace;">()array</span>.
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">ver$</span>: إصدار الملف المُسجَّل، تقوم ووردبريس بوضعه كرقم بعد رابط الملف، على الشكل:custom.css?ver=123، إن لم يتم وضع قيمة لهذا المحدّد، فسيتم وضع إصدار ووردبريس الحالي بدلاً منه، لعدم وضع أي رقم نضع قيمة المحدّد null. القيمة الافتراضية:false.
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">media$</span>: قيمة حقل media الذي سيتم استخدامه مع وسم &lt;link&gt; أثناء صفّ الملف، القيمة الممكنة: all، screen، handheld، print. القيمة الافتراضية هي all.
		</li>
	</ul>
<p>
		<strong>ملاحظة هامة</strong>: عند تسجيل أو صفّ الملفات، يجب أن تكون الروابط مرنة، أي أن يتم استبدال اسم الموقع/النطاق عن طريق دوالّ ووردبريس. <br><strong>مثال خاطئ:</strong>
	</p>
</div>

<div id="wmd-preview-section-22">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'register_invalid_style'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> register_invalid_style</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_register_style</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-invalid-style'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://localhost/wp-content/themes/my-theme/css/custom.css'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		هل لاحظتم أنني وضعت المسار كاملاً؟ ترى هل سيعمل الرابط السابق إن قمنا باستخدام القالب على موقع على الإنترنت بدلاً من الموقع المحلّي؟ بالتأكيد لا!
	</p>

	<p>
		<strong>مثال صحيح:</strong>
	</p>
</div>

<div id="wmd-preview-section-23">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'register_valid_style'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> register_valid_style</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_register_style</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-valid-style'</span><span class="pun">,</span><span class="pln"> get_template_directory_uri</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/css/custom.css'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		تكون النتيجة في المتصفح مشابهة للتالي:
	</p>
</div>

<div id="wmd-preview-section-24">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">'stylesheet'</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'my-valid-style-css'</span><span class="pln">  </span><span class="atn">href</span><span class="pun">=</span><span class="atv">'http://localhost:8000/wp-content/themes/my-theme/css/custom.css?ver=4.2'</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">'text/css'</span><span class="pln"> </span><span class="atn">media</span><span class="pun">=</span><span class="atv">'all'</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

	<p>
		تقوم دالّة <a href="https://codex.wordpress.org/Function_Reference/get_template_directory_uri" rel="external nofollow">()get_template_directory_uri</a> بإرجاع رابط القالب الفعّال (active)، مثلاً: <a href="http://example.com/wp-content/themes/my-theme/" rel="external nofollow">http://example.com/wp-content/themes/my-theme</a>، بحيث يكون اسم النطاق حسب الموقع الحالي، ثم يقوم المطوّر بإضافة مسار الملّف الذي يريده بعد رابط القالب الفعّال.
	</p>

	<p>
		إن أردنا تسجيل وصفّ الملفات ضمن الإضافات بدلاً من القوالب، نقوم باستخدام دالّة <a href="https://codex.wordpress.org/Function_Reference/plugins_url" rel="external nofollow">()plugins_url</a> بدلاً من الدالّة السابقة الخاصة بالقوالب.
	</p>
</div>

<div id="wmd-preview-section-25">
	<h3 id="صف-ملف-css">
		صف ملف CSS
	</h3>

	<p>
		لصفّ ملف CSS نستخدم دالّة <a href="https://codex.wordpress.org/Function_Reference/wp_enqueue_style" rel="external nofollow">wp_enqueue_style</a>، محدّدات الدالّة هي نفسها محدّدات دالّة <span style="font-family:courier new,courier,monospace;">wp_register_style،</span> باستثناء:
	</p>

	<ul>
<li>
			محدّد<span style="font-family:courier new,courier,monospace;"> handle$</span> هو المحدد الوحيد المطلوب في حال استخدامنا لمعرّف ملف مُسجّل مسبقاً.
		</li>
		<li>
			محدد<span style="font-family:courier new,courier,monospace;"> src$ </span>غير مطلوب في حال نقوم باستخدام معرّف لملف مُسجّل مسبقاً، ومطلوب إن كنا نريد استخدام الدالّة لصفّ ملفّ غير مسجّل. فعوضاً عن تسجيل الملف بدالّة منفصلة ثم صفّه بدالّة أخرى، نقوم بصفّه مباشرة في هذه الدالّة.
		</li>
	</ul>
<p>
		مثال عن صفّ ملف مسجّل مسبقاً:
	</p>
</div>

<div id="wmd-preview-section-26">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'enqueue_style'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> enqueue_style</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
wp_enqueue_style</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-valid-style'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		مثال عن صفّ ملف جديد دون تسجيل:
	</p>
</div>

<div id="wmd-preview-section-27">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'register_enqueue_style'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> register_enqueue_style</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_enqueue_style</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-valid-style'</span><span class="pun">,</span><span class="pln"> get_template_directory_uri</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'my-theme/css/custom.css'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		نلاحظ أننا في المثال الثاني استخدمنا دالّة <span style="font-family:courier new,courier,monospace;">wp_enqueue_style</span> بشكل مماثل لدالّة <span style="font-family:courier new,courier,monospace;">wp_register_style</span>. 
	</p>

	<p>
		الفرق الرئيسي بين الطريقتين، أن الأولى تسمح لنا باستخدام الملف المُسجل في عدة أماكن، وتتيح مرونة أكبر بالتعامل مع الملفات.
	</p>
</div>

<div id="wmd-preview-section-28">
	<h3 id="إلغاء-صف-أو-إلغاء-تسجيل-ملف-css">
		إلغاء صفّ أو إلغاء تسجيل ملف CSS
	</h3>

	<p>
		قد نحتاج لإلغاء صفّ ملف، أو إلغاء تسجيله (كما سنرى في نهاية المقال)، تتيح ووردبريس دالّتين لهذين الغرضين هما: <a href="http://codex.wordpress.org/Function_Reference/wp_dequeue_style" rel="external nofollow">wp_dequeue_style</a> لإلغاء صفّ ملف و <a href="http://codex.wordpress.org/Function_Reference/wp_deregister_style" rel="external nofollow">wp_deregister_style</a> لإلغاء تسجيل ملف.
	</p>

	<p>
		في كلا الدالّتين نقوم بتمرير محدّد واحد هو المعرّف الخاص بالملف الذي نريد إلغاء صفّه أو إلغاء تسجيله، لإلغاء صفّ إطار عمل Bootstrap مثلاً، نضع الأسطر التالية في ملف <span style="font-family:courier new,courier,monospace;">functions.php</span>:
	</p>
</div>

<div id="wmd-preview-section-29">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dequeue_bootstrap'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> dequeue_bootstrap</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_dequeue_style</span><span class="pun">(</span><span class="pln"> </span><span class="str">'bootstrap'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>
</div>

<div id="wmd-preview-section-30">
	<h2 id="تسجيل-وصف-ملفات-جافاسكريبت">
		تسجيل وصفّ ملفات جافاسكريبت
	</h2>

	<p>
		آلية تسجيل وصفّ ملفات جافاسكريبت هي مماثلة جداً للتعامل مع ملفات CSS، مع بعض الفروقات البسيطة التي سنستعرضها الآن.
	</p>
</div>

<div id="wmd-preview-section-31">
	<h3 id="تسجيل-ملف-جافاسكريبت">
		تسجيل ملف جافاسكريبت
	</h3>

	<p>
		نقوم باستخدام دالّة <a href="http://codex.wordpress.org/Function_Reference/wp_register_script" rel="external nofollow">wp_register_script</a>، التي تقبل المحدّدات التالية:
	</p>

	<ul>
<li>
			<span style="font-family:courier new,courier,monospace;">handle$</span>: مطلوب، هو المعرّف الخاص بالملف، الذي سيتم استخدامه عند صفّ الملف (enqueue).
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">src</span>$: مطلوب، هو رابط (URL) ملف جافاسكريبت المطلوب تسجيله، مثل:<a href="http://example.com/js/myscript.js" rel="external nofollow">http://example.com/js/myscript.js</a>، لكن يجب ألا يتم استخدام الرابط بهذا الشكل، بل يجب أن يكون مرناً باستخدام <span style="font-family:courier new,courier,monospace;">()get_template_directory_uri</span>.
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">deps</span>$: مصفوفة من المعرّفات، التي تمثّل متطلبات الملف الذي نقوم بتسجيله، كي يتم صفّها قبل صفّ الملف المُسجَّل. <br>
			القيمة الافتراضية: مصفوفة فارغة <span style="font-family:courier new,courier,monospace;">()array</span>.
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">ver</span>$: إصدار الملف المُسجَّل، تقوم ووردبريس بوضعه كرقم بعد رابط الملف، على الشكل:custom.js?ver=123، إن لم يتم وضع قيمة لهذا المحدّد، فسيتم وضع إصدار ووردبريس الحالي بدلاً منه، لعدم وضع أي رقم نضع قيمة المحدّد null. <br>
			القيمة الافتراضية: false.
		</li>
		<li>
			<span style="font-family:courier new,courier,monospace;">in_footer</span>$: بشكل افتراضي يتم صفّ ملفات جافاسكريبت وملفات CSS ضمن وسم <span style="font-family:courier new,courier,monospace;">&lt;head&gt;</span>، لكن يمكن بوضع قيمة هذا المحدد <span style="font-family:courier new,courier,monospace;">true</span> أن يتم صفّ ملفات جافاسكريبت في نهاية المستند، قبل إغلاق وسم <span style="font-family:courier new,courier,monospace;">&lt;body/&gt;</span>، وهو الأفضل للأداء بالنسبة لزوار الموقع. <br>
			القيمة الافتراضية: <span style="font-family:courier new,courier,monospace;">false</span>.
		</li>
	</ul>
<p>
		<strong>ملاحظة</strong>: صفّ ملفّات جافاسكريبت و CSS يتطلب وجود خطّاف <span style="font-family:courier new,courier,monospace;">()wp_head</span> ضمن القالب، وصفّ ملفات جافاسكريبت مع محدّد <span style="font-family:courier new,courier,monospace;">in_footer$</span> بقيمة <span style="font-family:courier new,courier,monospace;">true</span> يتطلب وجود خطّاف <span style="font-family:courier new,courier,monospace;">()wp_footer</span> في القالب، قبل إغلاق وسم <span style="font-family:courier new,courier,monospace;">&lt;body/&gt;</span>.
	</p>
</div>

<div id="wmd-preview-section-32">
	<h3 id="صف-ملف-جافاسكريبت">
		صفّ ملف جافاسكريبت
	</h3>

	<p>
		الاستخدام مشابه تماماً لصفّ ملف CSS، لكنه يتم عن طريق دالّة <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script" rel="external nofollow">wp_enqueue_script</a>، والتي تشابه بمحدداتها دالّة التسجيل <span style="font-family:courier new,courier,monospace;">wp_register_script</span>.
	</p>

	<p>
		الفرق بين محددات دالة الصفّ ودالّة التسجيل الخاصة بملفات جافاسكريبت هي كالفرق بين محددات دالة الصف والتسجيل الخاصة بملفات CSS. محدّدات دالّة <span style="font-family:courier new,courier,monospace;">wp_enqueue_script</span> هي نفسها محدّدات دالّة <span style="font-family:courier new,courier,monospace;">wp_register_script</span>، باستثناء:
	</p>

	<ul>
<li>
			محدّد <span style="font-family:courier new,courier,monospace;">handle$</span> هو المحدد الوحيد المطلوب في حال نقوم باستخدام معرّف لملف مُسجّل مسبقاً.
		</li>
		<li>
			محدد <span style="font-family:courier new,courier,monospace;">src$</span> غير مطلوب في حال نقوم باستخدام معرّف لملف مُسجّل مسبقاً، ومطلوب إن كنا نريد استخدام الدالّة صفّ ملفّ غير مسجّل. فعوضاً عن تسجيل الملف بدالّة منفصلة ثم صفّه بدالّة أخرى، نقوم بصفّه مباشرة في هذه الدالّة.
		</li>
	</ul>
</div>

<div id="wmd-preview-section-33">
	<h3 id="إلغاء-صف-أو-إلغاء-تسجيل-ملف-جافاسكريبت">
		إلغاء صفّ أو إلغاء تسجيل ملف جافاسكريبت
	</h3>

	<p>
		طريقة إلغاء صفّ أو إلغاء تسجيل ملف جافاسكريبت هي مشابه للطريقة في ملفات CSS، لكن باستخدام دالّتي: <a href="http://codex.wordpress.org/Function_Reference/wp_deregister_script" rel="external nofollow">wp_deregister_script</a> و <a href="http://codex.wordpress.org/Function_Reference/wp_dequeue_script" rel="external nofollow">wp_dequeue_script</a>.
	</p>
</div>

<div id="wmd-preview-section-34">
	<h2 id="أمثلة-وحالات-استخدام">
		أمثلة وحالات استخدام
	</h2>

	<p>
		بالمثال يتضح المقال، سنمرّ معاً على أربعة أمثلة وحالات استخدام لنرى من خلالها كيف يمكننا التعامل ثم الاستفادة من تسجيل وصفّ ملفات JavaScript و CSS:
	</p>
</div>

<div id="wmd-preview-section-35">
	<h3 id="1-عند-استخدام-إضافة-رديئة-الجودة">
		1. عند استخدام إضافة رديئة الجودة
	</h3>

	<p>
		لنفرض لسبب ما أنك تستخدم إضافة رديئة -لا تتبع المعايير ولا تستخدم أحد الإصدارات من المكتبات-، تتطلب هذه الإضافة وجود إصدارٍ قديم من مكتبة jQuery، بينما قالبك يستخدم الإصدار اﻷحدث منها. هل من المنطقي وجود نسختين من المكتبة في القالب؟ بالتأكيد لا.
	</p>

	<p>
		لحلّ هذه المشكلة نحن أمام ثلاثة خيارات:
	</p>

	<ol>
<li>
			إن كانت الإضافة ليست رديئة الجودة كثيراً، وتقوم بصفّ مكتبة jQuery، فهذا شيء جيّد، يمكننا ببساطة إلغاء المكتبة من الصفّ وتنتهي المشكلة.
		</li>
		<li>
			إن كانت الإضافة رديئة كما وصفناها ولا تقوم بصفّ مكتبة jQuery، عندها يجب على المطوّر أن يقوم بالتعديل على ملفات الإضافة يدوياً لإلغاء تحميل مكتبة jQuery. وهناك احتمال كبير أن المطور سينسى التعديل الذي قام به، ومع مرور الأيام يقوم بتحديث الإضافة إلى إصدار جديد ويذهب التحديث اليدويّ الذي قام به! أو إن كان ذو ذاكرة قوية، سيقوم بالقيام بالتعديل اليدوي ذاته في كل مرة يظهر إصدار جديد من الإضافة. لكم أن تتخيلوا المعاناة التي ستصبح على كاهل المطوّر.
		</li>
		<li>
			الخيار الثالث والأسرع هو القيام بحذف هذه الإضافة رديئة الجودة والبحث عن واحدة أفضل منها تتبع المعايير والقواعد وتستخدم أحد الإصدارات من ملفات JavaScript و CSS.
		</li>
	</ol>
<p>
		الخيار الثالث هو الأفضل لتقليل استخدام مسكنات ألم الرأس.
	</p>

	<p>
		من المهم اتباع المعايير والقواعد المتفق عليها حتى لا يقع المطوّر في الحُفر التي وُضعت تلك المعايير والقواعد من أجل تلافيها.
	</p>
</div>

<div id="wmd-preview-section-36">
	<h3 id="2-استخدام-المكتبات-الموجودة-في-ووردبريس">
		2. استخدام المكتبات الموجودة في ووردبريس
	</h3>

	<p>
		ربّما حدّثتك نفسك في أحد الأيام أن تستعرض ملفات ووردبريس وترى محتواها، إنْ حدث ذلك فلا بدّ أنك رأيت الكثير من مكتبات جافاسكريبت مثل jQuery، jQuery UI، Backbone وغيرها.
	</p>

	<p>
		إن كانت هذه الملفات موجودة ضمن ووردبريس، فلمَ لا نقوم باستخدامها عند الحاجة إليها؟ <br>
		لو كان القالب يحتاج إلى مكتبتيّ jQuery و jQuery UI فبدلاً من تحميل نسخة من كل مكتبة من الإنترنت ثم وضعها ضمن ملفات القالب واستخدامها، يمكننا بشكل مباشر استخدام نسخة jQuery و jQuery UI الموجودتان ضمن ووردبريس. بهذا نضمن الحصول على إصدار حديث من المكتبة يأتي مع كل تحديث لووردبريس بالإضافة لعدم التكرار (Don’t Repeat Yourself).
	</p>

	<p>
		من المكتبات الشهيرة المضمّنة في ووردبريس:
	</p>

	<ul>
<li>
			jQuery
		</li>
		<li>
			jQuery UI
		</li>
		<li>
			Backbone
		</li>
		<li>
			jQuery Suggest
		</li>
		<li>
			Thickbox
		</li>
		<li>
			TinyMCE
		</li>
		<li>
			Underscore
		</li>
	</ul>
<p>
		للاطلاع على كامل القائمة يمكن زيارة <a href="https://codex.wordpress.org/Function_Reference/wp_enqueue_script#Default_Scripts_Included_and_Registered_by_WordPress" rel="external nofollow">صفحة التوثيق</a>.
	</p>
</div>

<div id="wmd-preview-section-37">
	<h3 id="3-استخدام-jquery-بشكل-مباشر-من-شبكة-توصيل-المحتوى-cdn">
		3. استخدام jQuery بشكل مباشر من شبكة توصيل المحتوى (CDN)
	</h3>

	<p>
		لا بدّ أنك سمعت بشبكة توصيل المحتوى (Content Delivery Network). تعريفها على <a href="https://ar.wikipedia.org/wiki/%D8%B4%D8%A8%D9%83%D8%A9_%D8%AA%D9%88%D8%B5%D9%8A%D9%84_%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89" rel="external nofollow">ويكبيديا</a>:
	</p>

	<blockquote>
		<p>
			هي مجموعة من الخوادم المتزامنة والموزعة والموجودة على الشبكة في أماكن جغرافية مختلفة، تحتوي على نسخ من البيانات. فالعميل يحصل على البيانات من الخادم الموجود في أقرب موقع جغرافي، بغرض تقليل التأخير الناتج في نقل البيانات.
		</p>
	</blockquote>

	<p>
		هناك موقع مخصص لاستخدام مكتبات JavaScript عن طريق شبكات توصيل المحتوى هو <a href="http://www.jsdelivr.com/" rel="external nofollow">jsDelivr</a>، سنقوم باستخدام رابط مكتبة jQuery منه (//cdn.jsdelivr.net/jquery/2.1.3/jquery.min.js) لنقوم بصفّها واستخدامها ضمن القالب، عوضاً عن استخدام النسخة المتضمنة في ملفات ووردبريس.
	</p>

	<p>
		للقيام بهذا نحتاج لوضع الأسطر القليلة التالي في ملف functions.php الخاص بقالبنا:
	</p>
</div>

<div id="wmd-preview-section-38">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'register_jquery'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> register_jquery</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_deregister_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'jquery'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
    wp_register_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'jquery'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="str">'//cdn.jsdelivr.net/jquery/2.1.3/jquery.min.js'</span><span class="pln"> </span><span class="pun">),</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
    wp_enqueue_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'jquery'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		قمنا بإلغاء تسجيل jQuery (كانت مسجلة مع الملف المتضمَّن في ووردبريس)، ثم قمنا بتسجيلها مع رابط الملف من شبكة توصيل المحتوى (CDN)، وأخيراً قمنا بصفّها (enqueue) ليتم إدراجها في القالب.
	</p>
</div>

<div id="wmd-preview-section-39">
	<h3 id="4-صف-ملف-جافاسكريبت-يعتمد-على-jquery">
		4. صفّ ملف جافاسكريبت يعتمد على jQuery
	</h3>

	<p>
		في معظم الحالات نحتاج في القوالب لإضافة جافاسكريبت، سواء لإضافة حركات معيّنة أو لتعديل شيءٍ ما، وبسبب شهرة مكتبة jQuery فمعظم المطورين يعتمدون عليها كقاعدة أساسية لبناء ملفات جافاسكريبت الخاصة بقوالبهم.
	</p>

	<p>
		على فرض أن الملف الذي نريد إضافته يعتمد على مكتبة jQuery وهو موجود مع ملفات القالب في المسار: js/custom.js، لصفّ هذا الملف نقوم بإضافة الأسطر التالية إلى ملفfunctions.php:
	</p>
</div>

<div id="wmd-preview-section-40">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'enqueue_custom_js'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> enqueue_custom_js</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_register_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-custom-js'</span><span class="pun">,</span><span class="pln"> get_template_directory_uri</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/js/custom.js'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="str">'jquery'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
    wp_enqueue_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-custom-js'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		قمنا بتسجيل الملف الذي نريد صفّه، ولنلاحظ كيف حدّدنا متطلبات الملف ضمن مصفوفة، يعتمد الملف على مكتبة jQuery فقط. <br>
		ثم قمنا بصفّه باستخدام المعرّف الذي استخدمناه أثناء تسجيل الملف.
	</p>

	<p>
		تكون النتيجة في المتصفح مشابهة للتالي:
	</p>
</div>

<div id="wmd-preview-section-41">
	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"//cdn.jsdelivr.net/jquery/2.1.3/jquery.min.js?ver=4.2"</span><span class="tag">&gt;&lt;/script&gt;</span><span class="pln">
</span><span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://localhost:8000/wp-content/themes/my-theme/js/custom.js?ver=4.2"</span><span class="tag">&gt;&lt;/script&gt;</span></pre>

	<p>
		ونلاحظ أن ووردبريس قامت بصفّ مكتبة jQuery قبل الملف الذي قمنا بتسجيله، وذلك كي يقوم المتصفح بقراءة ملف المكتبة في البداية وتكون متوفرة للاستخدام، وعند قراءة المتصفح للملف الخاص يمكن للملف استخدام مكتبة jQuery بعد أن أصبحت متوفرة.
	</p>
</div>

<div id="wmd-preview-section-42">
	<h2 id="تمرير-متغيرات-من-php-للجافاسكريبت">
		تمرير متغيّرات من PHP للجافاسكريبت
	</h2>

	<p>
		ماذا لو أردنا استخدام متغيّرات ما ضمن جافاسكريبت؟ قد يتهيؤ للبعض أن يقوم بعمل طلب AJAX أو وضع ما يريد استخدامه في جافاسكريبت بداخل ملف خارجي. قد تعمل هذه الحلول، لكنها لن تجدي نفعاً إن أردنا تمرير متغيّرات تتبدّل قيمتها باستمرار كأن تكون من قاعدة البيانات مثلاً.
	</p>

	<p>
		توفّر ووردبريس حلّاً سهلاً ومناسباً لهذه المشكلة، وذلك باستخدام دالّة <a href="https://codex.wordpress.org/Function_Reference/wp_localize_script" rel="external nofollow">wp_localize_script</a>، اسم الدالّة قد يوحي أنها مخصصة للترجمة، لكن يمكن استخدامها لتمرير جمل الترجمة وأي نوع آخر من المتغيّرات إلى جافاسكريبت.
	</p>

	<p>
		محددات الدالّة هي: <br>
		- <span style="font-family:courier new,courier,monospace;">handle$</span>: معرّف لملف جافاسكريبت الذي نريد تمرير المتغيّرات له، يجب أن يكون الملف مسجّلاً قبل استخدام الدالّة. <br>
		- <span style="font-family:courier new,courier,monospace;">name$</span>: اسم متغيّر جافاسكريبت الذي سيتم وضع البيانات بداخله. <br>
		- <span style="font-family:courier new,courier,monospace;">data$</span>: مصفوفة المتغيّرات التي نريد تمريرها إلى جافاسكريب.
	</p>

	<p>
		مثال: لنقم بتمرير متغيّرين هما سلسلة نصية ورقم إلى ملف جافاسكريبت ذو المحدد my-custom-js:
	</p>
</div>

<div id="wmd-preview-section-43">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'enqueue_custom_js'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> enqueue_custom_js</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_register_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-custom-js'</span><span class="pun">,</span><span class="pln"> get_template_directory_uri</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/js/custom.js'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="str">'jquery'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

    $translation_array </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
        </span><span class="str">'some_string'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'A String to be using inside JS'</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'a_value'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'10'</span><span class="pln">
    </span><span class="pun">);</span><span class="pln">

    wp_localize_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-custom-js'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'object_name'</span><span class="pun">,</span><span class="pln"> $translation_array </span><span class="pun">);</span><span class="pln">
    wp_enqueue_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my-custom-js'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		كي نصل إلى المتغيّرات من داخل ملف custom.js، نستخدم شيئاً مشابهاً:
	</p>
</div>

<div id="wmd-preview-section-44">
	<pre class="javascript ipsCode prettyprint prettyprinted" data-pbcklang="javascript" data-pbcktabsize="">
<span class="pln">alert</span><span class="pun">(</span><span class="pln"> object_name</span><span class="pun">.</span><span class="pln">some_string</span><span class="pun">);</span></pre>

	<p>
		يجب أن تظهر رسالة تنبيه (Alert) بداخلها النصّ الذي استخدمناه.
	</p>
</div>

<div id="wmd-preview-section-45">
	<h2 id="صف-الملفات-في-لوحة-التحكم">
		صفّ الملفات في لوحة التحكم
	</h2>

	<p>
		كل ما مرّ معنا من تسجيل وصفّ الملفات هو خاص بواجهة الموقع (Front-end)، أي الذي يراه الزوار. إن أردنا تسجيل وصفّ الملفات في لوحة التحكم (Dashboard) يمكننا ذلك بنفس الطريقة، لكن باستبدال حدث <span style="font-family:courier new,courier,monospace;">wp_enqueue_scripts</span> بحدث: <span style="font-family:courier new,courier,monospace;">admin_enqueue_scripts</span>. <br>
		مثلاً لصفّ مكتبة jQuery Suggest في لوحة التحكم (المكتبة معرّفة مسبقاً في ووردبريس)، نستخدم الأسطر التالية:
	</p>
</div>

<div id="wmd-preview-section-46">
	<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'admin_enqueue_scripts'</span><span class="pln"> </span><span class="pun">,</span><span class="pln"> </span><span class="str">'enqueue_jquery_suggest'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> enqueue_jquery_suggest</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_enqueue_script</span><span class="pun">(</span><span class="pln"> </span><span class="str">'suggest'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		<strong>ملاحظة</strong>: من المناسب وضع شروط معيّنة قبل صفّ الملفات وقصرها على صفحاتٍ معينة، كي لا يتم وضع الملف في كل صفحات لوحة التحكم.
	</p>
</div>

<div id="wmd-preview-section-47">
	<h2 id="الخاتمة">
		الخاتمة
	</h2>

	<p>
		تعرّفنا على كيفية صفّ ملفات JavaScript و CSS، هذه الآلية تسهّل كثيراً تنظيم الملفات والتعامل معها، ويجب الحرص على استخدامها بشكل دائم، فهي من المعايير والأشياء المتعارف عليها في تطوير قوالب وإضافات ووردبريس.
	</p>

	<p>
		أرجو أن يكون الشرح واضحاً ومفيداً، إن كان لديكم سؤال أو فكرة فلتشاركونا إياها في التعليقات.
	</p>
</div>
]]></description><guid isPermaLink="false">79</guid><pubDate>Sat, 16 May 2015 07:18:00 +0000</pubDate></item><item><title>&#x646;&#x638;&#x631;&#x629; &#x634;&#x627;&#x645;&#x644;&#x629; &#x639;&#x644;&#x649; &#x642;&#x627;&#x639;&#x62F;&#x629; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B4%D8%A7%D9%85%D9%84%D8%A9-%D8%B9%D9%84%D9%89-%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r69/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_04/wordpress-plugin-dev_480x300.jpg.04ccaf898cd5f9212f559ec05df5019d.jpg" /></p>

<p dir="rtl">من أهم الأمور التي ينبغي على مطور ووردبريس الإلمام بها ومعرفتها هي قاعدة بيانات ووردبريس حيث أنها المستودع الرئيسي للبيانات في نظام إدارة المحتوى كما أنها تعكس التركيبة الخاصة بووردبريس وأهم محتوياته الأساسية وطريقة تمديده بصورة مثالية ويظهر هذا جليًَا عند اطلاعنا على جداول meta في الفقرات القادمة.</p><p dir="rtl">في هذا المقال سنحاول تقديم نبذة عن جداول قاعدة بيانات ووردبريس ودور كل جدول بالإضافة لأهم محتوياته وارتباطه بالجداول الأخرى، بالإضافة إلى ذكر بعض الطرق التي يوفرها ووردبريس للتعامل مع البيانات.</p><h2 dir="rtl">جداول قاعدة بيانات ووردبريس</h2><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_04/wordpress-database.png.e43eff7bba5ea0cbd9b3896358f53a8a.png"><img data-fileid="1419" class="ipsImage ipsImage_thumbnailed" src="https://academy.hsoub.com/uploads/monthly_2015_04/wordpress-database.thumb.png.781e520edaeb5c686865465c28ed2001.png"></a></p><p dir="rtl" style="text-align: center;">انقر على الصورة لمُشاهدتها بحجمها الكامل</p><p dir="rtl">هذا التفصيل الذي سنذكره قد لا تجده حتى في التّوثيق الرّسمي لووردبريس وبالتالي سيكون مرجعًا مُفيدًا لمن أراد دراسة قاعدة البيانات بتعمّق.</p><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_options">wp_options</a></span></h3><p dir="rtl">تطرقنا من قبل لهذا الجدول في مقال <a href="http://academy.hsoub.com/code/php/wordpress/%D8%A7%D8%B3%D8%AA%D9%82%D8%A8%D8%A7%D9%84-%D9%88%D8%AD%D9%81%D8%B8-%D8%AE%D9%8A%D8%A7%D8%B1%D8%A7%D8%AA-%D9%88%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-setting-api-%D9%88options-api-r43/">استقبال وحفظ الخيارات</a> حيث ذكرنا أنّ ووردبريس يستخدمه لحفظ <a rel="external nofollow" href="https://codex.wordpress.org/Option_Reference">الخيارات الخاصة به</a> وكذلك يتيح لك حفظ خيارات القوالب أو الإضافات التي تبرمجها فيه من خلال توفير الواجهة البرمجية للإعدادات والتي أسهبنا في الكلام عنها في المقال آنف الذّكر.<br>يحتوي هذا الجدول على أربعة أعمدة وهي <span style="font-family:courier new,courier,monospace;">option_id</span>، <span style="font-family:courier new,courier,monospace;">option_name</span>, <span style="font-family:courier new,courier,monospace;">option_value, autoload</span> وهي نفس المعاملات التي تقوم بتمريرها للدّالة <span style="font-family:courier new,courier,monospace;">add_options</span> التي تكلّمنا عنها سابقا.<br>لا يرتبط هذا الجدول بصورة مباشرة بأيّ من الجداول الأخرى في قاعدة البيانات.</p><h3 dir="rtl">جدول<span style="font-family:courier new,courier,monospace;"> <a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_users">wp_users</a></span></h3><p dir="rtl">كما هو واضح من اسمه خاص بحفظ بيانات المستخدمين لموقع ووردبريس بجميع رتبهم سواء تعلّق الأمر بالمدير admin أو بغيره من الرّتب.</p><p dir="rtl">هذا الجدول مكون من عشرة أعمدة وهي:</p><ul><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">ID</span>: وهو المعرف الخاص بالمستخدم، ويجب أن يكون فريدًا وهو المفتاح الرئيسي للجدول Primary key.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_login</span>: اسم المستخدم أو اسم الدخول.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_pass</span>: كلمة مرور المستخدم وتحفظ مشفرة في قاعدة البيانات.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_nicename</span>: الاسم اللطيف للمستخدم.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_email</span>: البريد الإلكتروني للمستخدم.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_url</span>: الموقع الإلكتروني للمستخدم.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_registered</span>: تاريخ تسجيل المستخدم.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_activation_key</span>: المفتاح المستخدم عند استعادة كلمة المرور، يقوم ووردبريس بتوليده عند طلب استعادة المرور ويقوم بمسحه بعد استعماله مباشرة.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_status</span>: تم التخلي عن هذا العمود deprecated وربما يتم إسقاطه في النسخ القادمة من ووردبريس.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">display_name</span>: اسم العرض للمستخدم والذي يظهر في واجهة الموقع.</p></li></ul><p dir="rtl">جدول المستخدمين مرتبط بعدة جداول في قاعدة بيانات ووردبريس حيث يرتبط بجدول المقالات لأن كل مقال يكون منسوبًا لكاتب (مستخدم) معين، وكذلك مرتبط بجدول التّعليقات لنسبة كل تعليق لكاتبه إن كان من المُسجًّلين في الموقع، وأخيرًا يرتبط بجدول <span style="font-family:courier new,courier,monospace;">wp_usermeta</span> وهو الجدول التالي في شرحنا.</p><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_usermeta">wp_usermeta</a></span></h3><p dir="rtl">كما رأينا فإن جدول المستخدمين مكون من أعمدة مُحدّدة بالتّالي عندما تحتاج لإضافة بيانات معينة للمستخدم مثل روابطه في الشبكات الاجتماعية مثلًا ستضطر إلى إضافة المزيد من الأعمدة في جدول المستخدمين لكن هذه الطريقة غير عملية لذلك يأتي جدول <span style="font-family:courier new,courier,monospace;">wp_usermeta</span> ليُمكّنك من إضافة المزيد من البيانات meta للمستخدمين بدون التعديل على تركيبة الجداول (الأعمدة) وبإضافة المزيد من الصفوف لهذا الجدول.<br>يحتوي هذا الجدول على أربعة أعمدة وهي</p><ul><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">umeta_id</span>: وهو المعرف الخاص بهذه الـmeta التي تريد إضافتها وهو فريد حيث أنه المفتاح الرئيسي لهذا الجدول.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">user_id</span>: معرف المستخدم الذي تعود له هذه البيانات meta وهو عبارة عن مفتاح أجنبي foreign key يعود إلى جدول <span style="font-family:courier new,courier,monospace;">wp_user</span> وبهذه الطريقة يتم الربط بين الجدولين كما هو معلوم في <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Relational_database">قاعدة البيانات العلائقية </a><a rel="external nofollow" href="http://en.wikipedia.org/wiki/Relational_database">Relational Database</a>.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">meta_key</span>: مفتاح البيانات meta (اسمها) والذي يتم استدعاؤها به برمجيًّا حيث أن لكل meta مفتاح وقيمة كما هو في الخيارات.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">meta_value</span>: قيمة البيانات meta.</p></li></ul><p dir="rtl">هذه الطريقة المستخدمة في إضافة المزيد للبيانات للمستخدمين بدون التعديل على جدول <span style="font-family:courier new,courier,monospace;">wp_user</span> وذلك من خلال إتاحة جدول <span style="font-family:courier new,courier,monospace;">wp_usermeta</span> مستخدمة أيضا مع المقالات post والتعليقات comment حيث يستخدم جداول غير الجداول الأساسية لإضافة بيانات غير البيانات الأساسية لكل من المقالات والتعليقات كما سنرى في الفقرات التالية، ولعل الفكرة العامة لهذه الطريقة وضحت من خلال الجدول الأساسي <span style="font-family:courier new,courier,monospace;">wp_user</span> وجدوله المساعد <span style="font-family:courier new,courier,monospace;">wp_usermeta</span>.</p><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_posts">wp_posts</a></span></h3><p dir="rtl">يمكن أن نعتبر هذا الجدول هو الجدول الأساسي في ووردبريس حيث أنه الرّكيزة الأساسية لأنواع المقالات والتي يمكن أن نعتبرها المحتويات في نظام إدارة المحتوى، أي أنها العنصر الأساسي الذي تم من أجله إنشاء النظام.<br>تجدر الإشارة أن هذه الجدول ليس مُختصًّا بالمقالات فقط بل بكل <a rel="external nofollow" href="https://codex.wordpress.org/Post_Types">أنواع المقالات</a> والتي تشمل الصفحات أيضا وأي نوع مقالات أخر يتم إنشاؤه، وإن كنت لم تتطلع من قبل على أنواع المقالات المخصصة فأشير إليك بقراءة هذا المقال المختصر عن <a rel="external nofollow" href="http://wparaby.com/custom-post-types/">أنواع المقالات المُخصّصة في ووردبريس</a>.</p><p dir="rtl">يحتوي هذا الجدول على ثلاثة وعشرين عمودًا وإليك تفاصيلها</p><ul><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">ID</span>: معرف فريد للمقال.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_author</span>: كاتب المقال.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_date</span>: تاريخ المقال.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_date_gmt</span>: تاريخ المقال بتوقيت جرينتش.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_content</span>: محتويات المقال (النّصّ الفعلي للمقال).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_title</span>: عنوان المقال.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_excerpt</span>: مُقتطف المقال (نصّ اختياري يمكن للمستخدم أن يدخله).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_status</span>: حالة المقال (منشور، مسودة، تحت المراجعة، ... الخ).</p></li><li><p dir="rtl">comment_status: حالة التّعليقات (هل التعليقات مفتوحة أم مغلقة).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">ping_status</span>: حالة التّنبيه (هل التنبيهات مفعلة أم لا).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_password</span>: كلمة مرور للمقال (في حالة كان مغلقا بكلمة مرور).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_name</span>: رابط المقال أو ما يسمى بالاسم اللطيف.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">to_ping</span>: روابط المقالات التي سيتم تنبيهها (أي المشار لها في المقال الحالي) وهذه لي حالة أن المقال لم ينشر بعد.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">pinged</span>: روابط المقالات التي تم تنبيهها وهذه في حالة أن المقال قد تم نشره.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_modified</span>: تاريخ آخر تعديل للمقال.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_modified_gmt</span>: تاريخ آخر تعديل للمقال بتوقيت جرينتش.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_content_filtered</span>: تستخدم لتخزين نسخة cache لـ<span style="font-family:courier new,courier,monospace;">post_content</span> المشار لها سابقا (عادة بعد تطبيق الخطافات المرتبطة بالمُرشح <span style="font-family:courier new,courier,monospace;">the_content</span> عليها).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_parent</span>: معرف المقال الأب لهذا المقال (في حالة كان نوع المقالات هرمي hierarchical مثل الصّفحات.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">guid</span>: اختصار لـGlobal Unique Identifier وهي عبارة عن الرابط الحقيقي للمقال. في حالة الصفحات يكون هذا هو الرابط الفعلي إمّا في حالة الملفّات المرفقة attachments يكون هذا هو الرابط للملف المرفق.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">menu_order</span>: قيمة عددية (0، 1، 2، ...) تُحدّد ترتيب المقال وتعمل مع أنواع المقالات الهرمية مثل الصفحات وليس المقالات العادية.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_type</span>: نوع المقال (مقال، صفحة، منتج، ملف مرفق، ..الخ).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_mime_type</span>: تعمل فقط مع الملفات المرفقة attachments حيث تحتوي على نوع الميديا للملف <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Internet_media_type">MIME type</a>.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">comment_count</span>: عدد التعليقات مضاف إليه عدد التنبيهات pings والتعقيبات trackbacks.</p></li></ul><p dir="rtl">يرتبط جدول المقالات <span style="font-family:courier new,courier,monospace;">wp_posts</span> مع مجموعة من الجداول وهي</p><ul><li><p dir="rtl">جدول <span style="font-family:courier new,courier,monospace;">wp_user</span>: كما تم الإشارة إلى هذا الأمر سابقا حيث أن لكل مقال كاتب.</p></li><li><p dir="rtl">جدول التعليقات <span style="font-family:courier new,courier,monospace;">wp_comments</span> وهذا واضح ليربط كل مقال بالتّعليقات عليه.</p></li><li><p dir="rtl">جدول <span style="font-family:courier new,courier,monospace;">wp_term_relationships</span> وسيتم شرح هذا في الفقرات القادمة.</p></li><li><p dir="rtl">جدول <span style="font-family:courier new,courier,monospace;">wp_postmeta</span>: وهو الجدول التّالي في شرحنا</p></li></ul><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_postmeta">wp_postmeta</a></span></h3><p dir="rtl">كما هو الأمر بالنسبة للمستخدمين قد تحتاج لإضافة المزيد من البيانات للمقال غير البيانات الأساسية الموجودة في جدول المقالات <span style="font-family:courier new,courier,monospace;">wp_post</span> فمثلا إذا كان لديك نوع مقالات يُسمّى منتجات قد تحتاج لإضافة بيانات إضافية لكل منتج مثل السّعر والكمّيّة المُتوفّرة وغيرها من البيانات وكما هو الحال بالنسبة للمستخدمين يتم استخدام جدول إضافي وهو جدول <span style="font-family:courier new,courier,monospace;">wp_postmeta</span> لإضافة مثل هذه البيانات وربطها بالمقال المعين.</p><p dir="rtl">يتكون هذا الجدول من أربعة حقول وهي</p><ul><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">meta_id</span>: وهو المعرف الخاص بهذه الـmeta التي تريد إضافتها وهو فريد حيث أنه المفتاح الرئيسي لهذا الجدول.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">post_id</span>: معرف المقال الذي تعود له هذه البيانات meta وهو عبارة عن مفتاح أجنبي foreign key يعود إلى جدول <span style="font-family:courier new,courier,monospace;">wp_post</span> وبهذه الطريقة يتم الربط بين الجدولين.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">meta_key</span>: مفتاح البيانات meta (اسمها) والذي يتم استدعاؤها به برمجيًّا حيث أن لكل meta مفتاح وقيمة كما هو في جدول <span style="font-family:courier new,courier,monospace;">wp_usermeta</span>.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">meta_value</span>: قيمة البيانات meta.</p></li></ul><p dir="rtl">يرتبط هذا الجدول بجدول المقالات <span style="font-family:courier new,courier,monospace;">wp_posts</span> فقط.</p><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_comments">wp_comments</a></span></h3><p dir="rtl">وكما هو واضح من الاسم هذا هو الجدول الذي يتم فيه حفظ التعليقات، وله مجموعة من الحقول لن نتطرق لها الآن حتى لا نطيل الشرح كما أنه يمكنك الاطلاع عليها في الصورة أعلاه.<br>يرتبط هذا الجدول بجدول المستخدمين <span style="font-family:courier new,courier,monospace;">wp_users</span> إذا كان التعليق من مستخدم مسجل في الموقع، كما يرتبط بالطّبع بجدول المقالات حيث أن التعليق يعود لمقال معين حيث يكون معرف المقال ID هو المفتاح الأجنبي والذي يقوم بعميلة الربط.<br>أيضا يرتبط هذا الجدول بجدول <span style="font-family:courier new,courier,monospace;">wp_commentmeta</span> وهو الجدول التالي في الشرح.</p><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_commentmeta">wp_commentmeta</a></span></h3><p dir="rtl">ومثل هذا الجدول والعلاقة التي تربطه بجدول <span style="font-family:courier new,courier,monospace;">wp_commetnts</span> هو مثل العلاقة بين كل من <span style="font-family:courier new,courier,monospace;">wp_posts</span> و <span style="font-family:courier new,courier,monospace;">wp_postmeta</span> وكذلك <span style="font-family:courier new,courier,monospace;">wp_users</span> و <span style="font-family:courier new,courier,monospace;">wp_usermeta</span>. وأظن أن الصورة قد أصبحت واضحة بالنسبة لهذه الطريقة التي يستخدمها ووردبريس في الربط بين البيانات.</p><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_links">wp_links</a></span></h3><p dir="rtl">يستخدم لحفظ البيانات المتعلقة بميزة الروابط links والتي أصبحت ملغية deprecated ورغم أنه يمكنك إعادة تفعيلها من خلال إضافة <a rel="external nofollow" href="http://wordpress.org/extend/plugins/link-manager/">Link Manager</a> إلا أننا لن نتطرق لشرح هذا الجدول (حتى الإضافة لم تحدث منذ أكثر من عامين).</p><h3 dir="rtl">جدول<span style="font-family:courier new,courier,monospace;"> <a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_term_taxonomy">wp_term_taxonomy</a></span></h3><p dir="rtl">هذا الجدول يُعرّف العلاقة بين ما يسمى بالفئات أو الأنواع Taxonomies والـterms الموجودة في الموقع.<br>كل نوع Taxonomy عبارة عن طريقة لتنصيف المقالات وفق شيء معين، مثلا يأتي ووردبريس بعدة أنواع افتراضية منها التصنيفات والوسوم وهما للمقالات، لكن يمكنك إضافة المزيد من الأنواع لأي نوع من أنواع المقالات طالما أنه يدعمها.<br>كل واحد من الأنواع (الوسوم مثلا) يحتوي على عدد من الـterms وهي عبارة عن الوسوم نفسها وكل وسم يحتوي على عدة مقالات أو يمكن أن نقول أن كل مقال له عدة وسوم وكذلك عدة تصنيفات وهكذا يكون المقال له عدد من الـterms.</p><p dir="rtl">إذن يمكن أن نعتبر أن كل نوع Taxonomy عبارة عن أب أو طريقة لتجميع عدد من الـterms أو أن كل term يتبع لنوع معين.</p><p dir="rtl">الصورة التالية توضح مفهومي الأنواع Taxonomies وكذلك الـTerms والعلاقة بينهما</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_04/wordpress-taxonomy-terms.png.1533a17d0995e199a6ce06740bdf95f6.png"><img data-fileid="1418" class="ipsImage ipsImage_thumbnailed" src="https://academy.hsoub.com/uploads/monthly_2015_04/wordpress-taxonomy-terms.thumb.png.5e85b814d023ad3fc3419084a1d51652.png"></a></p><p dir="rtl" style="text-align: center;"><span style="line-height: 22.3999996185303px; text-align: center;">انقر على الصورة لمُشاهدتها بحجمها</span><span style="line-height: 22.3999996185303px; text-align: center;"> الكامل</span></p><p dir="rtl">هذا الجدول يحتوي على ستة أعمدة وهي</p><ul><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">term_taxonomy_id</span>: معرف العلاقة بين النوع Taxonomy والـterm.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">term_id</span>: معرف الـterm (مثلا 1 أو 7).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">taxonomy</span>: اسم النوع الذي يتبع له هذا الـterm (مثلا تصنيفات أو وسوم).</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">description</span>: وصف للعلاقة.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">parent</span>: الأب لهذا الـterm.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">count</span>: عدد المقالات في هذا الـterm.</p></li></ul><p dir="rtl">هذا الجدول يرتبط بجدولي <span style="font-family:courier new,courier,monospace;">wp_term_relationships</span> وwp_terms التّاليين.</p><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_terms">wp_terms</a></span></h3><p dir="rtl">هذا الجدول يعرف فيه الـterms (مثلا التصنيفات أو الوسوم) الموجودة في الموقع ويرتبط بالجدول السابق ليربط كل term مع النوع taxonomy الخاص به.</p><p dir="rtl">يتكون هذا الجدول من أربعة عمدة هي</p><ul><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">term_id</span>: معرف الـterm وهذا هو المفتاح الأساسي لهذا الجدول.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">name</span>: اسم الـterm.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">slug</span>: الاسم اللطيف للterm.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">term_group</span>: هذا العمود مضاف لإضافة خاصية تسمح بوجود عدة مسميات لنفس الـterm لكن يبدو أن هذه الخاصية لم تدعم حتى الآن في ووردبريس، وهذا وفقا <a rel="external nofollow" href="http://wordpress.stackexchange.com/a/23173">لأحدى الإجابات على موقع </a><a rel="external nofollow" href="http://wordpress.stackexchange.com/a/23173">Stack Exchange </a>.</p></li></ul><h3 dir="rtl">جدول <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Database_Description#Table:_wp_term_relationships">wp_term_relationships</a></span></h3><p dir="rtl">لاحظ أنّه في الجدولين السّابقين كان التركيز على كل من الـterms والأنواع والعلاقة بينهما لكن حتى الآن ليس هنالك ربط فعلي بين التصنيفات والمقالات وعموما بين الـterms والمقالات، وهذه مهمة هذا الجدول حيث يربط المقالات مع معرف جدول <span style="font-family:courier new,courier,monospace;">wp_term_taxonomy</span> والذي كما ذكرنا يعرف العلاقة بين الأنواع والـterm التابعة لها.</p><p dir="rtl">يتكون هذا الجدول من أربعة أعمدة هي</p><ul><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">object_id</span>: وهو معرف المقال الذي يراد ربطه بالـterm الخاص به وهذا هو المفتاح الأساسي لهذا الجدول.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">term_taxonomy_id</span>: وهو عبارة عن مفتاح أجنبي عبارة عن المفتاح الأساسي في جدول <span style="font-family:courier new,courier,monospace;">wp_term_taxonomy</span>.</p></li><li><p dir="rtl"><span style="font-family:courier new,courier,monospace;">term_order</span>: ترتيب الـterm.</p></li></ul><p dir="rtl">هذا الجدول بالطّبع يرتبط مع جدولي <span style="font-family:courier new,courier,monospace;">wp_posts</span> وكذلك جدول <span style="font-family:courier new,courier,monospace;">wp_term_taxonomy</span> وأيضا يرتبط مع جدول <span style="font-family:courier new,courier,monospace;">wp_links</span> الذي ذكرنا أنه أصبح deprecated.</p><h2 dir="rtl">التعامل مع قاعدة بيانات ووردبريس</h2><p dir="rtl">بالطبع يمكنك استخدام دوال <span style="font-family:courier new,courier,monospace;">my_sqli</span> الأساسية المتاحة مع لغة php للتّواصل مع قاعدة البيانات أو حتى استخدام فئة PDO لكن يفضل دوما استخدام الطرق التي يقدمها ووردبريس ما دام ذلك مُمكنًا للحصول على توافقية أكبر للإضافة مع بقية مكونات ووردبريس بالإضافة للاستفادة من الفئات والتسهيلات التي يوفرها ووردبريس، وإليك طريقتين يُوفرهما ووردبريس للتعامل مع قاعدة بياناته:</p><h3 dir="rtl">1- استخدام الحلقة The Loop</h3><p dir="rtl">هذا المصطلح في ووردبريس يرمز لأحد أهم المكونات في ووردبريس والتي تستخدم بكثرة في تطوير قوالب ووردبريس، وهي ببساطة طريقة لجلب المقالات (أو أنواع المقالات المخصصة) وعرضها في القالب أو الإضافة وهذه هي الصورة العامة للحلقة</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint"><span style="line-height: 22.3999996185303px;">&lt;?php if ( have_posts() ) : // التحقق من وجود المقالات ?&gt;
</span>&lt;?php /* بدء الحلقة */ ?&gt;
&lt;?php while ( have_posts() ) : the_post(); // تجهيز بيانات المقال ?&gt;
// هنا يتم استخدام وسوم القالب لجلب البيانات المتعلقة بالمقال الحالي
// لاحظ أن ما بداخل الحلقة يتكرر في كل مرة حتى يصل إلى عدم تحقق الشرط في السطر الأول
&lt;?php endwhile; ?&gt;
&lt;?php endif; ?&gt;</pre><p dir="rtl">داخل الحلقة يتم استخدام بعض الدّوال التي يوفرها ووردبريس والتي تسمى بوسوم القالب Template Tags وهي عبارة عن دوال جاهزة تستخدم لجلب بيانات المقال والبيانات المرتبطة به مثل اسم الكاتب وتصنيفات المقال وغيرها من المحتويات. إذن استخدام الحلقة يوفر لنا إمكانية استخدام مجموعة كبيرة جدا من الدّوال الجاهزة التي توفر كثيرا من الجهد والوقت.<br>يمكن أن نقول أن هنالك نوعان من الحلقات، الأولى هي الحلقة الأساسية التي مثلنا لها أعلاه والثانية يمكن إنشاؤها عن طريق إنشاء كائن Object من الفئة <span style="font-family:courier new,courier,monospace;">WP_Query</span> بالصورة التالية:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint"><span style="line-height: 22.3999996185303px;">&lt;?php $args = array(); // هنا يتم تعريف المعاملات التي ستمرر في الأسفل ?&gt;</span>
&lt;?php $query = new WP_Query($args); // تعريف الكائن الذي سيستخدم لجلب المقالات في الحلقة ?&gt;
&lt;?php if ( $query-&gt;have_posts() ) : // التّحقق من وجود المقالات ?&gt;
&lt;?php /* بدء الحلقة */ ?&gt;
&lt;?php while ( $query-&gt;have_posts() ) : $query-&gt;the_post(); // تجهيز بيانات المقال ?&gt;
// ما بداخل الحلقة مشابه للحلقة الأساسية
&lt;?php endwhile; ?&gt;
&lt;?php endif; ?&gt;</pre><p dir="rtl">عند إنشاء الكائن تقوم بتمرير بعض المعاملات التي تحدد لووردبريس المقالات التي تود جلبها فمثلا قد ترغب بجلب جزئية فقط من المقالات والتي تُحقّق شرطًا مُعيّنًا مثل المقالات التّابعة لتصنيف مُعيّن وهكذا، وهذا أيضا ينطبق على أنواع المقالات المُخصّصة حيث تُمرر نوع المقالات المُخصّصة الذي تود جلبه بالإضافة لبقية المعاملات التي تود تمريرها.<br>بالطبع فإن الحلقة محدودة على جلب البيانات المُتعلّقة بالمقالات وأنواع المقالات المُخصّصة بالتّالي لن تستخدمها إلا عندما تود جلب هذا النوع من البيانات وإلا فستنتقل إلى طريقة أخرى، لكن طالما أنّك تود جلب هذا النوع من البيانات فلا تعدل عن استخدام الحلقة أو على الأقل استخدام الدالة <span style="font-family:courier new,courier,monospace;"><a rel="external nofollow" href="https://codex.wordpress.org/Template_Tags/get_posts">get_posts</a></span> التي تشبه الحلقة في معاملاتها لكنها ترجع البيانات في شكل مصفوفة.</p><h3 dir="rtl">2- استخدام صنف <span style="font-family:courier new,courier,monospace;">wpdb</span></h3><p dir="rtl"><a rel="external nofollow" href="https://codex.wordpress.org/Class_Reference/wpdb">هذا الصّنف</a> يحتوي على مجموعة من الدّوال يستخدمها ووردبريس في التعامل مع قاعدة بياناته، ويمكنك الوصول لهذه الدّوال من خلال استخدام الكائن <span style="font-family:courier new,courier,monospace;">$wbdb</span> وهو عبارة عن global object وهذا مثال لطريقة استخدامه</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">global $wpdb; $results = $wpdb-&gt;get_results( 'SELECT * FROM wp_options WHERE option_id = 1', OBJECT );</pre><p dir="rtl">تستطيع من خلال هذا الكائن الوصول إلى مجموعة كبيرة من الدّوال التي يوفّرها الصّنف <span style="font-family:courier new,courier,monospace;">wpdb</span>، كما تستطيع أيضا الوصول إلى <a rel="external nofollow" href="https://codex.wordpress.org/Class_Reference/wpdb#Class_Variables">متغيرات هذ</a>ا الصّنف والتي من ضمنها جداول قاعدة البيانات التي ذكرناها سابقا.</p><p dir="rtl"><strong>هل تفضل استخدام طريقة أخرى</strong><br>إذا كان الأمر كذلك فلا تنس التّحقق الجيد من البيانات قبل إدخالها واسترجاعها من قاعدة البيانات، حتى لا تحتوي الإضافة على ثغرات أمنية تسهل من اختراق الموقع.</p><h2 dir="rtl">خاتمة</h2><p dir="rtl">يمكن أن نقول أننا أنهينا الجانب النّظري لبعض أساسيات ووردبريس لمطوري الإضافات، ولم يتبق لنا سوى تقديم مثال عملي لإضافة حقيقية يربط هذه المفاهيم التي تعرفنا عليها ويوضّحها بصورة أكبر، وهذا ما سنقدمه في المقال القادم إن شاء الله.<br> </p>
]]></description><guid isPermaLink="false">69</guid><pubDate>Thu, 23 Apr 2015 05:08:00 +0000</pubDate></item><item><title>&#x625;&#x636;&#x627;&#x641;&#x629; &#x642;&#x648;&#x627;&#x626;&#x645; &#x627;&#x644;&#x62A;&#x646;&#x642;&#x644; (Navigation Menu) &#x625;&#x644;&#x649; &#x642;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-navigation-menu-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r68/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_04/wordpress-navigation_480x300.jpg.d85fc53836c57b6a6a50accc42bf2753.jpg" /></p>

<p>
	بعد أن تطرّقنا في هذه السّلسلة حول أساسيات تطوير قوالب ووردبريس إلى <a href="http://academy.hsoub.com/code/php/wordpress/%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-html-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r32/" rel="">تحويل صفحة </a><a href="http://academy.hsoub.com/code/php/wordpress/%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-html-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r32/" rel="">HTML إلى قالب ووردبريس</a> ثم إلى <a href="http://academy.hsoub.com/code/php/wordpress/%D8%A7%D9%84%D8%AA%D9%91%D8%B5%D9%81%D9%8A%D8%AD-pagination-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r54/" rel="">كيفية إضافة </a><a href="http://academy.hsoub.com/code/php/wordpress/%D8%A7%D9%84%D8%AA%D9%91%D8%B5%D9%81%D9%8A%D8%AD-pagination-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r54/" rel="">Pagination (أو ما يُعرف بالتّصفيح</a><a href="http://academy.hsoub.com/code/php/wordpress/%D8%A7%D9%84%D8%AA%D9%91%D8%B5%D9%81%D9%8A%D8%AD-pagination-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r54/" rel="">)</a> إليها، سنتطرّق اليوم إلى خاصّيّة أخرى لا تقل أهمّية. قوائم التنقّل (Navigation Menu) هي إحدى ميزات القوالب، توفّر ووردبريس طريقة سهلة للتحكم بالقوائم المخصصة للقالب من داخل لوحة تحكم ووردبريس، وكل ما تحتاجه هو إضافة بضعة أسطر برمجية لتضيف دعم القوائم في قالبك.
</p>

<p>
	فهرس السلسلة:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-html-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r32/" rel="">مقدمة إلى تطوير قوالب ووردبريس: تحويل صفحة HTML إلى قالب ووردبريس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D9%8A%D8%AD-pagination-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r54/" rel="">التصفيح (Pagination) في قوالب ووردبريس</a>
	</li>
	<li>
		إضافة قوائم التنقل (Navigation Menu) إلى قالب ووردبريس (هذا الدرس)
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%B5%D9%81-%D9%88%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D9%85%D9%84%D9%81%D8%A7%D8%AA-javascript-%D9%88-css-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r79/" rel="">صف وتسجيل ملفات Javascript و CSS في قوالب ووردبريس</a>
	</li>
</ul>
<h2 id="تسجيل-القوائم">
	تسجيل القوائم
</h2>

<p>
	بدايةً في ملف <code>functions.php</code> ضمن ملفات القالب نحتاج لإضافة دالّة تقوم بتسجيل أسماء القائمة (أو القوائم) التي تريد إضافتها. كالتالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">add_action</span><span class="pun">(</span><span class="str">'init'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    register_nav_menu</span><span class="pun">(</span><span class="str">'our-custom-menu'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'القائمة الرئيسية'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">});</span></pre>

<p class="prettyprint">
	بعد ذلك يمكن التأكد من صحة إضافة القائمة عن طريق الذهاب من لوحة التحكم إلى المظهر (Appearance) ثم القوائم (Menus)، ستظهر لدينا قائمة باسم القائمة الرئيسية في تبويب إدارة موضع القوائم.
</p>

<p>
	تأخذ دالّة <a href="http://codex.wordpress.org/Function_Reference/register_nav_menu" rel="external nofollow"><code>register_nav_menu</code></a> محدّدين هما: المكان (Location) والوصف (Description).
</p>

<p>
	محدّد المكان يستخدم كمعرّف للقائمة، حيث يتم طلب محتوى القائمة ضمن ملفات القالب عن طريق محدّد المكان (location) الذي قمنا بتعيينه أثناء تسجيل القائمة. في حالتنا قمنا بوضع قيمة المحدد هي: <span style="font-family:courier new,courier,monospace;">our-custom-menu</span>.<br>
	والوصف يتم استخدامه عند عرض القائمة في لوحة التحكم ليكون أنسب وأسهل للقراءة من محدد المكان، في حالتنا قمنا بوضع قيمة الوصف هي: <strong>القائمة الرئيسية</strong>.
</p>

<p>
	يمكننا تسجيل أكثر من قائمة في آن واحد عن طريق استخدام دالّة <a href="http://codex.wordpress.org/Function_Reference/register_nav_menus" rel="external nofollow"><code>register_nav_menus</code></a> التي تستخدم بشكل مشابه لدالّة <code>register_nav_menu</code> لكن المحدّدات تكون على شكل مصفوفة اسميّة (Associative Array)، كل عنصر في المصفوفة يمثّل قائمة واحدة بحيث يكون مفتاح العنصر هو محدّد المكان وقيمة العنصر هي محدّد الوصف.
</p>

<p>
	في قالبنا لا نحتاج سوى لقائمة واحدة، في ما يلي كيفية تسجيل أكثر من قائمة معًا:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="str">'init'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    register_nav_menus</span><span class="pun">([</span><span class="pln">
        </span><span class="str">'our-custom-menu'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'القائمة الرئيسية'</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'our-second-menu'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'القائمة الفرعية'</span><span class="pun">,</span><span class="pln">
    </span><span class="pun">]);</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	كما ننوه إلى وجود دالّة معاكسة لدالّة تسجيل القوائم هي <a href="http://codex.wordpress.org/Function_Reference/unregister_nav_menu" rel="external nofollow"><code>unregister_nav_menu</code></a> لكننا لن نتطرّق إليها الآن.
</p>

<h2 id="إظهار-القائمة-في-القالب">
	إظهار القائمة في القالب
</h2>

<p>
	الخطوة الأخيرة ضمن القالب هي عرضه في المكان المناسب.<br>
	في القالب الذي نستعمله نجد أن موقع القوائم أصبح في ملف <code>header.php</code>، في السطر 30 من الملف نجد وسم <code>&lt;section class="top-bar-section"&gt;</code>، نريد أن نضع القائمة بدلاً من وسم <code>&lt;ul&gt;</code> الموجود بداخله.
</p>

<p>
	نقوم بحذف وسم <code>&lt;ul&gt;</code> مع محتواه، ثم نستخدم السطر البرمجيّ التالي لعرض القائمة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pun">&lt;?</span><span class="pln">php wp_nav_menu</span><span class="pun">([</span><span class="str">'theme_location'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'our-custom-menu'</span><span class="pun">]);</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<p>
	تقبل دالّة <code>wp_nav_menu</code> مُحدداً واحداً هو مصفوفة تحوي عددًا من الإعدادات، الإعداد الوحيد الضروري هو <code>theme_location</code> ويتم استخدامه كما في السطر البرمجي السابق. يمثل هذا المحدّد قيمة محدّد المكان السابقة التي استخدمناها أثناء تسجيل قائمة جديدة والتي كانت: <code>our-custom-menu</code>.<br>
	في حال لم يتم إدخال هذا المحدّد تقوم ووردبريس باستخدام قيمة إعداد <code>menu</code> (سنأتي إليه في الفقرة التالية)، وإن لم تجد قيمة فسيتم عرض أول قائمة غير فارغة تجدها ووردبريس، وفي حال عدم وجود أي قوائم غير فارغة وعدم تمرير محدّد المكان فلا يتم عرض شيء.
</p>

<p>
	إن ألقينا نظرة على القالب من المتصفح سنجد أن شكل عناصر القائمة أصبح مختلف قليلاً عن الشكل الذي كان عليه، وذلك ﻷن الدالّة تقوم بإضافة وسم <code>&lt;div&gt;</code> محيط بوسوم القائمة.
</p>

<p>
	في الفقرة التالية سنتعرف على بقية الإعدادات التي يمكن أن نستخدمها مع دالّة <code>wp_nav_menu</code> والتي ستمكننا من إظهار القائمة على الشكل الأنسب.
</p>

<h2 id="إعدادات-دالة-wpnavmenu">
	إعدادات دالة <code>wp_nav_menu</code>
</h2>

<p>
	كما قلنا من قبل فإن دالّة <code>wp_nav_menu</code> تأخذ محدّداً واحداً هو مصفوفة تحوي مجموعة إعدادات، المبرمج ليس مضطراً لإدخال جميع الإعدادات، يمكنه إدخال بعضها والباقي ستقوم ووردبريس بمعالجته وإسناد قيمته الافتراضية. الإعدادات بشكل كامل هي:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pun">&lt;?</span><span class="pln">php
$defaults </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
    </span><span class="str">'theme_location'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'menu'</span><span class="pln">            </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'container'</span><span class="pln">       </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'div'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'container_class'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'container_id'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'menu_class'</span><span class="pln">      </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'menu'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'menu_id'</span><span class="pln">         </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'echo'</span><span class="pln">            </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'fallback_cb'</span><span class="pln">     </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'wp_page_menu'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'before'</span><span class="pln">          </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'after'</span><span class="pln">           </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'link_before'</span><span class="pln">     </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'link_after'</span><span class="pln">      </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'items_wrap'</span><span class="pln">      </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'&lt;ul id="%1$s" class="%2$s"&gt;%3$s&lt;/ul&gt;'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'depth'</span><span class="pln">           </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'walker'</span><span class="pln">          </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

wp_nav_menu</span><span class="pun">(</span><span class="pln"> $defaults </span><span class="pun">);</span><span class="pln">

</span><span class="pun">?&gt;</span></pre>

<h3>
	theme_location
</h3>

<ul>
<li>
		مكان القائمة ضمن القالب، كما تم تحديده أثناء تسجيل القائمة باستخدام دالّة <code>register_nav_menu</code>، ليكون بإمكان المستخدم تحديد القائمة المطلوبة للمكان الذي تم تسجيله (دون تقييد المستخدم بقائمة واحدة).
	</li>
	<li>
		القيمة الافتراضية: '' (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	menu
</h3>

<ul>
<li>
		القائمة المطلوب عرضها، تقبل قيمة المعرّف الرقمي (ID)، أو الاسم اللطيف (slug)، أو الاسم الخاص بالقائمة (وليس مكان القائمة ضمن القالب).
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">''</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	container
</h3>

<ul>
<li>
		لتحديد إن كان مطلوبًا من ووردبريس إحاطة وسم <code>&lt;ul&gt;</code> بوسم آخر أم لا، القيمة المسموحة هي <code>div</code> أو <code>nav</code>، وفي حال عدم الرغبة بإحاطة القائمة بوسم نجعل القيمة <code>false</code>.
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span>div<span style="line-height: 11.1999998092651px; text-align: right;">'</span>
	</li>
</ul>
<h3>
	container_class
</h3>

<ul>
<li>
		الصنف الخاص بوسم html المحيط بالقائمة، بشكل افتراضي يأخذ الصنف الشكل: <code>menu-{menu slug}-container</code> حيث يكون <code>{menu slug}</code> هو الاسم اللطيف للقائمة.
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span><span style="line-height: 11.1999998092651px; text-align: right;">'</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	container_id
</h3>

<ul>
<li>
		معرّف CSS (ID) الذي يتم تطبيقه على الوسم المحيط (container).
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span><span style="line-height: 11.1999998092651px; text-align: right;">'</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	menu_class
</h3>

<ul>
<li>
		الصنف الذي يتم تطبيقه على وسم القائمة <code>&lt;ul&gt;</code>، يمكن أن يتم وضع أكثر من صنف يتم الفصل بينهم بفراغات (space).
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span>menu<span style="line-height: 11.1999998092651px; text-align: right;">'</span>
	</li>
</ul>
<h3>
	menu_id
</h3>

<ul>
<li>
		معرّف (ID) CSS الذي يتم تطبيقه على وسم القائمة <code>&lt;ul&gt;</code>. بشكل افتراضي تكون قيمته: <code>menu-{menu slug}</code> حيث <code>{menu slug}</code> هو الاسم اللطيف للقائمة؛ في حال حدوث تكرار بالاسم يتم إضافة إشارة <code>-</code> مع رقم مميز يبدأ من 1 ويزيد عند كل تكرار، مثلًا: <code>menu-{menu slug}-1</code>، <code>menu-{menu slug}-2</code>، إلخ.
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span><span style="line-height: 11.1999998092651px; text-align: right;">'</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	echo
</h3>

<ul>
<li>
		فيما إن كنا نريد إظهار القائمة مباشرة في مكان استخدام دالّة <code>wp_nav_menu</code> أو نريد إرجاعها (return).
	</li>
	<li>
		القيمة الافتراضية: true
	</li>
</ul>
<h3>
	fallback_cb
</h3>

<ul>
<li>
		دالّة ليتم استخدامها في حال لم تكن القائمة موجودة، نضع قيمتها <code>false</code> في حال لم نكن نريد استخدام دالّة. ويتم تمرير محدّد <code>$args</code> للدالّة التي يتم استخدامها.
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span>wp_page_menu<span style="line-height: 11.1999998092651px; text-align: right;">'</span>
	</li>
</ul>
<h3>
	before
</h3>

<ul>
<li>
		إظهار نصّ قبل وسم <code>&lt;a&gt;</code>.
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span><span style="line-height: 11.1999998092651px; text-align: right;">'</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	after
</h3>

<ul>
<li>
		إظهار نصّ بعد وسم <code>&lt;/a&gt;</code>.
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span><span style="line-height: 11.1999998092651px; text-align: right;">'</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	link_before
</h3>

<ul>
<li>
		إظهار نصّ قبل نصّ الرابط.
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span><span style="line-height: 11.1999998092651px; text-align: right;">'</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	link_after
</h3>

<ul>
<li>
		إظهار نصّ بعد نصّ الرابط.
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span><span style="line-height: 11.1999998092651px; text-align: right;">'</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h3>
	items_wrap
</h3>

<ul>
<li>
		يتم تفسيرها بنفس الطريقة التي يتم تفسير محدّد الهيئة (format) لدالّة <a href="http://php.net/sprintf" rel="external nofollow"><code>sprintf</code></a>.
	</li>
	<li>
		يحدث تعاون بين المحددات الأخرى عن طريق رموز رقمية. <code>%1$s</code> تُستبدل بقيمة محدد <code>menu_id</code>، <code>%2$s</code> تُستبدل بقيمة محدد <code>menu_class</code>، و <code>%3$s</code> تُستبدل بقيمة عناصر القائمة (وسوم <code>&lt;li&gt;</code>).
	</li>
	<li>
		إن تم استبعاد أي رمز رقمي من هذا المحدّد، سيتم استبعاد المحدّد المرتبط به من وسوم القائمة.
	</li>
	<li>
		القيمة الافتراضية: <code>'&lt;ul id="%1$s" class="%2$s"&gt;%3$s&lt;/ul&gt;'</code>
	</li>
</ul>
<h3>
	depth
</h3>

<ul>
<li>
		يمثل عدد المستويات الهرمية التي سيتم استخدامها، حيث رقم <code>0</code> يعني جميع المستويات. ويتم استخدام قيمة <code>-1</code> لتحويل جميع المستويات إلى مستوى واحد فقط.
	</li>
	<li>
		القيمة الافتراضية: 0
	</li>
</ul>
<h3>
	walker
</h3>

<ul>
<li>
		يتم تمرير عنصر هو نسخة من صنف <code>Walker_Nav_Menu</code> أو من صنف يرث من ذلك الصنف.
	</li>
	<li>
		الهدف من هذا المحدد هو التحكم بشكل كامل بالأصناف (classes) والمحدّدات (IDs) ووسوم HTML للقائمة. يمكن العودة <a href="http://codex.wordpress.org/Function_Reference/wp_nav_menu#Using_a_Custom_Walker_Function" rel="external nofollow">لتوثيق WordPress</a> للاطلاع على المثال المقدم
	</li>
	<li>
		القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span><span style="line-height: 11.1999998092651px; text-align: right;">'</span> (سلسلة نصية فارغة)
	</li>
</ul>
<h2 id="تحسين-ظهور-القائمة-في-القالب">
	تحسين ظهور القائمة في القالب
</h2>

<p>
	بعد أن تعرّفنا على إعدادات إظهار القائمة، دعونا نقوم بتعديلها في قالبنا لتصبح مناسبة أكثر.
</p>

<p>
	إن شاهدنا مصدر HTML للصفحة الرئيسية من المتصفح، نجد أننا نحتاج لإزالة الوسم المحيط بالقائمة (container)، ونحتاج لإضافة صنف <code>right</code> لوسم <code>&lt;ul&gt;</code> المحيط بعناصر القائمة.
</p>

<p>
	يمكننا تعديل السطر البرمجي في ملف <code>header.php</code> ليصبح:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pun">&lt;?</span><span class="pln">php wp_nav_menu</span><span class="pun">([</span><span class="pln">
    </span><span class="str">'theme_location'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'our-custom-menu'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'container'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'menu_class'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'right'</span><span class="pun">,</span><span class="pln">
</span><span class="pun">]);</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<p>
	قمنا بجعل قيمة الوسم المحيط (container) تساوي <code>false</code> ﻷننا لا نريد إحاطة القائمة بأي وسم، فنحن من البداية نقوم بإحاطة القائمة بوسم <code>&lt;section&gt;</code> في قالب HTML الذي نستخدمه.<br>
	وقمنا أيضًا بإضافة قيمة محدد <code>menu_class</code> لتساوي: <code>right</code>، ليتم إضافة صنف <code>right</code> لوسم القائمة <code>&lt;ul&gt;</code> ليظهر بشكل جيّد.
</p>

<p>
	بهذا نكون قد جعلنا القائمة تظهر بشكل مرن، ونعطي المستخدم إمكانية أكبر لاختيار ما يناسبه من عناصر للقائمة من خلال لوحة التحكم، وبنفس الوقت جعلنا القائمة التي يختارها المستخدم تظهر بأفضل شكل ضمن القالب الذي نعمل عليه.
</p>

<h2 id="الشريط-الجانبي">
	الشريط الجانبي
</h2>

<p>
	الأشرطة الجانبية (Sidebars) هي إحدى ميزات القوالب، هو بشكل بسيط عمود شاقولي يقوم القالب بتزويده لعرض معلومات مختلفة عن المحتوى الأساسي للموقع، تقوم الأشرطة الجانبية بعرض ودجات/مربعات (widgets) يقوم مدير المدونة بالتحكم بها.
</p>

<p>
	التعامل مع الشريط الجانبي يشبه إلى حدّ كبير التعامل مع القوائم.
</p>

<h3 id="تسجيل-شريط-جانبي">
	تسجيل شريط جانبي
</h3>

<p>
	لنقم معاً بإضافة ما يلي إلى ملف <code>functions.php</code> لتعريف شريط جانبيّ جديد:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">add_action</span><span class="pun">(</span><span class="str">'widgets_init'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    register_sidebar</span><span class="pun">();</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	إن قمنا بزيارة لوحة التحكم، نجد أن هناك عنصراً جديداً في قائمة المظهر (Appearance) هو الودجات (Widgets)، بداخله يظهر لنا الشريط الجانبي الجديد بعنوان <strong>الشريط الجانبي 1</strong>، إن قمنا بإضافة شريط جانبي آخر سيأخذ نفس الاسم لكن بزيادة الرقم بمقدار واحد. والسبب أننا عندما قمنا بتسجيل الشريط الجانبي لم نحدد له اسماً أو معرّفاً. سنقوم بهذا الآن بعد أن نتعرف على إعدادات هذه الدالّة.
</p>

<h3 id="إعدادات-دالة-registersidebar">
	إعدادات دالّة <code>register_sidebar</code>
</h3>

<p>
	الإعدادات الافتراضية:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">$args </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
    </span><span class="str">'name'</span><span class="pln">          </span><span class="pun">=&gt;</span><span class="pln"> sprintf</span><span class="pun">(</span><span class="pln"> __</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Sidebar %d'</span><span class="pln"> </span><span class="pun">),</span><span class="pln"> $i </span><span class="pun">),</span><span class="pln">
    </span><span class="str">'id'</span><span class="pln">            </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"sidebar-$i"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'description'</span><span class="pln">   </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'class'</span><span class="pln">         </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'before_widget'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'&lt;li id="%1$s" class="widget %2$s"&gt;'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'after_widget'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"&lt;/li&gt;\n"</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'before_title'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'&lt;h2 class="widgettitle"&gt;'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'after_title'</span><span class="pln">   </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">"&lt;/h2&gt;\n"</span><span class="pun">,</span><span class="pln">
</span><span class="pun">);</span></pre>

<p>
	شرح الإعدادات:
</p>

<h3>
	name
</h3>

<p>
	اسم الشريط الجانبي (القيمة الافتراضية هي ترجمة كلمة ‘Sidebar’ مع معرّف رقميّ).
</p>

<h3>
	id
</h3>

<p>
	معرّف الشريط الجانبي - يجب أن يكون بأحرف صغيرة (lowercase), دون فراغات (القيمة الافتراضية هي معرّف رقمية يتم زيادته تلقائياً ).
</p>

<h3>
	description
</h3>

<p>
	وصف نصّي لماهيّة/مكان الشريط الجانبي. يظهر في واجهة إدارجة الودجات في لوحة التحكم. (القيمة الافتراضية: فارغة)
</p>

<h3>
	class
</h3>

<p>
	صنف CSS ليتم إسناده للشريط الجانبي في صفحة إدارة الودجات، ولن يتم استخدام هذا الصنف في القالب.
</p>

<p>
	<strong>ملاحظة</strong><em>:</em> سيتم إضافة كلمة “sidebar” إلى قيمة الصنف. مثلاً: إن وضعنا اسم الصنف: <strong>tal</strong> ستكون قيمة الصنف هي: <strong>sidebar-tal</strong>. (القيمة الافتراضية: فارغة).
</p>

<h3>
	before_widget
</h3>

<p>
	وسم/وسوم HTML ليتم وضعها قبل كل واحد من الودجات (widget) (القيمة الافتراضية: ‘<code>&lt;li id="%1$s" class="widget %2$s"&gt;</code>‘).<br><em>ملاحظة:</em> يتم استخدام دالّة <code>sprintf</code> لاستبدال المتحولات.
</p>

<h3>
	after_widget
</h3>

<p>
	وسم/وسوم HTML ليتم وضعها بعد كل واحد من الودجات (widget) (القيمة الافتراضية: <span style="line-height: 11.1999998092651px; text-align: right;">'</span>\n<span style="line-height: 11.1999998092651px; text-align: right;">'</span>).
</p>

<h3>
	before_title
</h3>

<p>
	وسم/وسوم HTML ليتم وضعها قبل كل عنوان (القيمة الافتراضية: <code>&lt;h2 class="widgettitle"&gt;</code>).
</p>

<h3>
	after_title
</h3>

<p>
	وسم/وسوم HTML ليتم وضعها بعد كل عنوان (القيمة الافتراضية: “<code>&lt;/h2&gt;\n</code>“).
</p>

<h3 id="عرض-الشريط-الجانبي-في-القالب">
	عرض الشريط الجانبي في القالب
</h3>

<p>
	نتوجه إلى ملف <code>sidebar.php</code>، ونقوم بتعديله ليصبح كالتالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"large-4 columns sidebar"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="pun">&lt;?</span><span class="pln">php dynamic_sidebar</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	قمنا باستبدال النصّ الموجود مسبقاً “Sidebar” بدالّة <a href="http://codex.wordpress.org/Function_Reference/dynamic_sidebar" rel="external nofollow"><code>()dynamic_sidebar</code></a> التي وظيفتها عرض محتويات الشريط الجانبي في المكان المحدد.
</p>

<p style="text-align: center;">
	<em><a class="ipsAttachLink ipsAttachLink_image" data-fileid="1341" href="https://academy.hsoub.com/uploads/monthly_2015_04/sidebar-without-config.png.6c1c9f29ffd456bbadee7df325409ccf.png" rel="external"><img alt="sidebar-without-config.png" class="ipsImage ipsImage_thumbnailed" data-fileid="1341" src="https://academy.hsoub.com/uploads/monthly_2015_04/sidebar-without-config.thumb.png.5ed23476a35de9bc4ab6b358045319c5.png"></a></em>
</p>

<p>
	يمكن أن نمرّر قيمة واحدة لتلك الدالّة إما أن تكون اسم (name) أو معرّف (ID) الشريط الجانبي. وفي حال عدم تمرير أي قيمة يتم عرض الشريط الجانبي الأول.
</p>

<h2 id="تخصيص-الشريط-الجانبي">
	تخصيص الشريط الجانبي
</h2>

<p>
	كما لاحظنا فشكل ودجات الشريط الجانبي غير مقبولة، لنقم معًا بتحسين مظهرها عن طريق إحاطة كل واحدة من الودجات (widgets) بوسم <code>&lt;div class="card"&gt;</code> الذي كان موجودًا في ملف <code>sidebar.php</code> قبل استخدام دالّة عرض الشريط الجانبي.
</p>

<p>
	لنقم باستخدام إعدادات دالّة <code>()register_sidebar</code> التي مرّت معنا في الفقرات السابقة، في ملف <code>functions.php</code> نقوم بتعديل الدالّة لتصبح:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">register_sidebar</span><span class="pun">([</span><span class="str">'before_widget'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'&lt;div class="card"&gt;'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'after_widget'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'&lt;/div&gt;'</span><span class="pun">]);</span></pre>

<p>
	قمنا بتمرير إعدادَين فقط لإضافة وسم <code>div</code> قبل واحدة من الودجات وإضافة إغلاق الوسم بعد كل واحدة منها.
</p>

<p style="text-align: center;">
	<em><a class="ipsAttachLink ipsAttachLink_image" data-fileid="1340" href="https://academy.hsoub.com/uploads/monthly_2015_04/sidebar-with-config.png.3f447f296b0ab9ccdf48f71880f25274.png" rel="external"><img alt="sidebar-with-config.png" class="ipsImage ipsImage_thumbnailed" data-fileid="1340" src="https://academy.hsoub.com/uploads/monthly_2015_04/sidebar-with-config.thumb.png.97e98306b2eec7bc529b120a098beaaa.png"></a></em>
</p>

<p>
	بهذا نكون قد انتهينا من إضافة قائمة رئيسية وشريط جانبي إلى القالب، وتعلمنا معاً كيف يمكن تخصيص شكل القائمة والشريط الجانبي ليتناسب مع القالب بأفضل شكل ممكن.
</p>
]]></description><guid isPermaLink="false">68</guid><pubDate>Mon, 20 Apr 2015 06:36:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x635;&#x641;&#x64A;&#x62D; (Pagination) &#x641;&#x64A; &#x642;&#x648;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D9%8A%D8%AD-pagination-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r54/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/wp-pagination_480x300.png.b5d49f9263d064e11dba7a1d4482e8c7.png" /></p>

<p id="مقدمة">
	تحدثنا في الدرس السابق <a href="http://academy.hsoub.com/code/php/wordpress/-r32/" rel="">مُقدّمة إلى تطوير قوالب ووردبريس</a> حول إنشاء قالب ووردبريس بسيط، واليوم سنقوم بإكمال العمل عليه لعرض أرقام الصفحات أو عرض رابطيّ السابق والتالي للتنقل بين الصفحات والوصول إلى جميع المقالات ضمن المدوّنة.
</p>

<p>
	عند وجود عدد كبير من المقالات في المدوّنة، فلن يتم عرضها جميعاً في صفحة واحدة، بل يتم تقسيمها على عدد من الصفحات، بشكل افتراضي يتم عرض 10 مقالات في الصفحة الرئيسية أو الأرشيف (تصنيف أو وسم)، ويمكن تغيير رقم المقالات في الصفحة الواحدة من لوحة التحكم.
</p>

<p>
	فهرس السلسلة:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-html-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r32/" rel="">مقدمة إلى تطوير قوالب ووردبريس: تحويل صفحة HTML إلى قالب ووردبريس</a>
	</li>
	<li>
		التصفيح (Pagination) في قوالب ووردبريس (هذا الدرس)
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%91%D9%84-navigation-menu-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-wordpress-r68/" rel="">إضافة قوائم التنقل (Navigation Menu) إلى قالب ووردبريس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%B5%D9%81-%D9%88%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D9%85%D9%84%D9%81%D8%A7%D8%AA-javascript-%D9%88-css-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r79/" rel="">صف وتسجيل ملفات Javascript و CSS في قوالب ووردبريس</a>
	</li>
</ul>
<h2 id="pagination">
	Pagination
</h2>

<p>
	تقدّم ووردبريس دالّة مخصّصة لعرض أرقام الصفحات هي <a href="http://codex.wordpress.org/Function_Reference/paginate_links" rel="external nofollow"><code>()paginate_links</code></a>. سنقوم بالاطلاع على كيفية استخدامها وخياراتها، وننوه بوجود طرق أخرى لعرض أرقام الصفحات، مثل إضافة <a href="https://wordpress.org/plugins/wp-pagenavi/" rel="external nofollow">WP-PageNavi</a>.
</p>

<p>
	يتم استخدام الدالّة بهذه الطريقة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pun">&lt;?</span><span class="pln">php echo paginate_links</span><span class="pun">(</span><span class="pln">$args</span><span class="pun">);?&gt;</span></pre>

<p>
	حيث متحول <span style="font-family:courier new,courier,monospace;"><code>args$</code></span> هو مصفوفة تحوي إعدادات مخصصة لهذه الدالّة، يمكن أن نستخدم الإضافة دون تمرير هذا المتحول، أو يمكن أن تكون قيمة هذه المتحول هي بعض من الإعدادات الخاصة بالدالّة وليس جميعها.
</p>

<p>
	الإعدادات الكاملة هي كالتالي بقيمها الافتراضية:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pun">&lt;?</span><span class="pln">php
$args </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
    </span><span class="str">'base'</span><span class="pln">               </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'%_%'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'format'</span><span class="pln">             </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'?page=%#%'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'total'</span><span class="pln">              </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'current'</span><span class="pln">            </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'show_all'</span><span class="pln">           </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">False</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'end_size'</span><span class="pln">           </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'mid_size'</span><span class="pln">           </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'prev_next'</span><span class="pln">          </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">True</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'prev_text'</span><span class="pln">          </span><span class="pun">=&gt;</span><span class="pln"> __</span><span class="pun">(</span><span class="str">'« Previous'</span><span class="pun">),</span><span class="pln">
    </span><span class="str">'next_text'</span><span class="pln">          </span><span class="pun">=&gt;</span><span class="pln"> __</span><span class="pun">(</span><span class="str">'Next »'</span><span class="pun">),</span><span class="pln">
    </span><span class="str">'type'</span><span class="pln">               </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'plain'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'add_args'</span><span class="pln">           </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">False</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'add_fragment'</span><span class="pln">       </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'before_page_number'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'after_page_number'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pln">
</span><span class="pun">);</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

<p>
	يمكننا أن نضع بعض هذه الإعدادات في المتحول، وتقوم ووردبريس بمعالجة الإعدادات التي نقدّمها للدالّة، بحيث تضيف للإعدادات المُدخلة ما يكملها من الإعدادات الافتراضية.
</p>

<p>
	سنقوم الآن باستخدام هذه الدالّة ورؤية كيف تظهر الروابط دون وجود إعدادات للدالّة، نضع ما يلي في نهاية ملف <code>index.php</code> فيصبح:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pln">    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"medium-12 columns"</span><span class="tag">&gt;</span><span class="pln">
            </span><span class="pun">&lt;?</span><span class="pln">php echo paginate_links</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln"> 
        </span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php
get_sidebar</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

<p>
	عندما نقوم بزيارة الصفحة الرئيسية للمدونة، نجد أن روابط أرقام الصفحات تظهر بشكل مشابه لهذه الصورة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="907" href="https://academy.hsoub.com/uploads/monthly_2015_03/unstyled-pagination-wordpress.png.aa70b834b49214dbf83ecc76e6613c93.png" rel="external"><img alt="unstyled-pagination-wordpress.png" class="ipsImage ipsImage_thumbnailed" data-fileid="907" src="https://academy.hsoub.com/uploads/monthly_2015_03/unstyled-pagination-wordpress.thumb.png.d504b0bbc1a0f5e4ed363a179adc4436.png"></a>
</p>

<p>
	سنرى في الفقرة التالية كيف يمكن تخصيص ظهور هذه الروابط.
</p>

<h2 id="إضافة-style-جديد">
	إضافة Style جديد
</h2>

<p>
	سنحتاج إلى إضافة Style جديد إلى القالب الذي نقوم باستخدامه، وذلك لكي تظهر أرقام الصفحات بشكل يتناسب مع باقي القالب.
</p>

<p>
	قد يتبادر للذهن في البداية أن يتم استخدام النسخ واللصق لإضافة Style جديد إلى ملف css الرئيسي. رغم أن هذا ممكن ويؤدي الغرض المطلوب، إلا أن الطريقة الأفضل هي استخدام دالّة تدعى <span style="font-family:courier new,courier,monospace;">wp_enqueue_style</span>.
</p>

<h3 id="1-إضافة-دالة-wphead-إلى-ملف-headerphp">
	1. إضافة دالّة <span style="font-family:courier new,courier,monospace;">()wp_head</span> إلى ملف <span style="font-family:courier new,courier,monospace;">header.php</span>
</h3>

<p>
	قبل إغلاق وسم <span style="font-family:courier new,courier,monospace;">&lt;/head&gt;</span> نقوم بإضافة السطر التالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pun">&lt;?</span><span class="pln">php wp_head</span><span class="pun">();?&gt;</span></pre>

<p>
	وهي دالّة مهمة جداً في أي قالب ووردبريس، حيث تقوم ووردبريس (والعديد من الإضافات) باستخدام هذه الدالّة سواءً لإضافة ملفات الشكل (CSS) أواستدعاء ملفات جافاسكريبت أو حتى إضافة وسوم إضافية تتعلق بـ SEO.
</p>

<p>
	قمنا بإضافة دالّة <span style="font-family:courier new,courier,monospace;">wp_head</span> ﻷننا نريد استخدام دالّة <span style="font-family:courier new,courier,monospace;">()wp_enqueue_style</span> التي ستقوم بإدراج وسم HTML لاستيراد ملف CSS جديد.
</p>

<h3 id="2-إضافة-ملف-css-الجديد">
	2. إضافة ملف CSS الجديد
</h3>

<p>
	نقوم بإنشاء ملف جديد هو <span style="font-family:courier new,courier,monospace;">custom.css</span>، وهو الذي سنقوم باستدعاءه من خلال دالّة<span style="font-family:courier new,courier,monospace;"> ()wp_enqueue_style</span>.
</p>

<p>
	نقوم بنسخ ولصق محتوى <a href="https://gist.github.com/AAlakkad/1f546f6c4a2975d9aab8" rel="external nofollow">هذا الرابط</a> ونضعه ضمن ملف <span style="font-family:courier new,courier,monospace;">custom.css</span> الذي أنشأناه، وهو ما سيقوم بإضافة الشكل المناسب ﻷرقام الصفحات في القالب.
</p>

<h3 id="3-استخدام-دالة-wpenqueuestyle">
	3. استخدام دالّة <span style="font-family:courier new,courier,monospace;">()wp_enqueue_style</span>
</h3>

<p>
	لنقم بفتح ملف  <span style="font-family:courier new,courier,monospace;">functions.php</span> من ملفات القالب، ولنضف عليه ما يلي:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="com">// Enqueue custom style</span><span class="pln">
add_action</span><span class="pun">(</span><span class="str">'wp_enqueue_scripts'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_enqueue_style</span><span class="pun">(</span><span class="str">'custom-pagination'</span><span class="pun">,</span><span class="pln"> get_template_directory_uri</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/custom.css'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	ما قمنا بفعله هو أننا أخبرنا ووردبريس أن تنفذ دالّة <span style="font-family:courier new,courier,monospace;">()wp_queue_style</span> عند وصول دورة تنفيذ ووردبريس إلى الحدث (action)  المُسمّى <span style="font-family:courier new,courier,monospace;">wp_enqueue_scripts</span> وهو المسؤول عن ترتيب وتنسيق وطباعة ملفات جافاسكريبت و CSS وتحليل متطلبات كل ملف -إن وجدت له متطلبات-، وفي النهاية يتم استخدام الملف/الملفات المطلوبة بعد أن يتم طلب جميع متطلباتها.
</p>

<p>
	الآن إن قمنا بفتح المصدر الخاص بالصفحة الرئيسية من المتصفح، نجد أن المصدر أصبح يحوي شيئاً مشابهاً لما يلي:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4">
<span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">'stylesheet'</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'custom-pagination-css'</span><span class="pln">  </span><span class="atn">href</span><span class="pun">=</span><span class="atv">'http://localhost:8000/wp-content/themes/my_theme/custom.css?ver=4.1'</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">'text/css'</span><span class="pln"> </span><span class="atn">media</span><span class="pun">=</span><span class="atv">'all'</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p class="prettyprint">
	<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;">وهو استدعاء ملف CSS خاص، الذي أردنا وجوده قبل البدء بعرض إرقام الصفحات.</span>
</p>

<p>
	لننظر الآن كيف تبدو أرقام الصفحات:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="908" href="https://academy.hsoub.com/uploads/monthly_2015_03/styled-pagination-wordpress.png.b2619e73cf03f7e9b6f369ffa98bd60d.png" rel="external"><img alt="styled-pagination-wordpress.png" class="ipsImage ipsImage_thumbnailed" data-fileid="908" src="https://academy.hsoub.com/uploads/monthly_2015_03/styled-pagination-wordpress.thumb.png.2d15dec1b570d13966d81609ef48f850.png"></a>
</p>

<p>
	أجمل بكثير من سابقتها أليس كذلك؟
</p>

<h2 id="شرح-إعدادات-دالة-paginatelinks">
	شرح إعدادات دالّة <span style="font-family:courier new,courier,monospace;">paginate_links</span>
</h2>

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

<h3>
	base
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها سلسلة نصيّة.
	</li>
	<li>
		القيمة الافتراضية: %_%
	</li>
	<li>
		تُستخدم للإشارة إلى الرابط، الذي سيتم استخدامه لإنشاء روابط الصفحات.
	</li>
	<li>
		في رابط مثل: <span style="font-family:courier new,courier,monospace;"><a href="http://example.com/all_posts.php%_%" ipsnoembed="true" rel="external nofollow">http://example.com/all_posts.php%_%</a></span> يتم استبدال القيمة الافتراضية: <code>%_%</code> بقيمة format التي سنتحدث عنها في الفقرة التالية.
	</li>
</ul>
<h3>
	format
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها سلسلة نصيّة.
	</li>
	<li>
		القيمة الافتراضية: <code>?page=%#%</code>
	</li>
	<li>
		تُستخدم كهيكل للصفحات. في حال كنا نريد أو كنا نستخدم عناوين نظيفة (pretty permalinks) ستكون القيمة هي <code>/page/%_%</code>، حيث تعبير <code>%_%</code> يتم استبداله برقم الصفحة.
	</li>
</ul>
<h3>
	total
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها رقميّ.
	</li>
	<li>
		القيمة الافتراضية: 1
	</li>
	<li>
		مجموع عدد الصفحات، عند استخدام دالّة <code>()paginate_links</code> داخل حلقة ووردبريس، تكون القيمة الافتراضية تساوي خاصّية <code>max_num_pages$</code> في <a href="http://codex.wordpress.org/Class_Reference/WP_Query" rel="external nofollow"><code>WP_Query</code></a>.
	</li>
</ul>
<h3>
	current
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها رقميّ.
	</li>
	<li>
		القيمة الافتراضية: 0
	</li>
	<li>
		رقم الصفحة الحالية.
	</li>
</ul>
<h3>
	show_all
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها قيمة منطقية (true أو false).
	</li>
	<li>
		القيمة الافتراضية: false
	</li>
	<li>
		إذا كانت القيمة <code>true</code> عندها سيتم إظهار جميع الصفحات بدلاً من قائمة قصيرة من الأرقام المجاورة لرقم الصفحات الحالية. بشكل افتراضي هذا الخيار تكون قيمته <code>false</code> ويتم التحكم به عن طريق الخيارين <code>end_size</code> و <code>mid_size</code>.
	</li>
</ul>
<h3>
	end_size
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها رقميّ.
	</li>
	<li>
		القيمة الافتراضية: 1
	</li>
	<li>
		عدد الأرقام عند بداية ونهاية أطراف القائمة.
	</li>
</ul>
<h3>
	mid_size
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها رقميّ.
	</li>
	<li>
		القيمة الافتراضية: 2
	</li>
	<li>
		عدد الأرقام على جانبيّ الصفحة الحالية، (مع ملاحظة أن الرقم لا يشمل الصفحة الحالية).
	</li>
</ul>
<h3>
	prev_next
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها قيمة منطقية (true أو false).
	</li>
	<li>
		القيمة الافتراضية: true
	</li>
	<li>
		لتحديد إن كنا نريد روابط التالي والسابق أن يتم استخدامها في القائمة أم لا.
	</li>
</ul>
<h3>
	prev_text
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها سلسلة نصّية.
	</li>
	<li>
		القيمة الافتراضية: <code>__('« Previous')</code> حيث <code>__()</code> هي دالّة مسؤولة عن الترجمة.
	</li>
	<li>
		نص رابط الصفحة السابقة، تعمل فقط إن كان الخيار السابق (prev_next) فعّالاً (قيمته true).
	</li>
</ul>
<h3>
	next_text
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها سلسلة نصّية.
	</li>
	<li>
		القيمة الافتراضية: <code>__('Next »')</code> حيث <code>__()</code> هي دالّة مسؤولة عن الترجمة.
	</li>
	<li>
		نص رابط الصفحة التاية، تعمل فقط إن كان خيار (prev_next) فعّالاً (قيمته true).
	</li>
</ul>
<h3>
	type
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها سلسلة نصّية.
	</li>
	<li>
		القيمة الافتراضية: ‘plain’
	</li>
	<li>
		تتحكم بشكل القيمة التي تقوم الدالّة بإرجاعها. القيمة الممكنة هي:
		<ul>
<li>
				plain: تكون القيمة التي يتم ارجاعها عبارة عن سلسلة نصّية مؤلفة من روابط مفصول بينها بمحرف السطر الجديد.
			</li>
			<li>
				array: تكون القيمة التي يتم ارجاعها عبارة عن مصفوفة من روابط الصفحات لتوفّر تحكم كامل بكيفية الظهور.
			</li>
			<li>
				list: تكون القيمة التي يتم ارجاعها عبارة عن قائمة HTML غير مرتّبة (ul).
			</li>
		</ul>
</li>
</ul>
<h3>
	add_args
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها مصفوفة.
	</li>
	<li>
		القيمة الافتراضية: false
	</li>
	<li>
		مصفوفة اسمية من المحددات ليتم إضافتها إلى الرابط، تكون المصفوفة على شكل: اسم =&gt; قيمة.
	</li>
</ul>
<h3>
	add_fragment
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها سلسلة نصيّة.
	</li>
	<li>
		القيمة الافتراضية: لا يوجد قيمة.
	</li>
	<li>
		نص لتتم إضافته إلى نهاية كل رابط بشكل مباشر (يمكن تمرير متحولات <code>GET</code> عن طريق هذا الخيار، بشكل يشبه خيار<span style="font-family:courier new,courier,monospace;"> add_args</span> لكن على شكل سلسلة نصية بدلاً من مصفوفة).
	</li>
</ul>
<h3>
	before_page_number
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها سلسلة نصيّة.
	</li>
	<li>
		القيمة الافتراضية: لا يوجد قيمة.
	</li>
	<li>
		نص ليتم إظهاره قبل كل رقم صفحة (النص وليس الرابط).
	</li>
</ul>
<h3>
	after_page_number
</h3>

<ul>
<li>
		(القيمة اختيارية)، نوعها سلسلة نصيّة.
	</li>
	<li>
		القيمة الافتراضية: لا يوجد قيمة.
	</li>
	<li>
		نص لتتم إضافته بعد رقم الصفحة (النص وليس الرابط).
	</li>
</ul>
<h2>
	أزرار التالي والسابق
</h2>

<p>
	قد يفضّل البعض استخدام أزرار "التالي" و"السابق" بدلاً من أرقام الصفحات، أو ربما يتطلب القالب الذي يعملون عليه هذه الأزرار.
</p>

<p>
	تقدّم ووردبريس دالّة واحدة لعرض الرابطين معاً (التالي - السابق) هي: <a href="http://codex.wordpress.org/Function_Reference/posts_nav_link" rel="external nofollow"><code>posts_nav_links</code></a>.
</p>

<p>
	لنقم بوضع هذه الدالّة بدلاً من دالّة إظهار أرقام الصفحات التي تحدثنا عنها سابقاً:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pun">&lt;?</span><span class="pln">php posts_nav_link</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<p>
	يصبح القالب بهذا الشكل:
</p>

<p style="margin-top: 0px; margin-left: 0px; margin-right: 0px; text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="909" href="https://academy.hsoub.com/uploads/monthly_2015_03/wordpress-pagination-next-pages-previous-pages.png.e4a19d2732acca9a6532f7cbd98f460b.png" rel="external"><img alt="wordpress-pagination-next-pages-previous-pages.png" class="ipsImage ipsImage_thumbnailed" data-fileid="909" src="https://academy.hsoub.com/uploads/monthly_2015_03/wordpress-pagination-next-pages-previous-pages.thumb.png.b41c36ab76242ba5812964392fe57b59.png"></a>
</p>

<p>
	يمكن أن تأخذ الدالّة ثلاثة محددات كلها اختيارية، هي:
</p>

<ul>
<li>
		<code><span style="font-family:courier new,courier,monospace;">sep$</span></code>: (سلسلة نصية)، يمثل النصّ المعروض بين الرابطين.

		<ul>
<li>
				القيمة الافتراضية: <code>' — '</code>
			</li>
		</ul>
</li>
	<li>
		<code>prelabel$</code>: (سلسلة نصية)، اسم رابط الصفحة السابقة.
		<ul>
<li>
				القيمة الافتراضية: <code>'« Previous Page'</code>
			</li>
		</ul>
</li>
	<li>
		<code>nxtlabel$</code>: (سلسلة نصية)، اسم رابط الصفحة التالية.
		<ul>
<li>
				القيمة الافتراضية: <code>'Next Page »'</code>
			</li>
		</ul>
</li>
</ul>
<p>
	لنقم معاً بتعديل هذه الإعدادات لتصبح كالتالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="pun">&lt;?</span><span class="pln">php
    posts_nav_link</span><span class="pun">(</span><span class="str">' - '</span><span class="pun">,</span><span class="pln"> </span><span class="str">'&amp;laquo; السابق'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'التالي &amp;raquo;'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

<p>
	تظهر لنا التعديلات في القالب كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="911" href="https://academy.hsoub.com/uploads/monthly_2015_03/wordpress-pagination-next-previous.png.495a139988b4675fb4b0bf251c8fb25a.png" rel="external"><img alt="wordpress-pagination-next-previous.png" class="ipsImage ipsImage_thumbnailed" data-fileid="911" src="https://academy.hsoub.com/uploads/monthly_2015_03/wordpress-pagination-next-previous.thumb.png.78bcf47ec9528ae23142b7f75ac1d373.png"></a>
</p>

<p>
	ما رأيكم لو نختم الدرس بخدعة بسيطة، نقوم من خلالها بجعل روابط التالي السابقة تظهر بشكل مشابه لأرقام الصفحات؟ <img alt=":)" src="https://academy.hsoub.com/uploads/monthly_2015_02/smile.png.cf72ab87c1aaefd42371e0a7de39cfae.png" title=":)"></p>

<p>
	سأخبركم بتلميح: تكمن الخدعة بالاستفادة من المحدد الأول <code>sep$</code>.
</p>

<p>
	لنضع في البداية وسم <code>ul</code> محيطاً بدالّة <code>()posts_nav_links</code> يأخذ نفس صنف CSS الموجود في أرقام الصفحات كما يلي:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"page-numbers"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="pun">&lt;?</span><span class="pln">php
            posts_nav_link</span><span class="pun">(</span><span class="str">' - '</span><span class="pun">,</span><span class="pln"> </span><span class="str">'&amp;laquo; السابق'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'التالي &amp;raquo;'</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">?&gt;</span><span class="pln">
</span><span class="tag">&lt;/ul&gt;</span></pre>

<p class="prettyprint">
	<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;">الآن نريد إحاطة كِلا الرابطين بوسم </span><code style="line-height: 1.6;">li</code><span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;"> لكل رابط، يمكن أن نضع داخل وسم </span><code style="line-height: 1.6;">ul</code><span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;"> بداية وسم </span><code style="line-height: 1.6;">li</code><span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;"> ونضع قبل إغلاق وسم </span><code style="line-height: 1.6;">ul</code><span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;"> وسم إغلاق وسم </span><code style="line-height: 1.6;">li</code><span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;">، فيصبح المصدر كالتالي:</span>
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"page-numbers"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
    </span><span class="pun">&lt;?</span><span class="pln">php
        posts_nav_link</span><span class="pun">(</span><span class="str">' - '</span><span class="pun">,</span><span class="pln"> </span><span class="str">'&amp;laquo; السابق'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'التالي &amp;raquo;'</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">?&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
</span><span class="tag">&lt;/ul&gt;</span></pre>

<p>
	ما فعلناه حتى الآن أننا أحطنا كلا الرابطين بوسم <code>li</code> واحد، لكننا نريد أن نحيط كل واحد من الرابطين بوسم مستقلّ، سنقوم باستبدال المحدد الأول <code>$sep</code> بـ: <code>&lt;/li&gt;&lt;li&gt;</code>.<br>
	بما أن محتوى هذا المحدد سيكون بين الرابطين بشكل دائم، فسنضع فيه إغلاق وسم <code>li</code> الأول يليه بداية وسم <code>li</code> الثاني.<br>
	فيصبح المصدر:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="">
<span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"page-numbers"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
    </span><span class="pun">&lt;?</span><span class="pln">php
        posts_nav_link</span><span class="pun">(</span><span class="str">'&lt;/li&gt;&lt;li&gt;'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'&amp;laquo; السابق'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'التالي &amp;raquo;'</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">?&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
</span><span class="tag">&lt;/ul&gt;</span></pre>

<p>
	يصبح شكل الروابط كالصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="910" href="https://academy.hsoub.com/uploads/monthly_2015_03/wordpress-pagination-next-previous-styled.png.4aab2c2e81b3d09fa9e29abb717686b3.png" rel="external"><img alt="wordpress-pagination-next-previous-styled.png" class="ipsImage ipsImage_thumbnailed" data-fileid="910" src="https://academy.hsoub.com/uploads/monthly_2015_03/wordpress-pagination-next-previous-styled.thumb.png.6722f4d618d3c4741fc747d735170a86.png"></a>
</p>

<h1 id="خلاصة">
	خلاصة
</h1>

<p>
	تعرّفنا خلال الدرس على كيفية إضافة أرقام الصفحات أو روابط التالي-السابق بحيث يتم استخدامها للتنقل بين صفحات الموقع.
</p>

<p>
	كما تعرفنا بشكل بسيط على كيفية إضافة ملف CSS جديد باستخدام دالّة <code>()wp_enqueue_style</code>.
</p>
]]></description><guid isPermaLink="false">54</guid><pubDate>Tue, 31 Mar 2015 14:03:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x642;&#x628;&#x627;&#x644; &#x648;&#x62D;&#x641;&#x638; &#x62E;&#x64A;&#x627;&#x631;&#x627;&#x62A; (&#x648;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A;) &#x627;&#x644;&#x625;&#x636;&#x627;&#x641;&#x629; &#x645;&#x646; &#x62E;&#x644;&#x627;&#x644; &#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; Setting API &#x648;Options API</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D8%B3%D8%AA%D9%82%D8%A8%D8%A7%D9%84-%D9%88%D8%AD%D9%81%D8%B8-%D8%AE%D9%8A%D8%A7%D8%B1%D8%A7%D8%AA-%D9%88%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-setting-api-%D9%88options-api-r43/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/WordPress-Plugins_480x300.png.4b2dc46c57abb801d11a9e22aa5f5f37.png" /></p>
<p dir="rtl">&#1603;&#1606;&#1575; &#1602;&#1583; &#1584;&#1603;&#1585;&#1606;&#1575; &#1601;&#1610; <a href="http://academy.hsoub.com/code/php/wordpress/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r38/">&#1575;&#1604;&#1583;&#1585;&#1587; &#1575;&#1604;&#1571;&#1608;&#1604;</a> &#1604;&#1607;&#1584;&#1607; &#1575;&#1604;&#1587;&#1604;&#1587;&#1604;&#1577; &#1571;&#1606;&#1617; &#1607;&#1606;&#1575;&#1603; &#1605;&#1580;&#1605;&#1608;&#1593;&#1577; &#1605;&#1606; &#1575;&#1604;&#1591;&#1585;&#1602; &#1610;&#1578;&#1610;&#1581;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1604;&#1581;&#1601;&#1592; &#1608;&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1605;&#1606; &#1590;&#1605;&#1606; &#1607;&#1584;&#1607; &#1575;&#1604;&#1591;&#1585;&#1602; <a rel="external nofollow" href="http://codex.wordpress.org/Options_API">&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1604;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; </a><a rel="external nofollow" href="http://codex.wordpress.org/Options_API">Options <abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface">API</abbr></abbr></abbr></abbr></abbr></abbr></abbr></a> &#1575;&#1604;&#1578;&#1610; &#1610;&#1608;&#1601;&#1585;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1608;&#1607;&#1610; &#1575;&#1604;&#1591;&#1585;&#1610;&#1602;&#1577; &#1575;&#1604;&#1571;&#1606;&#1587;&#1576; &#1604;&#1581;&#1601;&#1592; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577; &#1604;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577; &#1601;&#1610; &#1603;&#1579;&#1610;&#1585; &#1605;&#1606; &#1575;&#1604;&#1571;&#1581;&#1610;&#1575;&#1606;. &#1601;&#1610; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604; &#1587;&#1606;&#1604;&#1602;&#1610; &#1575;&#1604;&#1590;&#1608;&#1569; &#1593;&#1604;&#1609; &#1607;&#1584;&#1607; &#1575;&#1604;&#1591;&#1585;&#1610;&#1602;&#1577; &#1608;&#1584;&#1604;&#1603; &#1576;&#1578;&#1606;&#1575;&#1608;&#1604; &#1571;&#1607;&#1605; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1610;&#1608;&#1601;&#1585;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1601;&#1610; &#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1604;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1608;&#1603;&#1584;&#1604;&#1603; &#1591;&#1585;&#1610;&#1602;&#1577; &#1573;&#1590;&#1575;&#1601;&#1577; &#1589;&#1601;&#1581;&#1577; &#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; Settings Page &#1601;&#1610; &#1604;&#1608;&#1581;&#1577; &#1575;&#1604;&#1578;&#1581;&#1603;&#1605; &#1578;&#1605;&#1603;&#1606; &#1605;&#1587;&#1578;&#1582;&#1583;&#1605; &#1575;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577; &#1605;&#1606; &#1573;&#1583;&#1582;&#1575;&#1604; &#1608;&#1578;&#1593;&#1583;&#1610;&#1604; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1582;&#1575;&#1589;&#1577; &#1576;&#1575;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577; &#1608;&#1575;&#1604;&#1578;&#1610; &#1587;&#1606;&#1587;&#1578;&#1582;&#1583;&#1605; &#1601;&#1610;&#1607;&#1575; <a rel="external nofollow" href="http://codex.wordpress.org/Settings_API">&#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1604;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; </a>Settings <abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface">API</abbr></abbr></abbr></abbr></abbr></abbr></abbr>.</p><h2 dir="rtl">&#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1604;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; Options <abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface">API</abbr></abbr></abbr></abbr></abbr></abbr></abbr></h2><p dir="rtl">&#1578;&#1608;&#1601;&#1585; &#1607;&#1584;&#1607; &#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1605;&#1580;&#1605;&#1608;&#1593;&#1577; &#1605;&#1606; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1604;&#1573;&#1606;&#1588;&#1575;&#1569; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1608;&#1581;&#1601;&#1592;&#1607;&#1575; &#1608;&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593;&#1607;&#1575; &#1581;&#1610;&#1579; &#1578;&#1587;&#1578;&#1582;&#1583;&#1605; &#1602;&#1575;&#1593;&#1583;&#1577; &#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1608;&#1576;&#1575;&#1604;&#1578;&#1581;&#1583;&#1610;&#1583; &#1580;&#1583;&#1608;&#1604; <span style="font-family:'courier new', courier, monospace;">wp_options</span> &#1604;&#1581;&#1601;&#1592; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;.<br>&#1608;&#1573;&#1604;&#1610;&#1603; &#1606;&#1592;&#1585;&#1577; &#1593;&#1604;&#1609; &#1571;&#1607;&#1605; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1601;&#1610; &#1607;&#1584;&#1607; &#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577;</p><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_option</span></h3><p dir="rtl">&#1603;&#1605;&#1575; &#1607;&#1608; &#1608;&#1575;&#1590;&#1581; &#1605;&#1606; &#1575;&#1587;&#1605;&#1607;&#1575; &#1578;&#1605;&#1603;&#1606;&#1606;&#1575;&nbsp;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/add_option">add_option</a></span>&nbsp;&#1605;&#1606; &#1573;&#1590;&#1575;&#1601;&#1577; &#1582;&#1610;&#1575;&#1585; &#1580;&#1583;&#1610;&#1583; &#1573;&#1604;&#1609; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1607;&#1584;&#1607; &#1607;&#1610; &#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577; &#1604;&#1607;&#1575;</p><pre class="php ipsCode prettyprint">add_option( $option, $value, $deprecated, $autoload ); </pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$option</span></strong> (&#1605;&#1591;&#1604;&#1608;&#1576;) : &#1607;&#1608; &#1593;&#1576;&#1575;&#1585;&#1577; &#1593;&#1606; &#1575;&#1587;&#1605; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1608;&#1610;&#1580;&#1576; &#1571;&#1606; &#1604;&#1575; &#1610;&#1578;&#1593;&#1583;&#1609; 64 &#1581;&#1585;&#1601;&#1611;&#1575; &#1608;&#1610;&#1615;&#1587;&#1578;&#1581;&#1587;&#1606; &#1571;&#1606; &#1610;&#1603;&#1608;&#1606; &#1576;&#1575;&#1604;&#1573;&#1606;&#1580;&#1604;&#1610;&#1586;&#1610;&#1577; &#1608;&#1610;&#1578;&#1605; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1588;&#1585;&#1591;&#1577; &#1575;&#1604;&#1587;&#1601;&#1604;&#1610;&#1577; (_) &#1604;&#1604;&#1601;&#1589;&#1604; &#1576;&#1610;&#1606; &#1575;&#1604;&#1603;&#1604;&#1605;&#1575;&#1578;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$value</strong></span> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1602;&#1610;&#1605;&#1577; &#1607;&#1584;&#1575; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1608;&#1607;&#1610; &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1601;&#1593;&#1604;&#1610;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1608;&#1583; &#1575;&#1587;&#1578;&#1602;&#1576;&#1575;&#1604;&#1607;&#1575; &#1605;&#1606; &#1575;&#1604;&#1605;&#1587;&#1578;&#1582;&#1583;&#1605; &#1608;&#1575;&#1587;&#1578;&#1582;&#1583;&#1605;&#1607;&#1575; &#1601;&#1610;&#1605;&#1575; &#1576;&#1593;&#1583; (&#1608;&#1593;&#1605;&#1608;&#1605;&#1575; &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1608;&#1583; &#1581;&#1601;&#1592;&#1607;&#1575;).</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$deprecated</strong></span> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1578;&#1605; &#1575;&#1604;&#1578;&#1582;&#1604;&#1610; &#1593;&#1606; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; &#1601;&#1610; &#1575;&#1604;&#1606;&#1587;&#1582;&#1577; 2.3 &#1605;&#1606; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$autoload</strong></span> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1607;&#1606;&#1575; &#1578;&#1581;&#1583;&#1583; &#1605;&#1575; &#1573;&#1584;&#1575; &#1571;&#1585;&#1583;&#1578; &#1571;&#1606; &#1610;&#1578;&#1605; &#1578;&#1590;&#1605;&#1610;&#1606; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1601;&#1610; object cache &#1601;&#1610; &#1603;&#1604; &#1578;&#1581;&#1605;&#1610;&#1604; &#1604;&#1604;&#1589;&#1601;&#1581;&#1577;. &#1608;&#1607;&#1610; &#1605;&#1578;&#1593;&#1604;&#1602;&#1577; &#1576;&#1605;&#1575; &#1610;&#1593;&#1585;&#1601; &#1576;&#1575;&#1604;&#1603;&#1575;&#1588; cache.</li></ul><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">delete_option</span></h3><p dir="rtl"><span style="font-family:'courier new', courier, monospace;"><a style="line-height:11.1999998092651px;" rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/delete_option">delete_option</a></span> &#1593;&#1576;&#1575;&#1585;&#1577; &#1593;&#1606; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1593;&#1603;&#1587;&#1610;&#1577; &#1604;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1587;&#1617;&#1575;&#1576;&#1602;&#1577;&#1548;&nbsp;&#1581;&#1610;&#1579; &#1578;&#1602;&#1608;&#1605; &#1576;&#1605;&#1587;&#1581; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1605;&#1606; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;. &#1608;&#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577; &#1604;&#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1607;&#1610;:</p><pre class="php ipsCode prettyprint">delete_option( $option ); </pre><p dir="rtl">&#1581;&#1610;&#1579; <span style="font-family:'courier new', courier, monospace;"><strong>$option</strong></span> &#1607;&#1608; &#1575;&#1587;&#1605; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1575;&#1604;&#1584;&#1610; &#1578;&#1608;&#1583; &#1605;&#1587;&#1581;&#1607;</p><h3 dir="rtl">&#1575;&#1604;&#1583;&#1617;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">get_option</span></h3><p dir="rtl">&#1578;&#1587;&#1578;&#1582;&#1583;&#1605; &#1575;&#1604;&#1583;&#1617;&#1575;&#1604;&#1577;&nbsp;<a style="line-height:11.1999998092651px;" rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/get_option">get_option</a>&nbsp;&#1604;&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1605;&#1606; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1607;&#1584;&#1607; &#1607;&#1610; &#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577; &#1604;&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605;&#1607;&#1575;</p><pre class="html ipsCode prettyprint">echo get_option( $option, $default );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><span style="font-family:'courier new', courier, monospace;"><strong>$option</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1575;&#1587;&#1605; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1575;&#1604;&#1584;&#1610; &#1578;&#1608;&#1583; &#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593;&#1607;</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$default</strong></span> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1575;&#1601;&#1578;&#1585;&#1575;&#1590;&#1610;&#1577; &#1604;&#1604;&#1582;&#1610;&#1575;&#1585; &#1601;&#1610; &#1581;&#1575;&#1604;&#1577; &#1604;&#1605; &#1610;&#1578;&#1605; &#1573;&#1610;&#1580;&#1575;&#1583; &#1602;&#1610;&#1605;&#1578;&#1607; &#1601;&#1610; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;.</li></ul><p dir="rtl">&#1604;&#1575;&#1581;&#1592; &#1571;&#1606;&#1606;&#1575; &#1575;&#1587;&#1578;&#1582;&#1583;&#1605;&#1606;&#1575; echo &#1604;&#1593;&#1585;&#1590; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1604;&#1603;&#1606; &#1610;&#1605;&#1603;&#1606;&#1603; &#1605;&#1579;&#1604;&#1575; &#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1608;&#1581;&#1601;&#1592;&#1607; &#1601;&#1610; &#1571;&#1610; &#1605;&#1578;&#1594;&#1610;&#1585; &#1571;&#1608; &#1573;&#1580;&#1585;&#1575;&#1569; &#1571;&#1610; &#1593;&#1605;&#1604;&#1610;&#1577; &#1593;&#1604;&#1610;&#1607;.</p><p dir="rtl">&#1573;&#1584;&#1575; &#1604;&#1605; &#1610;&#1608;&#1580;&#1583; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1575;&#1604;&#1605;&#1591;&#1604;&#1608;&#1576; &#1601;&#1610; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1604;&#1605; &#1610;&#1578;&#1605; &#1578;&#1581;&#1583;&#1610;&#1583; &#1602;&#1610;&#1605;&#1577; &#1604;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; <span style="font-family:'courier new', courier, monospace;">$default</span> &#1610;&#1578;&#1605; &#1573;&#1585;&#1580;&#1575;&#1593; &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; <span style="font-family:'courier new', courier, monospace;">FALSE</span>.</p><p dir="rtl">&#1607;&#1606;&#1575;&#1604;&#1603; &#1605;&#1580;&#1605;&#1608;&#1593;&#1577; &#1605;&#1606; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1582;&#1575;&#1589;&#1577; &#1576;&#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1608;&#1575;&#1604;&#1605;&#1581;&#1601;&#1608;&#1592;&#1577; &#1601;&#1610; &#1580;&#1583;&#1608;&#1604; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1610;&#1605;&#1603;&#1606;&#1603; &#1575;&#1604;&#1608;&#1589;&#1608;&#1604; &#1573;&#1604;&#1610;&#1607;&#1575; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">get_option</span> &#1605;&#1606;&#1607;&#1575; &#1593;&#1604;&#1609; &#1587;&#1576;&#1610;&#1604; &#1575;&#1604;&#1605;&#1579;&#1575;&#1604;:</p><ul dir="rtl"><li><span style="font-family:'courier new', courier, monospace;">admin_email</span>: &#1575;&#1604;&#1576;&#1585;&#1610;&#1583; &#1575;&#1604;&#1573;&#1604;&#1603;&#1578;&#1585;&#1608;&#1606;&#1610; &#1604;&#1605;&#1583;&#1610;&#1585; &#1575;&#1604;&#1605;&#1608;&#1602;&#1593;.</li><li><span style="font-family:'courier new', courier, monospace;">blogname</span>: &#1575;&#1587;&#1605; &#1575;&#1604;&#1605;&#1608;&#1602;&#1593;.</li><li><span style="font-family:'courier new', courier, monospace;">siteurl</span>: &#1585;&#1575;&#1576;&#1591; &#1575;&#1604;&#1605;&#1608;&#1602;&#1593;</li></ul><p dir="rtl">&#1608;&#1594;&#1610;&#1585;&#1607;&#1575;.</p><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">update_option</span></h3><p dir="rtl">&#1578;&#1587;&#1578;&#1582;&#1583;&#1605; <a rel="external nofollow" style="line-height:11.1999998092651px;" href="http://codex.wordpress.org/Function_Reference/update_option">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577;&nbsp;</a><a rel="external nofollow" style="line-height:11.1999998092651px;" href="http://codex.wordpress.org/Function_Reference/update_option">update_option</a>&nbsp;&#1604;&#1578;&#1581;&#1583;&#1610;&#1579; &#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1601;&#1610; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1578;&#1571;&#1582;&#1584; &#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577;</p><pre class="php ipsCode prettyprint">update_option( $option, $new_value );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$option</span></strong> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1575;&#1587;&#1605; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1575;&#1604;&#1605;&#1585;&#1575;&#1583; &#1578;&#1581;&#1583;&#1610;&#1579;&#1607;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$new_value</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1580;&#1583;&#1610;&#1583;&#1577; &#1604;&#1604;&#1582;&#1610;&#1575;&#1585;.</li></ul><p dir="rtl">&#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1578;&#1602;&#1608;&#1605; &#1576;&#1601;&#1581;&#1589; &#1605;&#1575; &#1573;&#1584;&#1575; &#1603;&#1575;&#1606; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; <span style="font-family:'courier new', courier, monospace;">$option</span> &#1605;&#1608;&#1580;&#1608;&#1583;&#1611;&#1575;&nbsp;&#1605;&#1615;&#1587;&#1576;&#1602;&#1575; &#1601;&#1610; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1601;&#1610; &#1581;&#1575;&#1604;&#1577; &#1593;&#1583;&#1605; &#1608;&#1580;&#1608;&#1583;&#1607; &#1578;&#1602;&#1608;&#1605; &#1576;&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_option</span> &#1604;&#1573;&#1606;&#1588;&#1575;&#1574;&#1607;&nbsp;&#1576;&#1575;&#1604;&#1589;&#1617;&#1608;&#1585;&#1577; &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre class="php ipsCode prettyprint">add_option('option_name', 'option_value')</pre><p dir="rtl">&#1608;&#1576;&#1575;&#1604;&#1578;&#1575;&#1604;&#1610; &#1610;&#1605;&#1603;&#1606;&#1603; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605;&#1607;&#1575; &#1604;&#1575;&#1582;&#1578;&#1576;&#1575;&#1585; &#1605;&#1575; &#1573;&#1584;&#1575; &#1603;&#1575;&#1606; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1605;&#1608;&#1580;&#1608;&#1583;&#1611;&#1575; &#1608;&#1573;&#1606;&#1588;&#1575;&#1574;&#1607;&nbsp;&#1573;&#1606; &#1604;&#1605; &#1610;&#1603;&#1606; &#1605;&#1608;&#1580;&#1608;&#1583;&#1611;&#1575;&#1548; &#1604;&#1603;&#1606; &#1604;&#1575;&#1581;&#1592; &#1571;&#1606;&#1603; &#1604;&#1606; &#1578;&#1587;&#1578;&#1591;&#1610;&#1593; &#1578;&#1581;&#1583;&#1610;&#1583; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; <span style="font-family:'courier new', courier, monospace;">$autoload</span> &#1593;&#1606;&#1583; &#1573;&#1606;&#1588;&#1575;&#1569; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;.</p><p dir="rtl">&#1578;&#1585;&#1580;&#1593; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">update_option</span> &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; <span style="font-family:'courier new', courier, monospace;">TRUE</span> &#1601;&#1610; &#1581;&#1575;&#1604;&#1577; &#1578;&#1605; &#1578;&#1581;&#1583;&#1610;&#1579; &#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585; &#1576;&#1606;&#1580;&#1575;&#1581; &#1608;&#1578;&#1585;&#1580;&#1593; <span style="font-family:'courier new', courier, monospace;">FALSE</span> &#1573;&#1584;&#1575; &#1604;&#1605; &#1610;&#1578;&#1605; &#1575;&#1604;&#1578;&#1581;&#1583;&#1610;&#1579; &#1576;&#1606;&#1580;&#1575;&#1581;.</p><h2 dir="rtl">&#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1604;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; Settings <abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface">API</abbr></abbr></abbr></abbr></abbr></abbr></abbr></h2><p dir="rtl"><span style="line-height:11.1999998092651px;">&#1578;&#1615;&#1605;&#1603;&#1617;&#1606;&#1603;&nbsp;</span>&#1607;&#1584;&#1607; &#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &nbsp;&#1605;&#1606; &#1593;&#1605;&#1604; &#1575;&#1604;&#1605;&#1610;&#1603;&#1575;&#1606;&#1610;&#1603;&#1610;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1587;&#1578;&#1591;&#1610;&#1593; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604;&#1607;&#1575; &#1575;&#1587;&#1578;&#1602;&#1576;&#1575;&#1604; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1605;&#1606; &#1575;&#1604;&#1605;&#1587;&#1578;&#1582;&#1583;&#1605; &#1608;&#1581;&#1601;&#1592;&#1607;&#1575; &#1601;&#1610; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1578;&#1593;&#1605;&#1604; &#1587;&#1608;&#1610;&#1617;&#1611;&#1575; &#1605;&#1593; &#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1604;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1604;&#1573;&#1606;&#1580;&#1575;&#1586; &#1575;&#1604;&#1605;&#1607;&#1605;&#1577;.<br>&#1607;&#1606;&#1575;&#1604;&#1603; &#1579;&#1604;&#1575;&#1579;&#1577; &#1605;&#1603;&#1608;&#1606;&#1575;&#1578; &#1571;&#1587;&#1575;&#1587;&#1610;&#1577; &#1604;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1604;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578;&#1548; &#1608;&#1607;&#1610;:</p><ul dir="rtl"><li><strong>&#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578;</strong>: &#1608;&#1607;&#1610; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1601;&#1593;&#1604;&#1610;&#1577; &#1608;&#1575;&#1604;&#1578;&#1610; &#1610;&#1578;&#1605; &#1581;&#1601;&#1592;&#1607;&#1575; &#1601;&#1610; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1578;&#1587;&#1578;&#1591;&#1610;&#1593; &#1575;&#1604;&#1608;&#1589;&#1608;&#1604; &#1573;&#1604;&#1610;&#1607;&#1575; &#1576;&#1593;&#1583; &#1584;&#1604;&#1603; &#1593;&#1606; &#1591;&#1585;&#1610;&#1602; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">get_option</span> &#1575;&#1604;&#1578;&#1610; &#1578;&#1605; &#1588;&#1585;&#1581;&#1607;&#1575; &#1571;&#1593;&#1604;&#1575;&#1607;.</li><li><strong>&#1575;&#1604;&#1581;&#1602;&#1608;&#1604; Field</strong>: &#1608;&#1607;&#1610; &#1581;&#1602;&#1608;&#1604; &#1575;&#1604;&#1606;&#1605;&#1608;&#1584;&#1580; Form &#1575;&#1604;&#1584;&#1610; &#1610;&#1578;&#1605; &#1593;&#1585;&#1590;&#1607; &#1601;&#1610; &#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1608;&#1575;&#1604;&#1578;&#1610; &#1578;&#1605;&#1603;&#1606; &#1575;&#1604;&#1605;&#1587;&#1578;&#1582;&#1583;&#1605; &#1605;&#1606; &#1573;&#1583;&#1582;&#1575;&#1604; &#1602;&#1610;&#1605; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;.&#1548;</li><li><strong>&#1575;&#1604;&#1571;&#1602;&#1587;&#1575;&#1605; Section</strong>: &#1608;&#1607;&#1610;&nbsp;&#1593;&#1576;&#1575;&#1585;&#1577; &#1593;&#1606; &#1591;&#1585;&#1610;&#1602;&#1577; &#1604;&#1578;&#1602;&#1587;&#1610;&#1605; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1573;&#1604;&#1609; &#1605;&#1580;&#1605;&#1608;&#1593;&#1575;&#1578;&#1548; &#1571;&#1610; &#1571;&#1606; &#1603;&#1604; &#1605;&#1580;&#1605;&#1608;&#1593;&#1577; &#1605;&#1606; &#1575;&#1604;&#1581;&#1602;&#1608;&#1604; &#1610;&#1578;&#1605; &#1580;&#1605;&#1593;&#1607;&#1575; &#1578;&#1581;&#1578; &#1602;&#1587;&#1605;.</li></ul><p dir="rtl">&#1576;&#1593;&#1583; &#1573;&#1606;&#1588;&#1575;&#1569; &#1571;&#1602;&#1587;&#1575;&#1605; &#1608;&#1581;&#1602;&#1608;&#1604; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1610;&#1583;&#1607;&#1575; (&#1587;&#1606;&#1585;&#1609; &#1591;&#1585;&#1610;&#1602;&#1577; &#1593;&#1605;&#1604; &#1584;&#1604;&#1603; &#1601;&#1610; &#1575;&#1604;&#1601;&#1602;&#1585;&#1575;&#1578; &#1575;&#1604;&#1602;&#1575;&#1583;&#1605;&#1577;) &#1593;&#1604;&#1610;&#1603; &#1571;&#1606; &#1578;&#1602;&#1585;&#1585; &#1605;&#1575; &#1573;&#1584;&#1575; &#1603;&#1606;&#1578; &#1578;&#1585;&#1610;&#1583; &#1573;&#1590;&#1575;&#1601;&#1577; &#1607;&#1584;&#1607; &#1575;&#1604;&#1581;&#1602;&#1608;&#1604; &#1608;&#1575;&#1604;&#1571;&#1602;&#1587;&#1575;&#1605; &#1573;&#1604;&#1609;:</p><ul dir="rtl"><li>&nbsp;&#1589;&#1601;&#1581;&#1577; &#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1605;&#1608;&#1580;&#1608;&#1583;&#1577; &#1581;&#1575;&#1604;&#1610;&#1611;&#1575; &#1605;&#1579;&#1604; &#1575;&#1604;&#1589;&#1601;&#1581;&#1575;&#1578; &#1575;&#1604;&#1605;&#1608;&#1580;&#1608;&#1583;&#1577; &#1601;&#1610; &#1575;&#1604;&#1602;&#1575;&#1574;&#1605;&#1577; &#1575;&#1604;&#1601;&#1585;&#1593;&#1610;&#1577; &#1604;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1601;&#1610; &#1604;&#1608;&#1581;&#1577; &#1578;&#1581;&#1603;&#1605; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; (&#1593;&#1575;&#1605;&#1548; &#1603;&#1578;&#1575;&#1576;&#1577;&#1548; &#1602;&#1585;&#1575;&#1569;&#1577;&#1548; ..&#1575;&#1604;&#1582;).</li><li>&#1571;&#1608; &#1573;&#1606;&#1588;&#1575;&#1569; &#1589;&#1601;&#1581;&#1577; &#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1580;&#1583;&#1610;&#1583;&#1577; &#1608;&#1587;&#1606;&#1585;&#1609; &#1601;&#1610; &#1575;&#1604;&#1601;&#1602;&#1585;&#1577; &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577; &#1591;&#1585;&#1610;&#1602;&#1577; &#1573;&#1606;&#1588;&#1575;&#1574;&#1607;&#1575;.</li></ul><h3 dir="rtl">&#1573;&#1606;&#1588;&#1575;&#1569; &#1589;&#1601;&#1581;&#1577; &#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1601;&#1610; &#1604;&#1608;&#1581;&#1577; &#1578;&#1581;&#1603;&#1605; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;</h3><p dir="rtl">&#1610;&#1578;&#1605; &#1584;&#1604;&#1603; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/add_options_page">add_options_page</a></span> &#1575;&#1604;&#1578;&#1610; &#1604;&#1607;&#1575; &#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577;</p><pre class="html ipsCode prettyprint">add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><span style="font-family:'courier new', courier, monospace;"><strong>$page_title</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1593;&#1606;&#1608;&#1575;&#1606; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$menu_title</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1593;&#1606;&#1608;&#1575;&#1606; &#1575;&#1604;&#1602;&#1575;&#1574;&#1605;&#1577; &#1608;&#1575;&#1604;&#1584;&#1610; &#1587;&#1610;&#1592;&#1607;&#1585; &#1601;&#1610; &#1604;&#1608;&#1581;&#1577; &#1578;&#1581;&#1603;&#1605; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$capability</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1589;&#1604;&#1575;&#1581;&#1610;&#1575;&#1578; &#1575;&#1604;&#1605;&#1587;&#1578;&#1582;&#1583;&#1605; &#1575;&#1604;&#1584;&#1610; &#1610;&#1587;&#1578;&#1591;&#1610;&#1593; &#1575;&#1604;&#1578;&#1617;&#1593;&#1583;&#1610;&#1604; &#1593;&#1604;&#1609; &#1607;&#1584;&#1607; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$menu_slug</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1575;&#1604;&#1575;&#1587;&#1605; &#1575;&#1604;&#1604;&#1591;&#1610;&#1601; &#1604;&#1604;&#1602;&#1575;&#1574;&#1605;&#1577; (&#1608;&#1575;&#1604;&#1584;&#1610; &#1587;&#1610;&#1592;&#1607;&#1585; &#1601;&#1610; &#1585;&#1575;&#1576;&#1591; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577;).</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$function</strong></span> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1587;&#1572;&#1608;&#1604;&#1577; &#1605;&#1606; &#1593;&#1585;&#1590; &#1575;&#1604;&#1605;&#1581;&#1578;&#1608;&#1610;&#1575;&#1578; &#1601;&#1610; &#1607;&#1584;&#1607; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577;&#1548; &#1571;&#1610; &#1575;&#1604;&#1578;&#1610; &#1587;&#1610;&#1606;&#1575;&#1583;&#1610;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1608;&#1610;&#1593;&#1585;&#1590; &#1605;&#1575; &#1578;&#1582;&#1585;&#1580;&#1607; &#1601;&#1610; &#1607;&#1584;&#1607; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577;.</li></ul><p dir="rtl">&#1610;&#1578;&#1605; &#1605;&#1606;&#1575;&#1583;&#1575;&#1577; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; (&#1576;&#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1575;&#1604;&#1605;&#1591;&#1604;&#1608;&#1576;&#1577;) &#1583;&#1575;&#1582;&#1604; &#1583;&#1575;&#1604;&#1577; &#1571;&#1582;&#1585;&#1609; &#1605;&#1579;&#1604;&#1575; <span style="font-family:'courier new', courier, monospace;">my_plugin_admin</span> &#1608;&#1578;&#1585;&#1576;&#1591; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">my_plugin_admin</span> &#1576;&#1575;&#1604;&#1582;&#1591;&#1575;&#1601; <span style="font-family:'courier new', courier, monospace;">admin_menu</span> &#1608;&#1576;&#1607;&#1584;&#1607; &#1575;&#1604;&#1591;&#1585;&#1610;&#1602;&#1577; &#1587;&#1578;&#1592;&#1607;&#1585; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577; &#1601;&#1610; &#1604;&#1608;&#1581;&#1577; &#1578;&#1581;&#1603;&#1605; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;.</p><h3 dir="rtl">&#1573;&#1606;&#1588;&#1575;&#1569; &#1602;&#1587;&#1605; &#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; Setting Section</h3><p dir="rtl">&#1604;&#1573;&#1606;&#1588;&#1575;&#1569; &#1602;&#1587;&#1605; &#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1581;&#1578;&#1609; &#1606;&#1585;&#1576;&#1591; &#1576;&#1607; &#1581;&#1602;&#1608;&#1604; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1606;&#1602;&#1608;&#1605; &#1576;&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/add_settings_section">add_settings_section</a></span> &#1608;&#1575;&#1604;&#1578;&#1610; &#1604;&#1607;&#1575; &#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577;:</p><pre class="php ipsCode prettyprint">add_settings_section( $id, $title, $callback, $page );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$id</span> </strong>(&#1605;&#1591;&#1604;&#1608;&#1576;): &#1605;&#1593;&#1585;&#1601; &#1601;&#1585;&#1610;&#1583; Unique &#1604;&#1607;&#1584;&#1575; &#1575;&#1604;&#1602;&#1587;&#1605;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$title</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1593;&#1606;&#1608;&#1575;&#1606; &#1575;&#1604;&#1602;&#1587;&#1605;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$callback</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1587;&#1578;&#1602;&#1608;&#1605; &#1576;&#1593;&#1585;&#1590; &#1605;&#1581;&#1578;&#1608;&#1610;&#1575;&#1578; &#1607;&#1584;&#1575; &#1575;&#1604;&#1602;&#1587;&#1605; &#1605;&#1606; &#1575;&#1604;&#1581;&#1602;&#1608;&#1604; &#1608;&#1575;&#1604;&#1578;&#1610; &#1593;&#1604;&#1610;&#1603; &#1573;&#1606;&#1588;&#1575;&#1572;&#1607;&#1575; &#1604;&#1575;&#1581;&#1602;&#1575;. &#1608;&#1610;&#1580;&#1576; &#1571;&#1606; &#1578;&#1602;&#1608;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1576;&#1593;&#1605;&#1604; <span style="font-family:'courier new', courier, monospace;">echo</span> &#1604;&#1605;&#1581;&#1578;&#1608;&#1610;&#1575;&#1578; &#1575;&#1604;&#1602;&#1587;&#1605;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$page</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1587;&#1610;&#1578;&#1605; &#1573;&#1590;&#1575;&#1601;&#1577; &#1607;&#1584;&#1575; &#1575;&#1604;&#1602;&#1587;&#1605; &#1604;&#1607;&#1575; (&#1605;&#1579;&#1604;&#1575; &#1575;&#1604;&#1578;&#1610; &#1571;&#1606;&#1588;&#1571;&#1606;&#1575;&#1607;&#1575; &#1601;&#1610; &#1575;&#1604;&#1582;&#1591;&#1608;&#1577; &#1575;&#1604;&#1587;&#1575;&#1576;&#1602;&#1577;) &#1608;&#1610;&#1580;&#1576; &#1571;&#1606; &#1578;&#1591;&#1575;&#1576;&#1602; &#1602;&#1610;&#1605;&#1577; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; &#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; <span style="font-family:'courier new', courier, monospace;">$menu_slug</span>.</li></ul><p dir="rtl"><strong>&#1605;&#1604;&#1575;&#1581;&#1592;&#1577;</strong>: &#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1600; callback &#1578;&#1587;&#1578;&#1602;&#1576;&#1604; &#1605;&#1593;&#1575;&#1605;&#1604;&#1611;&#1575;&nbsp;&#1608;&#1575;&#1581;&#1583;&#1611;&#1575; &#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;&#1617;&#1611;&#1575; &#1608;&#1607;&#1608; &#1593;&#1576;&#1575;&#1585;&#1577; &#1593;&#1606; &#1605;&#1589;&#1601;&#1608;&#1601;&#1577; &#1604;&#1607;&#1575; &#1579;&#1604;&#1575;&#1579; &#1593;&#1606;&#1575;&#1589;&#1585;&#1548; &#1605;&#1579;&#1575;&#1604;:</p><pre class="php ipsCode prettyprint">add_settings_section(
   'myplugin_setting_section',
   '&#1605;&#1579;&#1575;&#1604; &#1604;&#1602;&#1587;&#1605; &#1573;&#1593;&#1583;&#1575;&#1583;&#1578; &#1604;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577;',
   'myplugin_setting_section_callback_function',
   'my_plugin_admin_page'
);
function myplugin_setting_section_callback_function( $arg ) {
   // echo section intro text here
   echo '&lt;p&gt;&#1575;&#1604;&#1605;&#1593;&#1585;&#1601;: ' . $arg['id'] . '&lt;/p&gt;'; // &#1575;&#1604;&#1605;&#1593;&#1585;&#1601;: myplugin_setting_section
   echo '&lt;p&gt;&#1575;&#1604;&#1593;&#1606;&#1575;&#1608;&#1606;: ' . $arg['title'] . '&lt;/p&gt;'; // &#1575;&#1604;&#1593;&#1606;&#1608;&#1575;&#1606;: &#1605;&#1579;&#1575;&#1604; &#1604;&#1602;&#1587;&#1605; &#1573;&#1593;&#1583;&#1575;&#1583;&#1578; &#1604;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577;
   echo '&lt;p&gt;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;callback: ' . $arg['callback'] . '&lt;/p&gt;'; // &#1583;&#1575;&#1604;&#1577; &#1575;&#1604;callback: myplugin_setting_section_callback_function
}</pre><h3 dir="rtl">&#1573;&#1606;&#1588;&#1575;&#1569; &#1581;&#1602;&#1608;&#1604; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; Settings Fields</h3><p dir="rtl">&#1610;&#1578;&#1605; &#1573;&#1606;&#1588;&#1575;&#1569; &#1581;&#1602;&#1608;&#1604; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1593;&#1606; &#1591;&#1585;&#1610;&#1602; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577;&nbsp;<span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/add_settings_field">add_settings_field</a></span> &#1608;&#1575;&#1604;&#1578;&#1610; &#1604;&#1607;&#1575; &#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577;:</p><pre class="php ipsCode prettyprint">add_settings_field( $id, $title, $callback, $page, $section, $args );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><span style="font-family:'courier new', courier, monospace;"><strong>$id </strong></span>(&#1605;&#1591;&#1604;&#1608;&#1576;): &#1605;&#1593;&#1585;&#1601; &#1601;&#1585;&#1610;&#1583; &#1604;&#1604;&#1581;&#1602;&#1604;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$title </strong></span>(&#1605;&#1591;&#1604;&#1608;&#1576;): &#1593;&#1606;&#1608;&#1575;&#1606; &#1575;&#1604;&#1581;&#1602;&#1604;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$callback</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1587;&#1574;&#1608;&#1604;&#1577; &#1605;&#1606; &#1593;&#1585;&#1590; &#1575;&#1604;&#1581;&#1602;&#1604;. &#1610;&#1578;&#1605; &#1578;&#1605;&#1585;&#1610;&#1585; &#1605;&#1593;&#1575;&#1605;&#1604; &#1608;&#1575;&#1581;&#1583; &#1604;&#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1608;&#1607;&#1608; &#1575;&#1604;&#1605;&#1589;&#1601;&#1608;&#1601;&#1577; <span style="font-family:'courier new', courier, monospace;">$args</span>. &#1608;&#1610;&#1580;&#1576; &#1593;&#1604;&#1609; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1571;&#1606; &#1578;&#1602;&#1608;&#1605; &#1576;&#1593;&#1605;&#1604; <span style="font-family:'courier new', courier, monospace;">echo</span> &#1604;&#1605;&#1582;&#1585;&#1580;&#1575;&#1578;&#1607;&#1575;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$page</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1575;&#1604;&#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1578;&#1610; &#1587;&#1610;&#1578;&#1605; &#1593;&#1585;&#1590; &#1575;&#1604;&#1581;&#1602;&#1604; &#1601;&#1610;&#1607;&#1575;&#1548; &#1608;&#1610;&#1580;&#1576; &#1571;&#1606; &#1610;&#1591;&#1575;&#1576;&#1602; <span style="font-family:'courier new', courier, monospace;">$menu_slug</span> &#1575;&#1604;&#1605;&#1608;&#1580;&#1608;&#1583; &#1601;&#1610; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_options_page</span>.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$section</strong></span> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1602;&#1587;&#1605; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1575;&#1604;&#1584;&#1610; &#1610;&#1578;&#1576;&#1593; &#1604;&#1607; &#1607;&#1584;&#1575; &#1575;&#1604;&#1581;&#1602;&#1604;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$args</strong></span> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1573;&#1590;&#1575;&#1601;&#1610;&#1577; &#1610;&#1578;&#1605; &#1578;&#1605;&#1585;&#1610;&#1585;&#1607;&#1575; &#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1600;callback.</li></ul><h3 dir="rtl">&#1578;&#1587;&#1580;&#1610;&#1604; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578;</h3><p dir="rtl">&#1575;&#1604;&#1582;&#1591;&#1608;&#1577; &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577; &#1607;&#1610; &#1571;&#1606; &#1606;&#1615;&#1593;&#1604;&#1605; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1576;&#1571;&#1606;&#1606;&#1575; &#1606;&#1585;&#1610;&#1583; &#1578;&#1587;&#1580;&#1610;&#1604; &#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1604;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577; &#1608;&#1584;&#1604;&#1603; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/register_setting">register_setting</a></span> &#1608;&#1575;&#1604;&#1578;&#1610; &#1604;&#1607;&#1575; &#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577;:</p><pre class="php ipsCode prettyprint">register_setting( $option_group, $option_name, $sanitize_callback );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><span style="font-family:'courier new', courier, monospace;"><strong>$option_group</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1607;&#1584;&#1575; &#1593;&#1576;&#1575;&#1585;&#1577; &#1593;&#1606; &#1575;&#1587;&#1605; &#1604;&#1605;&#1580;&#1605;&#1608;&#1593;&#1577; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1608;&#1610;&#1587;&#1578;&#1582;&#1583;&#1605; &#1601;&#1610;&#1605;&#1575; &#1576;&#1593;&#1583; &#1593;&#1606;&#1583; &#1593;&#1585;&#1590; render &#1605;&#1581;&#1578;&#1608;&#1610;&#1575;&#1578; &#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$option_name</strong></span> (&#1605;&#1591;&#1604;&#1608;&#1576;): &#1575;&#1587;&#1605; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1608;&#1575;&#1604;&#1584;&#1610; &#1587;&#1606;&#1587;&#1578;&#1582;&#1583;&#1605;&#1607; &#1601;&#1610; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; get_option &#1604;&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578;.</li><li><span style="font-family:'courier new', courier, monospace;"><strong>$sanitize_callback</strong></span> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1587;&#1572;&#1608;&#1604;&#1577; &#1605;&#1606; &#1593;&#1605;&#1604; sanitizes &#1604;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578;.</li></ul><p dir="rtl">&#1610;&#1580;&#1576; &#1571;&#1606; &#1610;&#1585;&#1576;&#1591; <span style="line-height:11.1999998092651px;">&#1578;&#1587;&#1580;&#1610;&#1604; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578;&nbsp;</span>&#1576;&#1575;&#1604;&#1582;&#1591;&#1575;&#1601; <span style="font-family:'courier new', courier, monospace;">admin_ini</span> &#1576;&#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre class="php ipsCode prettyprint">function register_my_setting() {
   register_setting( 'my_options_group', 'my_option_name', 'intval' );
}
add_action( 'admin_init', 'register_my_setting' );
</pre><h3 dir="rtl">&#1605;&#1579;&#1575;&#1604; &#1605;&#1578;&#1603;&#1575;&#1605;&#1604; &#1604;&#1573;&#1606;&#1588;&#1575;&#1569; &#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1608;&#1573;&#1590;&#1575;&#1601;&#1577; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1604;&#1607;&#1575;</h3><pre class="php ipsCode prettyprint">add_action( 'admin_menu', 'my_plugin_menu' );
function my_plugin_menu() {
   add_options_page( '&#1593;&#1606;&#1608;&#1575;&#1606; &#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577;', '&#1593;&#1606;&#1608;&#1575;&#1606; &#1575;&#1604;&#1602;&#1575;&#1574;&#1605;&#1577;', 'manage_options', 'my_plugin_admin_page', 'my_plugin_options_page' );
}
// ------------------------------------------------------------------

// &#1571;&#1606;&#1588;&#1575;&#1569; &#1575;&#1604;&#1581;&#1602;&#1608;&#1604; &#1608;&#1575;&#1604;&#1571;&#1602;&#1587;&#1575;&#1605; &#1608;&#1578;&#1593;&#1585;&#1610;&#1601; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1610;&#1585;&#1576;&#1591; &#1576;&#1575;&#1604;&#1582;&#1591;&#1575;&#1601; admin_init

// ------------------------------------------------------------------

//
function myplugin_settings_api_init() {
// &#1573;&#1590;&#1575;&#1601;&#1577; &#1602;&#1587;&#1605; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1604;&#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1593;&#1585;&#1601;&#1606;&#1575;&#1607;&#1575; &#1571;&#1593;&#1604;&#1575;&#1607;
add_settings_section(
   'myplugin_setting_section',
   '&#1605;&#1579;&#1575;&#1604; &#1604;&#1602;&#1587;&#1605; &#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1604;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577;',
   'myplugin_setting_section_callback_function',
   'my_plugin_admin_page'
);
// &#1573;&#1590;&#1575;&#1601;&#1577; &#1581;&#1602;&#1604; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578;
add_settings_field(
&nbsp;  'myplugin_setting_name',
   '&#1605;&#1579;&#1575;&#1604; &#1604;&#1575;&#1587;&#1605; &#1575;&#1604;&#1581;&#1602;&#1604;',
   'myplugin_setting_callback_function',
   'my_plugin_admin_page',
   'myplugin_setting_section'
);
// &#1578;&#1587;&#1580;&#1610;&#1604; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1581;&#1578;&#1609; &#1610;&#1587;&#1578;&#1591;&#1610;&#1593; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1581;&#1601;&#1592; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1604;&#1606;&#1575;
register_setting( 'my_plugin_admin_page', 'myplugin_setting_name' );
}
// &#1573;&#1590;&#1575;&#1601;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1571;&#1593;&#1604;&#1575;&#1577; &#1604;&#1604;&#1582;&#1591;&#1575;&#1601; &#1575;&#1604;&#1605;&#1606;&#1575;&#1587;&#1576; &#1608;&#1607;&#1608; admin_init
add_action( 'admin_init', 'myplugin_settings_api_init' );
// ------------------------------------------------------------------

// &#1583;&#1575;&#1604;&#1577; &#1575;&#1604;callback &#1604;&#1602;&#1587;&#1605; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578;

// ------------------------------------------------------------------
function eg_setting_section_callback_function() {
   echo '&lt;p&gt;&#1606;&#1589; &#1601;&#1610; &#1576;&#1583;&#1575;&#1610;&#1577; &#1602;&#1587;&#1605; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578;&lt;/p&gt;';
}
// ------------------------------------------------------------------
// &#1583;&#1575;&#1604;&#1577; &#1575;&#1604;callback &#1604;&#1581;&#1602;&#1604; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578;

// ------------------------------------------------------------------add_options_page
// &#1573;&#1606;&#1588;&#1575;&#1569; &#1605;&#1585;&#1576;&#1593; &#1573;&#1582;&#1578;&#1610;&#1575;&#1585; checkbox&#1586; &#1576;&#1575;&#1604;&#1591;&#1576;&#1593; &#1610;&#1605;&#1603;&#1606;&#1603; &#1573;&#1606;&#1588;&#1575;&#1569; &#1571;&#1606;&#1608;&#1575;&#1593; &#1571;&#1582;&#1585;&#1609; &#1605;&#1606; &#1575;&#1604;&#1582;&#1602;&#1608;&#1604;

function eg_setting_callback_function() {
   echo '&lt;input name="myplugin_setting_name" id="myplugin_setting_name" type="checkbox" value="1" class="code" ' . checked( 1, get_option( 'eg_setting_name' ), false ) . ' /&gt; &#1605;&#1589;&#1575;&#1604;';
}

// &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1587;&#1572;&#1608;&#1604;&#1577; &#1593;&#1606; &#1593;&#1585;&#1590; &#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1589;&#1601;&#1581;&#1577; &#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577; &#1603;&#1605;&#1575; &#1593;&#1585;&#1601;&#1606;&#1575;&#1607;&#1575; &#1575;&#1593;&#1604;&#1575;&#1607;
function my_options_page() {
?&gt;

&lt;div class="wrap"&gt;
   &lt;h2&gt;&#1589;&#1601;&#1581;&#1577; &#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577;&lt;/h2&gt;
   &lt;form action="options.php" method="POST"&gt;
      &lt;?php settings_fields( 'my_plugin_admin_pagep' ); ?&gt;
      &lt;?php do_settings_sections( 'myplugin_setting_section' ); ?&gt;
      &lt;?php submit_button(); ?&gt;
   &lt;/form&gt;
&lt;/div&gt;
&lt;?php
}
</pre><p dir="rtl">&#1601;&#1610; &#1575;&#1604;&#1576;&#1583;&#1575;&#1610;&#1577; &#1602;&#1605;&#1606;&#1575; &#1576;&#1573;&#1606;&#1588;&#1575;&#1569; &#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1593;&#1606; &#1591;&#1585;&#1610;&#1602; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_options_page</span> &#1608;&#1603;&#1605;&#1575; &#1578;&#1604;&#1575;&#1581;&#1592; &#1602;&#1605;&#1606;&#1575; &#1576;&#1608;&#1590;&#1593;&#1607;&#1575; &#1583;&#1575;&#1582;&#1604; &#1583;&#1575;&#1604;&#1577; &#1608;&#1573;&#1590;&#1575;&#1601;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1604;&#1604;&#1582;&#1591;&#1575;&#1601; &#1575;&#1604;&#1605;&#1606;&#1575;&#1587;&#1576; &#1608;&#1607;&#1608; <span style="font-family:'courier new', courier, monospace;">admin_menu</span>.</p><p dir="rtl">&#1576;&#1593;&#1583; &#1584;&#1604;&#1603; &#1602;&#1605;&#1606;&#1575; &#1576;&#1593;&#1605;&#1604; &#1583;&#1575;&#1604;&#1577; &#1580;&#1583;&#1610;&#1583;&#1577; &#1608;&#1576;&#1583;&#1575;&#1582;&#1604;&#1607;&#1575; &#1602;&#1605;&#1606;&#1575; &#1576;&#1593;&#1605;&#1604; &#1579;&#1604;&#1575;&#1579;&#1577; &#1571;&#1588;&#1610;&#1575;&#1569; &#1608;&#1607;&#1610;:</p><ul><li><p dir="rtl">&#1573;&#1590;&#1575;&#1601;&#1577; &#1602;&#1587;&#1605; &#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1593;&#1606; &#1591;&#1585;&#1610;&#1602; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_settings_section</span>&#1548; &#1608;&#1576;&#1575;&#1604;&#1591;&#1576;&#1593; &#1602;&#1605;&#1606;&#1575; &#1576;&#1578;&#1593;&#1585;&#1610;&#1601; &#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1600;callback &#1575;&#1604;&#1582;&#1575;&#1589;&#1577; &#1576;&#1607;&#1584;&#1575; &#1575;&#1604;&#1602;&#1587;&#1605; &#1608;&#1575;&#1604;&#1605;&#1587;&#1572;&#1608;&#1604;&#1577; &#1605;&#1606; &#1593;&#1585;&#1590;&#1607;&#1575; &#1608;&#1602;&#1605;&#1606;&#1575; &#1576;&#1573;&#1590;&#1575;&#1601;&#1578;&#1607;&#1575; &#1576;&#1593;&#1583; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577;.</p></li><li><p dir="rtl">&#1573;&#1590;&#1575;&#1601;&#1577; &#1581;&#1602;&#1604; &#1608;&#1575;&#1581;&#1583; &#1604;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1593;&#1606; &#1591;&#1585;&#1610;&#1602; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_settings_field</span> &#1608;&#1605;&#1585;&#1585;&#1606;&#1575; &#1604;&#1607;&#1575; &#1575;&#1587;&#1605; &#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1600;callback &#1575;&#1604;&#1605;&#1587;&#1572;&#1608;&#1604;&#1577; &#1593;&#1606; &#1593;&#1585;&#1590; &#1607;&#1584;&#1575; &#1575;&#1604;&#1581;&#1602;&#1604; &#1608;&#1575;&#1604;&#1578;&#1610; &#1571;&#1590;&#1601;&#1606;&#1575;&#1607;&#1575; &#1576;&#1593;&#1583; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577;.</p></li><li><p dir="rtl">&#1578;&#1587;&#1580;&#1610;&#1604; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1593;&#1606; &#1591;&#1585;&#1610;&#1602; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">register_setting</span> &#1604;&#1606;&#1582;&#1576;&#1585; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1593;&#1606; &#1607;&#1584;&#1607; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1581;&#1578;&#1609; &#1610;&#1602;&#1608;&#1605; &#1576;&#1593;&#1605;&#1604;&#1610;&#1577; &#1581;&#1601;&#1592; &#1607;&#1584;&#1607; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1576;&#1575;&#1604;&#1606;&#1610;&#1575;&#1576;&#1577; &#1593;&#1606;&#1575;.</p></li></ul><p dir="rtl">&#1576;&#1593;&#1583; &#1584;&#1604;&#1603; &#1602;&#1605;&#1606;&#1575; &#1576;&#1573;&#1590;&#1575;&#1601;&#1577; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1573;&#1604;&#1609; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; &#1575;&#1604;&#1605;&#1606;&#1575;&#1587;&#1576; &#1608;&#1607;&#1608; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; <span style="font-family:'courier new', courier, monospace;">admin_init</span>.</p><p dir="rtl">&#1571;&#1582;&#1610;&#1585;&#1611;&#1575; &#1602;&#1605;&#1606;&#1575; &#1576;&#1573;&#1606;&#1588;&#1575;&#1569; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1587;&#1572;&#1608;&#1604;&#1577; &#1605;&#1606; &#1593;&#1585;&#1590; &#1605;&#1581;&#1578;&#1608;&#1610;&#1575;&#1578; &#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1608;&#1603;&#1605;&#1575; &#1578;&#1604;&#1575;&#1581;&#1592; &#1575;&#1587;&#1578;&#1582;&#1583;&#1605;&#1606;&#1575; &#1601;&#1610;&#1607;&#1575; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">do_settings_sections</span> &#1608;&#1575;&#1604;&#1578;&#1610; &#1578;&#1590;&#1610;&#1601; &#1571;&#1602;&#1587;&#1575;&#1605; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1575;&#1604;&#1605;&#1585;&#1578;&#1576;&#1591;&#1577; &#1576;&#1607;&#1584;&#1607; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577; &#1608;&#1603;&#1584;&#1604;&#1603; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">settings_fields</span> &#1575;&#1604;&#1605;&#1587;&#1572;&#1608;&#1604;&#1577; &#1593;&#1606; &#1573;&#1582;&#1585;&#1575;&#1580; &#1605;&#1575; &#1610;&#1593;&#1585;&#1601; &#1576; <span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://en.wikipedia.org/wiki/Cryptographic_nonce">nonce</a></span> &#1608;&#1607;&#1608; &#1605;&#1578;&#1593;&#1604;&#1602; &#1576;&#1578;&#1571;&#1605;&#1610;&#1606; &#1575;&#1604;&#1606;&#1605;&#1608;&#1584;&#1580; <span style="font-family:'courier new', courier, monospace;">form</span>. &#1608;&#1571;&#1582;&#1610;&#1585;&#1611;&#1575; &#1602;&#1605;&#1606;&#1575; &#1576;&#1605;&#1606;&#1575;&#1583;&#1575;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">submit_button</span> &#1608;&#1575;&#1604;&#1578;&#1610; &#1587;&#1578;&#1593;&#1585;&#1590; &#1586;&#1585; &#1575;&#1604;&#1581;&#1601;&#1592;.</p><h3 dir="rtl">&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;</h3><p dir="rtl">&#1604;&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; &#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1575;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577; &#1581;&#1578;&#1609; &#1578;&#1587;&#1578;&#1582;&#1583;&#1605;&#1607;&#1575; &#1610;&#1605;&#1603;&#1606;&#1603; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1593;&#1585;&#1601;&#1606;&#1575;&#1607;&#1575; &#1587;&#1575;&#1576;&#1602;&#1575; &#1608;&#1607;&#1610; <span style="font-family:'courier new', courier, monospace;">get_option</span> &#1581;&#1610;&#1579; &#1587;&#1606;&#1605;&#1585;&#1585; &#1604;&#1607;&#1575; &#1575;&#1587;&#1605; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; <span style="font-family:'courier new', courier, monospace;">$option_name</span> &#1575;&#1604;&#1584;&#1610; &#1593;&#1585;&#1601;&#1606;&#1575;&#1607; &#1587;&#1575;&#1576;&#1602;&#1575; &#1582;&#1604;&#1575;&#1604; &#1578;&#1587;&#1580;&#1610;&#1604; &#1575;&#1604;&#1573;&#1593;&#1583;&#1575;&#1583;&#1575;&#1578; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">register_settings</span>.</p><h2 dir="rtl">&#1582;&#1575;&#1578;&#1605;&#1577;</h2><p dir="rtl"><span style="line-height:11.1999998092651px;">&#1610;&#1608;&#1601;&#1585;&nbsp;</span>&#1575;&#1604;&#1578;&#1593;&#1575;&#1605;&#1604; &#1605;&#1593; Setting <abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface">API</abbr></abbr></abbr></abbr></abbr></abbr></abbr> &#1608; Option <abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface">API</abbr></abbr></abbr></abbr></abbr></abbr></abbr>&nbsp; &#1575;&#1604;&#1603;&#1579;&#1610;&#1585; &#1605;&#1606; &#1575;&#1604;&#1605;&#1580;&#1607;&#1608;&#1583; &#1575;&#1604;&#1605;&#1615;&#1578;&#1593;&#1604;&#1617;&#1602; &#1576;&#1581;&#1601;&#1592; &#1575;&#1604;&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1608;&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593;&#1607;&#1575; &#1576;&#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1575;&#1604;&#1578;&#1602;&#1604;&#1610;&#1583;&#1610;&#1577; &#1608;&#1575;&#1604;&#1578;&#1610; &#1578;&#1578;&#1591;&#1604;&#1576; &#1575;&#1604;&#1602;&#1610;&#1575;&#1605; &#1576;&#1603;&#1604; &#1593;&#1605;&#1604;&#1610;&#1575;&#1578; &#1575;&#1604;&#1575;&#1578;&#1589;&#1575;&#1604; &#1605;&#1593; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1575;&#1604;&#1578;&#1571;&#1603;&#1583; &#1605;&#1606; &#1578;&#1571;&#1605;&#1610;&#1606; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578; &#1608;&#1575;&#1604;&#1578;&#1593;&#1575;&#1605;&#1604; &#1605;&#1593; &#1606;&#1605;&#1575;&#1584;&#1580; &#1575;&#1604;&#1581;&#1601;&#1592; &#1608;&#1594;&#1610;&#1585;&#1607;&#1575; &#1605;&#1606; &#1575;&#1604;&#1593;&#1605;&#1604;&#1610;&#1575;&#1578;&#1548; &#1604;&#1603;&#1606; &#1601;&#1610; &#1575;&#1604;&#1576;&#1583;&#1575;&#1610;&#1577; &#1602;&#1583; &#1578;&#1580;&#1583; &#1589;&#1593;&#1608;&#1576;&#1577; &#1601;&#1610; &#1575;&#1604;&#1578;&#1593;&#1575;&#1605;&#1604; &#1605;&#1593; &#1607;&#1575;&#1578;&#1610;&#1606; &#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1578;&#1610;&#1606; &#1582;&#1589;&#1608;&#1589;&#1575; &#1601;&#1610;&#1605;&#1575; &#1610;&#1578;&#1593;&#1604;&#1602; &#1601;&#1610; &#1581;&#1601;&#1592; &#1571;&#1587;&#1605;&#1575;&#1569; &#1575;&#1604;&#1583;&#1608;&#1575;&#1604; &#1608;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578;&#1607;&#1575; &#1608;&#1575;&#1585;&#1578;&#1576;&#1575;&#1591;&#1607;&#1575; &#1605;&#1593; &#1576;&#1593;&#1590;&#1607;&#1575; &#1575;&#1604;&#1576;&#1593;&#1590;&#1548; &#1604;&#1603;&#1606; &#1587;&#1610;&#1578;&#1594;&#1610;&#1617;&#1585; &#1575;&#1604;&#1571;&#1605;&#1585; &#1576;&#1593;&#1583; &#1575;&#1604;&#1578;&#1617;&#1593;&#1575;&#1605;&#1604; &#1605;&#1593;&#1607;&#1575; &#1604;&#1601;&#1578;&#1585;&#1577; &#1602;&#1589;&#1610;&#1585;&#1577;.</p>
]]></description><guid isPermaLink="false">43</guid><pubDate>Wed, 18 Mar 2015 06:16:00 +0000</pubDate></item><item><title>&#x628;&#x631;&#x645;&#x62C;&#x629; &#x625;&#x636;&#x627;&#x641;&#x627;&#x62A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;: &#x627;&#x644;&#x62E;&#x64F;&#x637;&#x651;&#x627;&#x641;&#x627;&#x62A; (Hooks)</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%A7%D9%84%D8%AE%D9%8F%D8%B7%D9%91%D8%A7%D9%81%D8%A7%D8%AA-hooks-r40/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/plugins-wp_480x300.png.bd4f2488011fded0a7c226d1c38ccfd1.png" /></p>
<p dir="rtl">&#1603;&#1605;&#1575; &#1584;&#1603;&#1585;&#1606;&#1575; &#1601;&#1610; &#1575;&#1604;&#1583;&#1585;&#1587; &#1575;&#1604;&#1587;&#1575;&#1576;&#1602; (<a href="http://academy.hsoub.com/code/php/wordpress/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r38/">&#1605;&#1583;&#1582;&#1604; &#1573;&#1604;&#1609; &#1576;&#1585;&#1605;&#1580;&#1577; &#1573;&#1590;&#1575;&#1601;&#1575;&#1578; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;</a>) &#1605;&#1606; &#1607;&#1584;&#1607; &#1575;&#1604;&#1587;&#1604;&#1587;&#1604;&#1577; &#1601;&#1573;&#1606; &#1575;&#1604;&#1582;&#1591;&#1617;&#1575;&#1601;&#1575;&#1578; &#1578;&#1593;&#1583; &#1605;&#1606; &#1571;&#1607;&#1605; &#1575;&#1604;&#1582;&#1589;&#1575;&#1574;&#1589; &#1575;&#1604;&#1578;&#1610; &#1610;&#1608;&#1601;&#1585;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1608;&#1575;&#1604;&#1578;&#1610; &#1580;&#1593;&#1604;&#1578;&#1607; &#1605;&#1585;&#1606;&#1611;&#1575;&nbsp;flexible &#1608;&#1602;&#1575;&#1576;&#1604; &#1604;&#1604;&#1578;&#1605;&#1583;&#1583; extensible &#1576;&#1589;&#1608;&#1585;&#1577; &#1602;&#1604; &#1571;&#1606; &#1578;&#1580;&#1583; &#1604;&#1607;&#1575; &#1606;&#1592;&#1610;&#1585;&#1611;&#1575; &#1601;&#1610; &#1576;&#1585;&#1605;&#1580;&#1610;&#1575;&#1578; &#1575;&#1604;&#1608;&#1610;&#1576; &#1581;&#1610;&#1579; &#1610;&#1593;&#1578;&#1605;&#1583; &#1593;&#1604;&#1609; &#1578;&#1608;&#1601;&#1610;&#1585; &#1606;&#1602;&#1575;&#1591; &#1585;&#1576;&#1591; &#1578;&#1605;&#1603;&#1606; &#1575;&#1604;&#1605;&#1591;&#1608;&#1585;&#1610;&#1606; &#1605;&#1606; &#1578;&#1606;&#1601;&#1610;&#1584; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1610;&#1585;&#1610;&#1583;&#1608;&#1606;&#1607;&#1575; &#1571;&#1579;&#1606;&#1575;&#1569; &#1583;&#1608;&#1585;&#1577; &#1581;&#1610;&#1575;&#1577; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;&#1548; &#1608;&#1584;&#1604;&#1603; &#1576;&#1575;&#1593;&#1578;&#1605;&#1575;&#1583;&#1607; &#1593;&#1604;&#1609; <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Event-driven_architecture">&#1605;&#1593;&#1605;&#1575;&#1585;&#1610;&#1577;</a><a rel="external nofollow" href="http://en.wikipedia.org/wiki/Event-driven_architecture"> </a><a rel="external nofollow" href="http://en.wikipedia.org/wiki/Event-driven_architecture">Event Driven.</a><br>&#1610;&#1608;&#1601;&#1585; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1604;&#1604;&#1605;&#1591;&#1608;&#1585;&#1610;&#1606; &#1575;&#1604;&#1575;&#1587;&#1578;&#1601;&#1575;&#1583;&#1577; &#1605;&#1606; &#1607;&#1584;&#1607; &#1575;&#1604;&#1605;&#1610;&#1586;&#1577; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1605;&#1575; &#1610;&#1593;&#1585;&#1601;<a rel="external nofollow" href="http://codex.wordpress.org/Plugin_API/"> &#1576;&#1575;&#1604;&#1608;&#1575;&#1580;&#1607;&#1577; &#1575;&#1604;&#1576;&#1585;&#1605;&#1580;&#1610;&#1577; &#1604;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577; </a><a rel="external nofollow" href="http://codex.wordpress.org/Plugin_API/">Plugin <abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface"><abbr title="&#1608;&#1575;&#1580;&#1607;&#1577; &#1576;&#1585;&#1605;&#1580;&#1610;&#1577; | Application Programming Interface">API</abbr></abbr></abbr></abbr></abbr></abbr></abbr></abbr></abbr></abbr></abbr></abbr></abbr></a> &#1608;&#1575;&#1604;&#1578;&#1610; &#1606;&#1581;&#1606; &#1576;&#1589;&#1583;&#1583; &#1575;&#1604;&#1573;&#1591;&#1604;&#1575;&#1593; &#1593;&#1604;&#1609; &#1571;&#1607;&#1605; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1578;&#1608;&#1601;&#1585;&#1607;&#1575; &#1601;&#1610; &#1580;&#1575;&#1606;&#1576;&#1610; &#1575;&#1604;&#1573;&#1580;&#1585;&#1575;&#1569;&#1575;&#1578; Actions &#1608;&#1575;&#1604;&#1605;&#1615;&#1585;&#1588;&#1617;&#1581;&#1575;&#1578; Filters &#1608;&#1576;&#1593;&#1590; &#1575;&#1604;&#1571;&#1605;&#1579;&#1604;&#1577; &#1575;&#1604;&#1578;&#1608;&#1590;&#1610;&#1581;&#1610;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1587;&#1582; &#1601;&#1607;&#1605; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1608;&#1575;&#1604;&#1605;&#1601;&#1575;&#1607;&#1610;&#1605; &#1575;&#1604;&#1605;&#1578;&#1593;&#1604;&#1602;&#1577; &#1576;&#1607;&#1575;.</p><h2 dir="rtl">&#1575;&#1604;&#1573;&#1580;&#1585;&#1575;&#1569;&#1575;&#1578; &#1601;&#1610; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;</h2><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; add_action</h3><p dir="rtl">&#1584;&#1603;&#1585;&#1606;&#1575; &#1587;&#1575;&#1576;&#1602;&#1611;&#1575; &#1571;&#1606;&#1607; &#1610;&#1605;&#1603;&#1606;&#1603; &#1573;&#1590;&#1575;&#1601;&#1577; &#1573;&#1580;&#1585;&#1575;&#1569; &#1604;&#1581;&#1583;&#1579; &#1605;&#1593;&#1610;&#1606; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/add_action">add_action</a> </span>&#1604;&#1603;&#1606;&#1606;&#1575; &#1604;&#1605; &#1606;&#1584;&#1603;&#1585; &#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577; &#1604;&#1604;&#1583;&#1575;&#1604;&#1577; &#1608;&#1578;&#1601;&#1575;&#1589;&#1610;&#1604; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1578;&#1602;&#1576;&#1604;&#1607;&#1575;&#1548; &#1608;&#1607;&#1584;&#1607; &#1607;&#1610; &#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577; &#1575;&#1604;&#1593;&#1575;&#1605;&#1577; &#1604;&#1604;&#1583;&#1617;&#1575;&#1604;&#1577;:</p><pre class="php ipsCode prettyprint">add_action( $hook, $function_to_add, $priority, $accepted_args );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$hook</span></strong> : &#1607;&#1608; &#1575;&#1604;&#1581;&#1583;&#1579; &#1575;&#1604;&#1584;&#1610; &#1578;&#1585;&#1610;&#1583; &#1571;&#1606; &#1578;&#1585;&#1576;&#1591; &#1576;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1582;&#1575;&#1589;&#1577; &#1576;&#1603;&#1548; &#1571;&#1610; &#1575;&#1604;&#1581;&#1583;&#1579; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1610;&#1583; &#1571;&#1606; &#1578;&#1606;&#1601;&#1584; &#1583;&#1575;&#1604;&#1578;&#1603; &#1593;&#1606;&#1583; &#1581;&#1583;&#1608;&#1579;&#1607;. &#1608;&#1610;&#1605;&#1603;&#1606;&#1603; &#1575;&#1604;&#1573;&#1591;&#1604;&#1575;&#1593; &#1593;&#1604;&#1609; <a rel="external nofollow" href="http://codex.wordpress.org/Plugin_API/Action_Reference">&#1575;</a><a rel="external nofollow" href="http://codex.wordpress.org/Plugin_API/Action_Reference">&#1604;&#1571;&#1581;&#1583;&#1575;&#1579; &#1575;&#1604;&#1578;&#1610; &#1610;&#1608;&#1601;&#1585;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1605;&#1606; &#1607;&#1606;&#1575;</a>.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$function_to_add</span></strong>:&#1575;&#1587;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; (&#1575;&#1604;&#1573;&#1580;&#1585;&#1575;&#1569;) &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1610;&#1583; &#1573;&#1590;&#1575;&#1601;&#1578;&#1607;&#1575; &#1604;&#1604;&#1581;&#1583;&#1579; &#1571;&#1593;&#1604;&#1575;&#1607;. &#1571;&#1610; &#1575;&#1604;&#1578;&#1610; &#1587;&#1578;&#1606;&#1601;&#1584; &#1593;&#1606;&#1583; &#1581;&#1589;&#1608;&#1604; &#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">$hook</span> .</li><li><strong><span style="font-family:'courier new', courier, monospace;">$priority</span></strong> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1607;&#1584;&#1607; &#1607;&#1610; &#1571;&#1608;&#1604;&#1608;&#1610;&#1577; &#1578;&#1606;&#1601;&#1610;&#1584; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1593;&#1606;&#1583; &#1607;&#1584;&#1575; &#1575;&#1604;&#1581;&#1583;&#1579;&#1548; &#1576;&#1605;&#1593;&#1606;&#1609; &#1571;&#1606;&#1607; &#1573;&#1584;&#1575; &#1603;&#1575;&#1606; &#1607;&#1606;&#1575;&#1604;&#1603; &#1571;&#1603;&#1579;&#1585; &#1605;&#1606; &#1583;&#1575;&#1604;&#1577; &#1578;&#1605; &#1573;&#1590;&#1575;&#1601;&#1578;&#1607;&#1575; &#1576;&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_action</span> &#1573;&#1604;&#1609; &#1606;&#1601;&#1587; &#1575;&#1604;&#1581;&#1583;&#1579; &#1601;&#1573;&#1606; &#1602;&#1610;&#1605;&#1577; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; &#1587;&#1578;&#1581;&#1583;&#1583; &#1571;&#1610; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1587;&#1578;&#1606;&#1601;&#1584; &#1571;&#1608;&#1604;&#1575; &#1608;&#1571;&#1610;&#1607;&#1575; &#1579;&#1575;&#1606;&#1610;&#1575; &#1608;&#1607;&#1603;&#1584;&#1575;.&nbsp;&#1602;&#1610;&#1605;&#1577; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; &#1610;&#1580;&#1576; &#1571;&#1606; &#1578;&#1603;&#1608;&#1606; &#1605;&#1606; &#1575;&#1604;&#1606;&#1608;&#1593; <span style="font-family:'courier new', courier, monospace;">int</span>&#1548; &#1608;&#1602;&#1610;&#1605;&#1578;&#1607; &#1575;&#1604;&#1575;&#1601;&#1578;&#1585;&#1575;&#1590;&#1610;&#1577; 10 &#1608;&#1575;&#1604;&#1581;&#1583;&#1579; &#1584;&#1608; &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1571;&#1602;&#1604; &#1587;&#1610;&#1606;&#1601;&#1584; &#1571;&#1608;&#1604;&#1575;&#1548; &#1576;&#1605;&#1593;&#1606;&#1609; &#1571;&#1606; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1604;&#1583;&#1610;&#1607;&#1575; &#1602;&#1610;&#1605;&#1577; 5 &#1587;&#1578;&#1606;&#1601;&#1584; &#1602;&#1576;&#1604; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1604;&#1583;&#1610;&#1607;&#1575; 20 &#1608;&#1607;&#1603;&#1584;&#1575;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$accepted_args</span></strong> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1593;&#1583;&#1583; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1578;&#1602;&#1576;&#1604;&#1607;&#1575; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1591;&#1604;&#1608;&#1576;&nbsp;&#1578;&#1606;&#1601;&#1610;&#1584;&#1607;&#1575;&nbsp;<span style="font-family:'courier new', courier, monospace;">$function_to_add</span>&#1548; &#1601;&#1605;&#1579;&#1604;&#1575; &#1575;&#1604;&#1573;&#1580;&#1585;&#1575;&#1569; <span style="font-family:'courier new', courier, monospace;">publish_post</span> &#1610;&#1602;&#1608;&#1605; &#1576;&#1578;&#1605;&#1585;&#1610;&#1585; &#1605;&#1593;&#1585;&#1601; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604; &#1575;&#1604;&#1584;&#1610; &#1578;&#1605; &#1606;&#1588;&#1585;&#1607; &#1604;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1591;&#1604;&#1608;&#1576; &#1578;&#1606;&#1601;&#1610;&#1584;&#1607;&#1575;. &#1608;&#1593;&#1575;&#1583;&#1577; &#1610;&#1578;&#1605; &#1578;&#1581;&#1583;&#1610;&#1583; &#1607;&#1584;&#1607; &#1605;&#1606; &#1602;&#1576;&#1604; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; &#1606;&#1601;&#1587;&#1607;.</li></ul><h3 dir="rtl">&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; <span style="font-family:'courier new', courier, monospace;">add_action</span> &#1605;&#1593; &#1575;&#1604;&#1601;&#1574;&#1575;&#1578; Classes</h3><p dir="rtl">&#1571;&#1581;&#1610;&#1575;&#1606;&#1611;&#1575; &#1602;&#1583; &#1578;&#1608;&#1583; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_action</span> &#1604;&#1573;&#1590;&#1575;&#1601;&#1577; &#1583;&#1575;&#1604;&#1577; &#1578;&#1575;&#1576;&#1593;&#1577; &#1604;&#1601;&#1574;&#1577; &#1571;&#1608; &#1604;&#1603;&#1575;&#1574;&#1606; Object &#1605;&#1593;&#1610;&#1606; &#1581;&#1610;&#1606;&#1574;&#1584; &#1610;&#1606;&#1576;&#1594;&#1610; &#1593;&#1604;&#1610;&#1603; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; <span style="font-family:'courier new', courier, monospace;">add_action</span> &#1603;&#1605;&#1575; &#1601;&#1610; &#1575;&#1604;&#1605;&#1579;&#1575;&#1604; &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;:</p><pre class="php ipsCode prettyprint">class MyPluginClass {
   public function __construct() {
      add_action( 'save_post', array( $this, 'myplugin_save_posts' ) );
   }
   public function myplugin_save_posts() {
      // do stuff here...
   }
}
$mypluginclass = new MyPluginClass();
</pre><p dir="rtl">&#1608;&#1578;&#1604;&#1575;&#1581;&#1592; &#1571;&#1606;&#1606;&#1575; &#1575;&#1587;&#1578;&#1582;&#1583;&#1605;&#1606;&#1575; &#1575;&#1587;&#1605; &#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">save_post</span> &#1608;&#1601;&#1610; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; &#1575;&#1604;&#1579;&#1575;&#1606;&#1610; &#1571;&#1588;&#1585;&#1606;&#1575; &#1573;&#1604;&#1609; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1605;&#1589;&#1601;&#1608;&#1601;&#1577;</p><pre class="php ipsCode prettyprint">array( $this, 'myplugin_save_posts' )</pre><p dir="rtl">&#1581;&#1610;&#1579; &#1578;&#1588;&#1610;&#1585; <span style="font-family:'courier new', courier, monospace;">$this</span> &#1573;&#1604;&#1609; &#1575;&#1604;&#1603;&#1575;&#1574;&#1606; &#1575;&#1604;&#1581;&#1575;&#1604;&#1610; &#1608;<span style="font-family:'courier new', courier, monospace;">myplugin_save_posts</span> &#1578;&#1588;&#1610;&#1585; &#1573;&#1604;&#1609; &#1575;&#1587;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1606;&#1608;&#1583; &#1573;&#1590;&#1575;&#1601;&#1578;&#1607;&#1575; &#1604;&#1604;&#1581;&#1583;&#1579;.</p><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; remove_action</h3><p dir="rtl">&#1578;&#1593;&#1615;&#1578;&#1576;&#1585; &#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/remove_action">remove_action</a></span>&nbsp;&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1593;&#1603;&#1587;&#1610;&#1577; &#1604;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_action</span> &#1581;&#1610;&#1579; &#1578;&#1602;&#1608;&#1605; &#1576;&#1581;&#1584;&#1601; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1610;&#1583;&#1607;&#1575; &#1605;&#1606; &#1575;&#1604;&#1581;&#1583;&#1579; &#1575;&#1604;&#1584;&#1610; &#1578;&#1585;&#1610;&#1583;&#1607; &#1608;&#1578;&#1571;&#1582;&#1584; <span style="line-height:20.3636360168457px;">&#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1593;&#1575;&#1605;&#1577; &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;:</p><pre class="php ipsCode prettyprint">remove_action( $tag, $function_to_remove, $priority );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$tag</span></strong> : &#1575;&#1587;&#1605; &#1575;&#1604;&#1581;&#1583;&#1579; &#1575;&#1604;&#1584;&#1610; &#1578;&#1605; &#1573;&#1590;&#1575;&#1601;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1573;&#1604;&#1610;&#1607;</li><li><strong><span style="font-family:'courier new', courier, monospace;">$function_to_remove</span></strong> : &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1608;&#1583; &#1581;&#1584;&#1601;&#1607;&#1575; &#1605;&#1606; &#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">$tag</span></li><li><strong><span style="font-family:'courier new', courier, monospace;">$priority</span></strong> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1571;&#1608;&#1604;&#1608;&#1610;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1610;&#1583; &#1581;&#1584;&#1601;&#1607;&#1575; &#1608;&#1575;&#1604;&#1578;&#1610; &#1578;&#1605; &#1578;&#1593;&#1585;&#1610;&#1601;&#1607;&#1575; &#1605;&#1587;&#1576;&#1602;&#1575; &#1593;&#1606;&#1583; &#1573;&#1590;&#1575;&#1601;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1573;&#1604;&#1609; &#1575;&#1604;&#1581;&#1583;&#1579; &#1593;&#1606; &#1591;&#1585;&#1610;&#1602; add_action</li></ul><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; has_action</h3><p dir="rtl">&#1578;&#1587;&#1578;&#1582;&#1583;&#1605; &#1583;&#1575;&#1604;&#1577; <a rel="external nofollow" style="line-height:20.3636360168457px;" href="http://codex.wordpress.org/Function_Reference/has_action">has_action</a>&nbsp;&#1604;&#1575;&#1582;&#1578;&#1576;&#1575;&#1585; &#1573;&#1584;&#1575; &#1603;&#1575;&#1606;&#1578; &#1583;&#1575;&#1604;&#1577; &#1605;&#1593;&#1610;&#1606;&#1577; &#1602;&#1583; &#1571;&#1590;&#1610;&#1601;&#1578; &#1573;&#1604;&#1609; &#1581;&#1583;&#1579; &#1605;&#1593;&#1610;&#1606;&#1548; &#1608;<span style="line-height:20.3636360168457px;">&#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1593;&#1575;&#1605;&#1577; &#1604;&#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1607;&#1610;:</p><pre class="php ipsCode prettyprint">has_action( $tag, $function_to_check )</pre><p dir="rtl">&#1581;&#1610;&#1579;</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$tag</span></strong> : &#1575;&#1604;&#1581;&#1583;&#1579; &#1575;&#1604;&#1584;&#1610; &#1578;&#1608;&#1583; &#1605;&#1593;&#1585;&#1601;&#1577; &#1573;&#1584;&#1575; &#1605;&#1575; &#1603;&#1575;&#1606;&#1578; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1602;&#1583; &#1571;&#1590;&#1610;&#1601;&#1578; &#1573;&#1604;&#1610;&#1607;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$function_to_check</span></strong> : &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1608;&#1583; &#1605;&#1593;&#1585;&#1601;&#1577; &#1573;&#1584;&#1575; &#1605;&#1575; &#1603;&#1575;&#1606;&#1578; &#1571;&#1590;&#1610;&#1601;&#1578; &#1573;&#1604;&#1609; &#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">$tag</span> &#1571;&#1605;&#1575; &#1604;&#1575;.</li><li>&#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1605;&#1585;&#1580;&#1593;&#1577; &#1605;&#1606; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577;: &#1578;&#1585;&#1580;&#1593; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1602;&#1610;&#1605;&#1577; <span style="font-family:'courier new', courier, monospace;">false</span> &#1573;&#1584;&#1575; &#1603;&#1575;&#1606;&#1578; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">$function_to_check</span> &#1594;&#1610;&#1585; &#1605;&#1590;&#1575;&#1601;&#1577; &#1604;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">$tag</span> &#1608;&#1578;&#1585;&#1580;&#1593; &#1571;&#1608;&#1604;&#1608;&#1610;&#1577; &#1578;&#1606;&#1601;&#1610;&#1584;&#1607;&#1575; priority &#1573;&#1584;&#1575; &#1603;&#1575;&#1606;&#1578; &#1605;&#1590;&#1575;&#1601;&#1577; &#1604;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">$tag</span>.</li></ul><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; do_action</h3><p dir="rtl">&#1610;&#1587;&#1578;&#1582;&#1583;&#1605;&nbsp;&#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1575;&#1604;&#1583;&#1617;&#1575;&#1604;&#1577; <a rel="external nofollow" style="line-height:20.3636360168457px;" href="http://codex.wordpress.org/Function_Reference/do_action">do_action</a>&nbsp;&#1604;&#1578;&#1581;&#1583;&#1610;&#1583; &#1575;&#1604;&#1605;&#1603;&#1575;&#1606; &#1575;&#1604;&#1584;&#1610; &#1587;&#1610;&#1606;&#1601;&#1584; &#1601;&#1610;&#1607; &#1575;&#1604;&#1573;&#1580;&#1585;&#1575;&#1569;&#1548; &#1608;&#1576;&#1575;&#1604;&#1578;&#1575;&#1604;&#1610; &#1601;&#1610; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1603;&#1575;&#1606; &#1575;&#1604;&#1584;&#1610; &#1578;&#1578;&#1608;&#1575;&#1580;&#1583; &#1601;&#1610;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1610;&#1602;&#1608;&#1605; &#1576;&#1578;&#1606;&#1601;&#1610;&#1584; &#1603;&#1604; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1578;&#1605; &#1573;&#1590;&#1575;&#1601;&#1578;&#1607;&#1575; &#1604;&#1607;&#1584;&#1575; &#1575;&#1604;&#1581;&#1583;&#1579; &#1575;&#1604;&#1605;&#1593;&#1610;&#1606;&#1548; &#1608;&#1578;&#1571;&#1582;&#1584; <span style="line-height:20.3636360168457px;">&#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1593;&#1575;&#1605;&#1577;</p><pre class="php ipsCode prettyprint"> do_action( $tag, $arg );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$tag</span></strong> : &#1575;&#1587;&#1605; &#1575;&#1604;&#1573;&#1580;&#1585;&#1575;&#1569; &#1575;&#1604;&#1584;&#1610; &#1578;&#1608;&#1583; &#1578;&#1606;&#1601;&#1610;&#1584;&#1607;. &#1608;&#1603;&#1605;&#1575; &#1571;&#1587;&#1604;&#1601;&#1606;&#1575; &#1601;&#1573;&#1606; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1593;&#1606;&#1583; &#1605;&#1606;&#1575;&#1583;&#1575;&#1578;&#1607;&#1575; &#1587;&#1578;&#1606;&#1601;&#1584; &#1603;&#1604; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1578;&#1605; &#1573;&#1590;&#1575;&#1601;&#1578;&#1607;&#1575; &#1604;&#1607;&#1584;&#1575; &#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">$tag</span>.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$arg</span></strong> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; &#1575;&#1604;&#1584;&#1610; &#1610;&#1578;&#1605; &#1578;&#1605;&#1585;&#1610;&#1585;&#1607; &#1604;&#1604;&#1583;&#1608;&#1575;&#1604; &#1575;&#1604;&#1605;&#1585;&#1578;&#1576;&#1591;&#1577; &#1576;&#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">$tag</span></li></ul><p dir="rtl">&#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1601;&#1610; &#1575;&#1604;&#1571;&#1587;&#1575;&#1587; &#1610;&#1587;&#1578;&#1582;&#1583;&#1605;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1604;&#1610;&#1581;&#1583;&#1583; &#1605;&#1603;&#1575;&#1606; &#1578;&#1606;&#1601;&#1610;&#1584; <a rel="external nofollow" href="http://codex.wordpress.org/Plugin_API/Action_Reference">&#1575;</a><a rel="external nofollow" href="http://codex.wordpress.org/Plugin_API/Action_Reference">&#1604;&#1571;&#1581;&#1583;&#1575;&#1579; &#1575;&#1604;&#1578;&#1610; &#1610;&#1608;&#1601;&#1585;&#1607;&#1575;</a> &#1604;&#1603;&#1606; &#1610;&#1605;&#1603;&#1606;&#1603; &#1571;&#1610;&#1590;&#1575; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605;&#1607;&#1575; &#1604;&#1573;&#1606;&#1588;&#1575;&#1569; &#1571;&#1581;&#1583;&#1575;&#1579; &#1582;&#1575;&#1589;&#1577; &#1576;&#1603; &#1601;&#1610; &#1581;&#1575;&#1604;&#1577; &#1571;&#1585;&#1583;&#1578; &#1605;&#1579;&#1604;&#1575; &#1571;&#1606; &#1578;&#1578;&#1610;&#1581; &#1604;&#1604;&#1605;&#1591;&#1608;&#1585;&#1610;&#1606; &#1606;&#1602;&#1575;&#1591; &#1605;&#1593;&#1610;&#1606;&#1577; &#1583;&#1575;&#1582;&#1604; &#1573;&#1590;&#1575;&#1601;&#1578;&#1603; (&#1571;&#1608; &#1602;&#1575;&#1604;&#1576;&#1603;) &#1604;&#1610;&#1606;&#1601;&#1584;&#1608;&#1575; &#1601;&#1610;&#1607;&#1575; &#1583;&#1608;&#1575;&#1604;&#1607;&#1605; &#1575;&#1604;&#1582;&#1575;&#1589;&#1577;&#1548; &#1608;&#1576;&#1607;&#1584;&#1607; &#1575;&#1604;&#1591;&#1585;&#1610;&#1602;&#1577; &#1610;&#1605;&#1603;&#1606; &#1573;&#1606;&#1588;&#1575;&#1569; &#1573;&#1590;&#1575;&#1601;&#1575;&#1578; &#1602;&#1575;&#1576;&#1604;&#1577; &#1604;&#1578;&#1588;&#1578;&#1594;&#1604; &#1593;&#1604;&#1610;&#1607;&#1575; &#1573;&#1590;&#1575;&#1601;&#1575;&#1578; &#1571;&#1582;&#1585;&#1609; &#1571;&#1608; &#1605;&#1575; &#1610;&#1605;&#1603;&#1606; &#1571;&#1606; &#1606;&#1591;&#1604;&#1602; &#1593;&#1604;&#1610;&#1607; &#1575;&#1587;&#1605; Extensions &#1608;&#1607;&#1606;&#1575;&#1604;&#1603; &#1593;&#1583;&#1577; &#1571;&#1605;&#1579;&#1604;&#1577; &#1604;&#1573;&#1590;&#1575;&#1601;&#1575;&#1578; &#1606;&#1575;&#1580;&#1581;&#1577; &#1578;&#1608;&#1601;&#1585; &#1607;&#1584;&#1607; &#1575;&#1604;&#1605;&#1610;&#1586;&#1577; &#1606;&#1584;&#1603;&#1585; &#1605;&#1606;&#1607;&#1575; &#1593;&#1604;&#1609; &#1587;&#1576;&#1610;&#1604; &#1575;&#1604;&#1605;&#1579;&#1575;&#1604; <a rel="external nofollow" href="https://wordpress.org/plugins/bbpress/">&#1573;&#1590;&#1575;&#1601;&#1577; </a><a rel="external nofollow" href="https://wordpress.org/plugins/bbpress/">Bbpress</a> &#1575;&#1604;&#1605;&#1588;&#1607;&#1608;&#1585;&#1577; &#1608;&#1603;&#1584;&#1604;&#1603; <a rel="external nofollow" href="https://wordpress.org/plugins/woocommerce/">&#1573;&#1590;&#1575;&#1601;&#1577; </a><a rel="external nofollow" href="https://wordpress.org/plugins/woocommerce/">Woocommernce</a>&nbsp;&#1581;&#1610;&#1579;&nbsp;&#1571;&#1606; &#1607;&#1575;&#1578;&#1610;&#1606; &#1575;&#1604;&#1573;&#1590;&#1575;&#1601;&#1578;&#1610;&#1606; &#1578;&#1593;&#1605;&#1604; &#1601;&#1608;&#1602;&#1607;&#1605;&#1575; &#1593;&#1583;&#1577; &#1573;&#1590;&#1575;&#1601;&#1575;&#1578; &#1571;&#1582;&#1585;&#1609; &#1578;&#1586;&#1610;&#1583; &#1605;&#1606; &#1605;&#1605;&#1610;&#1586;&#1575;&#1578;&#1607;&#1605;&#1575;&#1548; &#1608;&#1578;&#1602;&#1585;&#1610;&#1576;&#1575; &#1605;&#1593;&#1592;&#1605; &#1573;&#1590;&#1575;&#1601;&#1575;&#1578; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1578;&#1608;&#1601;&#1585; &#1605;&#1580;&#1605;&#1608;&#1593;&#1577; &#1605;&#1606; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1575;&#1578; hooks &#1604;&#1604;&#1605;&#1591;&#1608;&#1585;&#1610;&#1606;&#1548; &#1604;&#1584;&#1604;&#1603; &#1601;&#1610; &#1581;&#1575;&#1604;&#1577; &#1601;&#1603;&#1585;&#1578; &#1601;&#1610; &#1573;&#1606;&#1588;&#1575;&#1569; &#1573;&#1590;&#1575;&#1601;&#1577; &#1604;&#1606;&#1588;&#1585;&#1607;&#1575; &#1601;&#1610; &#1605;&#1580;&#1578;&#1605;&#1593; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1605;&#1606; &#1575;&#1604;&#1580;&#1610;&#1583; &#1571;&#1606; &#1578;&#1580;&#1593;&#1604; &#1606;&#1592;&#1585;&#1578;&#1603; &#1605;&#1587;&#1578;&#1602;&#1576;&#1604;&#1610;&#1577; &#1608;&#1578;&#1608;&#1601;&#1585; &#1576;&#1593;&#1590; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1575;&#1578; &#1604;&#1604;&#1605;&#1591;&#1608;&#1585;&#1610;&#1606;.<br>&#1610;&#1581;&#1587;&#1606; &#1575;&#1604;&#1578;&#1606;&#1576;&#1610;&#1607; &#1573;&#1604;&#1609; &#1571;&#1606; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">do_action</span> &#1610;&#1605;&#1603;&#1606; &#1571;&#1606; &#1578;&#1587;&#1578;&#1583;&#1593;&#1609; &#1576;&#1571;&#1603;&#1579;&#1585; &#1605;&#1606; &#1605;&#1593;&#1575;&#1605;&#1604; &#1576;&#1575;<span style="line-height:20.3636360168457px;">&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre class="php ipsCode prettyprint">do_action( $tag, $arg_a, $arg_b, $etc );</pre><p dir="rtl">&#1608;&#1603;&#1605;&#1575; &#1571;&#1587;&#1604;&#1601;&#1606;&#1575; &#1601;&#1610; &#1578;&#1593;&#1585;&#1610;&#1601; &#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_action</span> &#1578;&#1587;&#1578;&#1591;&#1610;&#1593; &#1578;&#1581;&#1583;&#1610;&#1583; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1578;&#1602;&#1576;&#1604;&#1607;&#1575; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1590;&#1575;&#1601;&#1577; &#1573;&#1604;&#1609; <span style="font-family:'courier new', courier, monospace;">add_action</span>&#1548; &#1608;&#1604;&#1578;&#1581;&#1583;&#1610;&#1583; &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1607;&#1606;&#1575;&#1603; &#1593;&#1604;&#1610;&#1603; &#1571;&#1606; &#1578;&#1585;&#1609; &#1593;&#1583;&#1583; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1575;&#1604;&#1605;&#1608;&#1580;&#1608;&#1583;&#1577; &#1607;&#1606;&#1575; &#1601;&#1610; <span style="font-family:'courier new', courier, monospace;">do_action</span>.</p><h2 dir="rtl">&#1571;&#1605;&#1579;&#1604;&#1577; &#1593;&#1605;&#1604;&#1610;&#1577; &#1604;&#1604;&#1582;&#1591;&#1575;&#1601;&#1575;&#1578; &#1601;&#1610; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;</h2><h3 dir="rtl">&#1575;&#1604;&#1578;&#1593;&#1575;&#1605;&#1604; &#1605;&#1593; &#1605;&#1604;&#1601;&#1575;&#1578; &#1580;&#1575;&#1601;&#1575;&#1587;&#1603;&#1585;&#1576;&#1578;</h3><p dir="rtl">&#1601;&#1610; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1573;&#1584;&#1575; &#1571;&#1585;&#1583;&#1578; &#1571;&#1606; &#1578;&#1590;&#1610;&#1601; &#1605;&#1604;&#1601; &#1580;&#1575;&#1601;&#1575;&#1587;&#1603;&#1585;&#1576;&#1578; &#1604;&#1604;&#1605;&#1608;&#1602;&#1593; &#1601;&#1573;&#1606; &#1571;&#1601;&#1590;&#1604; &#1591;&#1585;&#1610;&#1602;&#1577; -&#1594;&#1575;&#1604;&#1576;&#1611;&#1575;- &#1607;&#1610; &#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">wp_enqueue_scripts</span> &#1608;&#1575;&#1604;&#1584;&#1610; &#1578;&#1587;&#1578;&#1591;&#1610;&#1593; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604;&#1607; &#1573;&#1590;&#1575;&#1601;&#1577; &#1605;&#1604;&#1601;&#1575;&#1578;&#1603; &#1573;&#1604;&#1609; &#1576;&#1602;&#1610;&#1577; &#1605;&#1604;&#1601;&#1575;&#1578; &#1580;&#1575;&#1601;&#1575;&#1587;&#1603;&#1585;&#1576;&#1578; (&#1571;&#1608; CSS) &#1608;&#1578;&#1578;&#1585;&#1603; &#1604;&#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1605;&#1607;&#1605;&#1577; &#1585;&#1576;&#1591;&#1607;&#1575; &#1601;&#1610; &#1578;&#1585;&#1608;&#1610;&#1587;&#1577; &#1575;&#1604;&#1605;&#1608;&#1602;&#1593; &#1608;&#1607;&#1584;&#1575; &#1605;&#1575; &#1578;&#1601;&#1593;&#1604;&#1607; &#1575;&#1604;&#1588;&#1610;&#1601;&#1585;&#1575;&#1578; &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre class="php ipsCode prettyprint">function my_scripts_method() {
   wp_enqueue_script(
   'myscript', // &#1575;&#1587;&#1605; &#1605;&#1604;&#1601; &#1580;&#1575;&#1601;&#1575;&#1587;&#1603;&#1585;&#1576;&#1578;
   plugins_url( '/js/newscript.js' , __FILE__ ) // &#1605;&#1603;&#1575;&#1606; &#1605;&#1604;&#1601; &#1575;&#1604;&#1580;&#1575;&#1601;&#1575;&#1587;&#1603;&#1585;&#1576;&#1578;
);
}
add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
</pre><p dir="rtl">&#1604;&#1575;&#1581;&#1592; &#1571;&#1606;&#1606;&#1575; &#1601;&#1610; &#1575;&#1604;&#1587;&#1591;&#1585; &#1575;&#1604;&#1571;&#1582;&#1610;&#1585; &#1571;&#1590;&#1601;&#1606;&#1575; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">my_scripts_method</span> &#1573;&#1604;&#1609; &#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">wp_enqueue_scripts</span> &#1608;&#1576;&#1575;&#1604;&#1578;&#1575;&#1604;&#1610; &#1587;&#1610;&#1578;&#1605; &#1578;&#1606;&#1601;&#1610;&#1584; &#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1593;&#1606;&#1583;&#1605;&#1575; &#1610;&#1606;&#1575;&#1583;&#1610; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1575;&#1604;&#1573;&#1580;&#1585;&#1575;&#1569; <span style="font-family:'courier new', courier, monospace;">wp_enqueue_scripts</span>&#1548;<br>&#1571;&#1605;&#1575; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1606;&#1601;&#1587;&#1607;&#1575; &#1601;&#1602;&#1583; &#1602;&#1605;&#1606;&#1575; &#1576;&#1583;&#1575;&#1582;&#1604;&#1607;&#1575; &#1576;&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1583;&#1575;&#1604;&#1577; &#1571;&#1582;&#1585;&#1609; &#1608;&#1607;&#1610; <a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; </a><span style="font-family:'courier new', courier, monospace;"><a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">wp_enqueue_script</a></span> &#1608;&#1575;&#1604;&#1578;&#1610; &#1578;&#1578;&#1608;&#1604;&#1609; &#1605;&#1607;&#1605;&#1577; &#1573;&#1590;&#1575;&#1601;&#1577; &#1575;&#1604;&#1587;&#1603;&#1585;&#1576;&#1578; &#1581;&#1610;&#1579; &#1578;&#1571;&#1582;&#1584; &#1575;&#1587;&#1605; &#1575;&#1604;&#1587;&#1603;&#1585;&#1576;&#1578; (&#1575;&#1604;&#1584;&#1610; &#1578;&#1585;&#1610;&#1583;&#1607;) &#1608;&#1605;&#1603;&#1575;&#1606;&#1607; &#1608;&#1578;&#1578;&#1608;&#1604;&#1609; &#1576;&#1602;&#1610;&#1577; &#1575;&#1604;&#1605;&#1607;&#1605;&#1577;.</p><h3 dir="rtl">&#1573;&#1590;&#1575;&#1601;&#1577; &#1602;&#1575;&#1574;&#1605;&#1577; &#1580;&#1575;&#1606;&#1576;&#1610;&#1577; Sidebar &#1580;&#1583;&#1610;&#1583;&#1577;</h3><p dir="rtl">&#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1579;&#1575;&#1604; &#1605;&#1578;&#1593;&#1604;&#1602; &#1571;&#1603;&#1579;&#1585; &#1576;&#1575;&#1604;&#1602;&#1608;&#1575;&#1604;&#1576; &#1604;&#1603;&#1606; &#1604;&#1575; &#1605;&#1575;&#1606;&#1593; &#1605;&#1606; &#1571;&#1606; &#1606;&#1591;&#1604;&#1593; &#1593;&#1604;&#1610;&#1607; &#1604;&#1578;&#1593;&#1585;&#1601; &#1571;&#1606; &#1605;&#1601;&#1607;&#1608;&#1605; &#1575;&#1604;&#1571;&#1581;&#1583;&#1575;&#1579; &#1610;&#1605;&#1578;&#1583; &#1581;&#1578;&#1609; &#1573;&#1604;&#1609; &#1576;&#1585;&#1605;&#1580;&#1577; &#1575;&#1604;&#1602;&#1608;&#1575;&#1604;&#1576;&#1548;<br>&#1608;&#1601;&#1610; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1579;&#1575;&#1604; &#1587;&#1606;&#1602;&#1608;&#1605; &#1576;&#1573;&#1590;&#1575;&#1601;&#1577; &#1602;&#1575;&#1574;&#1605;&#1577; &#1580;&#1575;&#1606;&#1576;&#1610;&#1577; Sidebar &#1580;&#1583;&#1610;&#1583;&#1577; &#1604;&#1604;&#1602;&#1575;&#1604;&#1576; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1588;&#1610;&#1601;&#1585;&#1575;&#1578; &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre dir="rtl" class="php ipsCode prettyprint">function create_my_widget() {
 register_sidebar(array(
 'name' =&gt; __( 'My Sidebar'), 			// &#1575;&#1587;&#1605; &#1575;&#1604;&#1602;&#1575;&#1574;&#1605;&#1577; &#1575;&#1604;&#1580;&#1575;&#1606;&#1576;&#1610;&#1577;  
 'id' =&gt; 'my_sidebar',					// &#1605;&#1593;&#1585;&#1601; &#1575;&#1604;&#1602;&#1575;&#1574;&#1605;&#1577; &#1575;&#1604;&#1580;&#1575;&#1606;&#1576;&#1610;&#1577;
 ));
}
add_action( 'widgets_init', 'create_my_widget' );</pre><p dir="rtl">&#1604;&#1575;&#1581;&#1592; &#1571;&#1606;&#1606;&#1575; &#1601;&#1610; &#1575;&#1604;&#1587;&#1591;&#1585; &#1575;&#1604;&#1571;&#1582;&#1610;&#1585; &#1571;&#1590;&#1601;&#1606;&#1575; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">create_my_widget</span> &#1573;&#1604;&#1609; &#1575;&#1604;&#1581;&#1583;&#1579; <span style="font-family:'courier new', courier, monospace;">widget_init</span> &#1608;&#1575;&#1604;&#1584;&#1610; &#1610;&#1587;&#1578;&#1582;&#1583;&#1605;&#1607; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1604;&#1578;&#1593;&#1585;&#1610;&#1601; &#1580;&#1605;&#1610;&#1593; &#1575;&#1604;&#1602;&#1608;&#1575;&#1574;&#1605; &#1575;&#1604;&#1580;&#1575;&#1606;&#1576;&#1610;&#1577;&#1548; &#1608;&#1583;&#1575;&#1582;&#1604; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1602;&#1605;&#1578;&#1575; &#1576;&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1583;&#1575;&#1604;&#1577; &#1571;&#1582;&#1585;&#1609; &#1608;&#1607;&#1610; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">register_sidebar</span> &#1608;&#1575;&#1604;&#1578;&#1610; &#1578;&#1571;&#1582;&#1584; &#1575;&#1587;&#1605; &#1575;&#1604;&#1602;&#1575;&#1574;&#1605;&#1577; &#1575;&#1604;&#1580;&#1575;&#1606;&#1576;&#1610;&#1577; &#1608;&#1605;&#1593;&#1585;&#1601;&#1607;&#1575; &#1575;&#1604;&#1601;&#1585;&#1610;&#1583; &#1608;&#1578;&#1578;&#1608;&#1604;&#1609; &#1605;&#1607;&#1605;&#1577; &#1578;&#1587;&#1580;&#1610;&#1604;&#1607;&#1575;.</p><h3 dir="rtl">&#1573;&#1606;&#1588;&#1575;&#1569; &#1582;&#1591;&#1575;&#1601; &#1573;&#1580;&#1585;&#1575;&#1569; action hook &#1582;&#1575;&#1589; &#1576;&#1603;</h3><p dir="rtl">&#1604;&#1593;&#1605;&#1604; &#1584;&#1604;&#1603; &#1603;&#1604; &#1605;&#1575; &#1593;&#1604;&#1610;&#1603; &#1607;&#1608; &#1573;&#1590;&#1575;&#1601;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">do_action</span> &#1573;&#1604;&#1609; &#1575;&#1604;&#1605;&#1603;&#1575;&#1606; &#1575;&#1604;&#1584;&#1610; &#1578;&#1608;&#1583; &#1571;&#1606; &#1578;&#1606;&#1601;&#1584; &#1601;&#1610;&#1607; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1576;&#1591; &#1576;&#1607;&#1584;&#1575; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; &#1608;&#1576;&#1575;&#1604;&#1591;&#1576;&#1593; &#1587;&#1578;&#1605;&#1585;&#1585; &#1604;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">do_action</span> &#1575;&#1604;&#1575;&#1587;&#1605; &#1575;&#1604;&#1584;&#1610; &#1578;&#1608;&#1583; &#1571;&#1606; &#1578;&#1587;&#1605;&#1610; &#1576;&#1607; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1548; &#1576;&#1575;<span style="line-height:20.3636360168457px;">&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre class="php ipsCode prettyprint">do_action('my_action_hook');</pre><p dir="rtl">&#1608;&#1576;&#1575;&#1604;&#1591;&#1576;&#1593; &#1610;&#1605;&#1603;&#1606;&#1603; &#1573;&#1590;&#1575;&#1601;&#1577; &#1576;&#1602;&#1610;&#1577; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1584;&#1603;&#1585;&#1606;&#1575;&#1607;&#1575; &#1601;&#1610; &#1578;&#1593;&#1585;&#1610;&#1601; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">do_action</span> &#1603;&#1604;&#1605;&#1575; &#1575;&#1602;&#1578;&#1590;&#1578; &#1575;&#1604;&#1581;&#1575;&#1580;&#1577;.</p><h2 dir="rtl">&#1575;&#1604;&#1605;&#1585;&#1588;&#1581;&#1575;&#1578; &#1601;&#1610; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;</h2><h3 dir="rtl">&#1576;&#1606;&#1601;&#1587; &#1575;&#1604;&#1591;&#1585;&#1610;&#1602;&#1577; &#1575;&#1604;&#1578;&#1610; &#1575;&#1578;&#1576;&#1593;&#1606;&#1575;&#1607;&#1575; &#1601;&#1610; &#1575;&#1604;&#1571;&#1581;&#1583;&#1575;&#1579; &#1571;&#1593;&#1604;&#1575;&#1607; &#1587;&#1606;&#1578;&#1593;&#1585;&#1601; &#1593;&#1604;&#1609; &#1571;&#1607;&#1605; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1582;&#1575;&#1589;&#1577; &#1576;&#1575;&#1604;&#1605;&#1585;&#1588;&#1581;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1610;&#1608;&#1601;&#1585;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;<br><br>&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_filter</span></h3><p dir="rtl">&#1578;&#1587;&#1578;&#1582;&#1583;&#1605; &#1583;&#1575;&#1604;&#1577; <a rel="external nofollow" href="http://codex.wordpress.org/Function_Reference/add_filter">add_filter</a>&nbsp;&#1604;&#1573;&#1590;&#1575;&#1601;&#1577; &#1605;&#1585;&#1588;&#1581; &#1580;&#1583;&#1610;&#1583; &#1604;&#1571;&#1581;&#1583; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585;&#1575;&#1578; &#1608;&#1578;&#1571;&#1582;&#1584; <span style="line-height:20.3636360168457px;">&#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1593;&#1575;&#1605;&#1577;:</p><pre class="php ipsCode prettyprint">add_filter( $tag, $function_to_add, $priority, $accepted_args );</pre><p dir="rtl">&#1604;&#1575;&#1581;&#1592; &#1571;&#1606; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1588;&#1576;&#1610;&#1607;&#1577; &#1580;&#1583;&#1575; &#1576;&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_action</span> &#1608;&#1603;&#1584;&#1604;&#1603; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1607;&#1610; &#1606;&#1601;&#1587;&#1607;&#1575; &#1578;&#1602;&#1585;&#1610;&#1576;&#1575;&#1548; &#1604;&#1603;&#1606; &#1604;&#1575; &#1576;&#1575;&#1587; &#1605;&#1606; &#1573;&#1593;&#1575;&#1583;&#1577; &#1578;&#1593;&#1585;&#1610;&#1601;&#1607;&#1575;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$tag</span></strong>: &#1575;&#1587;&#1605; &#1582;&#1591;&#1575;&#1601; &#1575;&#1604;&#1605;&#1585;&#1588;&#1581; filter hook &#1575;&#1604;&#1584;&#1610; &#1578;&#1608;&#1583; &#1571;&#1606; &#1578;&#1590;&#1610;&#1601; &#1604;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">$function_to_add</span> &#1604;&#1603;&#1610; &#1578;&#1593;&#1583;&#1604; &#1593;&#1604;&#1609; &#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; &#1575;&#1604;&#1584;&#1610; &#1610;&#1605;&#1579;&#1604;&#1607; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$function_to_add</span></strong>: &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1587;&#1578;&#1578;&#1608;&#1604;&#1609; &#1593;&#1605;&#1604;&#1610;&#1577; &#1575;&#1604;&#1578;&#1593;&#1583;&#1610;&#1604; &#1593;&#1604;&#1609; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; &#1575;&#1604;&#1584;&#1610; &#1610;&#1588;&#1610;&#1585; &#1575;&#1604;&#1610;&#1607; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; <span style="font-family:'courier new', courier, monospace;">$tag.</span> &#1608;&#1607;&#1584;&#1607; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1578;&#1602;&#1608;&#1605; &#1576;&#1573;&#1585;&#1580;&#1575;&#1593; &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1580;&#1583;&#1610;&#1583;&#1577; &#1604;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; &#1575;&#1604;&#1584;&#1610; &#1578;&#1587;&#1578;&#1602;&#1576;&#1604;&#1607;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$priority</span> </strong>: &#1571;&#1608;&#1604;&#1608;&#1610;&#1577; &#1575;&#1604;&#1578;&#1606;&#1601;&#1610;&#1584; &#1604;&#1604;&#1583;&#1608;&#1575;&#1604; &#1575;&#1604;&#1605;&#1590;&#1575;&#1601;&#1577; &#1604;&#1606;&#1601;&#1587; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1548; &#1581;&#1610;&#1579; &#1578;&#1581;&#1583;&#1583; &#1602;&#1610;&#1605;&#1577; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; &#1578;&#1585;&#1578;&#1610;&#1576; &#1578;&#1606;&#1601;&#1610;&#1584; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1605;&#1585;&#1578;&#1576;&#1591;&#1577; &#1576;&#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1585;&#1588;&#1581;. &#1608;&#1610;&#1571;&#1582;&#1584; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; <span style="font-family:'courier new', courier, monospace;">$priority</span> &#1602;&#1610;&#1605;&#1577; &#1605;&#1606; &#1575;&#1604;&#1606;&#1608;&#1593; <span style="font-family:'courier new', courier, monospace;">int</span>.</li><li>&#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1604;&#1607;&#1575; <strong><span style="font-family:'courier new', courier, monospace;">$priority</span></strong> &#1571;&#1602;&#1604; &#1578;&#1606;&#1601;&#1584; &#1571;&#1608;&#1604;&#1575;&#1548; &#1608;&#1573;&#1584;&#1575; &#1603;&#1575;&#1606; &#1607;&#1606;&#1575;&#1604;&#1603; &#1571;&#1603;&#1579;&#1585; &#1605;&#1606; &#1583;&#1575;&#1604;&#1577; &#1604;&#1607;&#1575; &#1606;&#1601;&#1587; &#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; <span style="font-family:'courier new', courier, monospace;">$priority</span> &#1581;&#1610;&#1606;&#1574;&#1584; &#1610;&#1578;&#1605; &#1578;&#1606;&#1601;&#1610;&#1584;&#1607;&#1575; &#1593;&#1604;&#1609; &#1581;&#1587;&#1576; &#1578;&#1585;&#1578;&#1610;&#1576; &#1578;&#1593;&#1585;&#1610;&#1601;&#1607;&#1575;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$accepted_args</span></strong>: &#1593;&#1583;&#1583; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; arguments &#1575;&#1604;&#1578;&#1610; &#1578;&#1602;&#1576;&#1604;&#1607;&#1575; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">$function_to_add</span>. &#1581;&#1610;&#1579; &#1610;&#1605;&#1603;&#1606; &#1578;&#1593;&#1585;&#1610;&#1601; &#1571;&#1603;&#1579;&#1585; &#1605;&#1606; &#1605;&#1593;&#1575;&#1605;&#1604; &#1604;&#1604;&#1582;&#1591;&#1575;&#1601; &#1593;&#1606;&#1583; &#1578;&#1606;&#1601;&#1610;&#1584;&#1607; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; <span style="font-family:'courier new', courier, monospace;">apply_filters</span> &#1603;&#1605;&#1575; &#1587;&#1606;&#1585;&#1609; &#1601;&#1610; &#1575;&#1604;&#1601;&#1602;&#1585;&#1575;&#1578; &#1575;&#1604;&#1602;&#1575;&#1583;&#1605;&#1577;. &#1608;&#1593;&#1583;&#1583; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1593;&#1575;&#1583;&#1577; &#1610;&#1578;&#1605; &#1578;&#1581;&#1583;&#1610;&#1583; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; &#1606;&#1601;&#1587;&#1607;.</li></ul><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; remove_filter</h3><p dir="rtl">&#1603;&#1605;&#1575; &#1610;&#1592;&#1607;&#1585; &#1605;&#1606; &#1575;&#1587;&#1605;&#1607;&#1575; &#1601;&#1573;&#1606;&nbsp;<a rel="external nofollow" style="line-height:20.3636360168457px;" href="http://codex.wordpress.org/Function_Reference/remove_filter">remove_filter</a>&nbsp;&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1593;&#1603;&#1587;&#1610;&#1577; &#1604;&#1600;<span style="font-family:'courier new', courier, monospace;">add_filter</span> &#1608;&#1578;&#1571;&#1582;&#1584; <span style="line-height:20.3636360168457px;">&#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre class="php ipsCode prettyprint">remove_filter( $tag, $function_to_remove, $priority );</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$tag</span></strong>: &#1575;&#1587;&#1605; &#1582;&#1591;&#1575;&#1601; &#1575;&#1604;&#1605;&#1585;&#1588;&#1581; &#1575;&#1604;&#1584;&#1610; &#1578;&#1608;&#1583; &#1573;&#1586;&#1575;&#1604;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1593;&#1606;&#1607;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$function_to_remove</span></strong>: &#1575;&#1587;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1608;&#1583; &#1573;&#1586;&#1575;&#1604;&#1578;&#1607;&#1575;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$priority</span></strong> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1571;&#1608;&#1604;&#1608;&#1610;&#1577; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1608;&#1583; &#1573;&#1586;&#1575;&#1604;&#1578;&#1607;&#1575; &#1603;&#1605;&#1575; &#1578;&#1605; &#1578;&#1593;&#1585;&#1610;&#1601;&#1607;&#1575; &#1576;&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; <span style="font-family:'courier new', courier, monospace;">add_filter</span></li></ul><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; has_filter</h3><p dir="rtl">&#1578;&#1602;&#1608;&#1605; &#1575;&#1604;&#1583;&#1617;&#1575;&#1604;&#1577; <a rel="external nofollow" style="line-height:20.3636360168457px;" href="http://codex.wordpress.org/Function_Reference/has_filter">has_filter</a>&nbsp;&#1576;&#1575;&#1582;&#1578;&#1576;&#1575;&#1585; &#1605;&#1575; &#1573;&#1584;&#1575; &#1603;&#1575;&#1606; &#1607;&#1606;&#1575;&#1604;&#1603; &#1583;&#1575;&#1604;&#1577; &#1578;&#1605; &#1573;&#1590;&#1575;&#1601;&#1578;&#1607;&#1575; &#1604;&#1582;&#1591;&#1575;&#1601; &#1605;&#1593;&#1610;&#1606;&#1548; &#1608;&#1578;&#1571;&#1582;&#1584; <span style="line-height:20.3636360168457px;">&#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre class="php ipsCode prettyprint">has_filter( $tag, $function_to_check ); </pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><strong><span style="font-family:'courier new', courier, monospace;">$tag</span></strong>: &#1575;&#1587;&#1605; &#1582;&#1591;&#1575;&#1601; &#1575;&#1604;&#1605;&#1585;&#1588;&#1581;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$function_to_check</span></strong>: &#1575;&#1587;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1610;&#1583; &#1575;&#1604;&#1578;&#1571;&#1603;&#1583; &#1605;&#1606; &#1608;&#1580;&#1608;&#1583;&#1607;&#1575;</li></ul><h3 dir="rtl">&#1575;&#1604;&#1583;&#1575;&#1604;&#1577; apply_filters</h3><p dir="rtl">&#1578;&#1602;&#1608;&#1605; &#1583;&#1575;&#1604;&#1577; <a rel="external nofollow" style="line-height:20.3636360168457px;" href="http://codex.wordpress.org/Function_Reference/apply_filters">apply_filters</a>&nbsp;&nbsp;&#1576;&#1578;&#1606;&#1601;&#1610;&#1584; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1605;&#1585;&#1578;&#1576;&#1591;&#1577; &#1576;&#1575;&#1604;&#1582;&#1591;&#1575;&#1601; &#1575;&#1604;&#1584;&#1610; &#1610;&#1605;&#1585;&#1585; &#1604;&#1607;&#1575; &#1603;&#1605;&#1593;&#1575;&#1605;&#1604; &#1608;&#1578;&#1571;&#1582;&#1584; <span style="line-height:20.3636360168457px;">&#1575;&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1593;&#1575;&#1605;&#1577;</p><pre class="php ipsCode prettyprint">apply_filters( $tag, $value, $var ... ); 
</pre><p dir="rtl">&#1581;&#1610;&#1579;:</p><ul dir="rtl"><li><span style="font-family:'courier new', courier, monospace;"><strong>$tag</strong> </span>: &#1575;&#1587;&#1605; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; &#1575;&#1604;&#1605;&#1585;&#1575;&#1583; &#1578;&#1606;&#1601;&#1610;&#1584; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1578;&#1605; &#1573;&#1590;&#1575;&#1601;&#1578;&#1607;&#1575; &#1604;&#1607; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; <span style="font-family:'courier new', courier, monospace;">add_filter</span></li><li><strong><span style="font-family:'courier new', courier, monospace;">$value</span></strong> : &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1571;&#1589;&#1604;&#1610;&#1577; &#1604;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; &#1608;&#1575;&#1604;&#1578;&#1610; &#1610;&#1578;&#1605; &#1578;&#1594;&#1610;&#1585;&#1607;&#1575; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1605;&#1585;&#1576;&#1608;&#1591;&#1577; &#1576;&#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1548; &#1571;&#1610; &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1588;&#1581; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604;.</li><li><strong><span style="font-family:'courier new', courier, monospace;">$var</span></strong> (&#1575;&#1582;&#1578;&#1610;&#1575;&#1585;&#1610;): &#1605;&#1578;&#1594;&#1610;&#1585; &#1573;&#1590;&#1575;&#1601;&#1610; &#1571;&#1608; &#1571;&#1603;&#1579;&#1585; &#1610;&#1578;&#1605; &#1578;&#1605;&#1585;&#1610;&#1585;&#1607;&#1575; &#1573;&#1604;&#1609; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1605;&#1585;&#1578;&#1576;&#1591;&#1577; &#1576;&#1575;&#1604;&#1582;&#1591;&#1575;&#1601; <span style="font-family:'courier new', courier, monospace;">$tag</span> &#1608;&#1603;&#1606;&#1575; &#1602;&#1583; &#1584;&#1603;&#1585;&#1606;&#1575; &#1571;&#1606;&#1607; &#1576;&#1575;&#1604;&#1573;&#1605;&#1603;&#1575;&#1606; &#1578;&#1581;&#1583;&#1610;&#1583; &#1593;&#1583;&#1583; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1578;&#1587;&#1578;&#1602;&#1576;&#1604;&#1607;&#1575; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1585;&#1576;&#1608;&#1591;&#1577; &#1576;&#1575;&#1604;&#1582;&#1591;&#1575;&#1601; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604; <span style="font-family:'courier new', courier, monospace;">$accepted_args</span> &#1604;&#1604;&#1583;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">add_filter</span> &#1581;&#1610;&#1579; &#1578;&#1602;&#1608;&#1605; &#1576;&#1593;&#1583; &#1575;&#1604;&#1605;&#1593;&#1575;&#1605;&#1604;&#1575;&#1578; &#1607;&#1606;&#1575; &#1608;&#1578;&#1581;&#1583;&#1610;&#1583; &#1593;&#1583;&#1583;&#1607;&#1575; &#1593;&#1606;&#1583; &#1573;&#1590;&#1575;&#1601;&#1577; &#1571;&#1610; &#1583;&#1575;&#1604;&#1577; &#1604;&#1607;&#1584;&#1575; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;.</li></ul><h2 dir="rtl">&#1571;&#1605;&#1579;&#1604;&#1577; &#1604;&#1604;&#1605;&#1585;&#1588;&#1581;&#1575;&#1578; &#1601;&#1610; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;</h2><h3 dir="rtl">&#1578;&#1593;&#1583;&#1610;&#1604; &#1593;&#1583;&#1583; &#1603;&#1604;&#1605;&#1575;&#1578; &#1575;&#1604;&#1605;&#1602;&#1578;&#1591;&#1601;</h3><p dir="rtl">&#1601;&#1610; &#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1579;&#1575;&#1604; &#1587;&#1606;&#1587;&#1578;&#1582;&#1583;&#1605; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; <span style="font-family:'courier new', courier, monospace;">excerpt_length</span> &#1575;&#1604;&#1584;&#1610; &#1610;&#1608;&#1601;&#1585;&#1607; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1604;&#1604;&#1578;&#1593;&#1583;&#1610;&#1604; &#1593;&#1604;&#1609; &#1602;&#1610;&#1605;&#1577; &#1591;&#1608;&#1604; &#1606;&#1589; &#1575;&#1604;&#1605;&#1602;&#1578;&#1591;&#1601;</p><pre class="html ipsCode prettyprint">function excerpt_length_example( $words ) {
 return 15;
}
add_filter( 'excerpt_length', 'excerpt_length_example' );</pre><p>&#1602;&#1605;&#1606;&#1575; &#1576;&#1573;&#1606;&#1588;&#1575;&#1569; &#1583;&#1575;&#1604;&#1577; &#1578;&#1585;&#1580;&#1593; &#1575;&#1604;&#1602;&#1610;&#1605;&#1577; &#1575;&#1604;&#1580;&#1583;&#1610;&#1583;&#1577; &#1604;&#1591;&#1608;&#1604; &#1575;&#1604;&#1605;&#1602;&#1578;&#1591;&#1601; (15)&#1548; &#1579;&#1605; &#1576;&#1593;&#1583; &#1584;&#1604;&#1603; &#1571;&#1590;&#1601;&#1606;&#1575;&#1607;&#1575; &#1573;&#1604;&#1609; &#1575;&#1604;&#1605;&#1585;&#1588;&#1581;<span style="font-family:'courier new', courier, monospace;">&nbsp;excerpt_length</span> &#1576;&#1575;&#1587;&#1578;&#1582;&#1583;&#1575;&#1605; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577;<span style="font-family:'courier new', courier, monospace;"> add_filter</span></p><h3 dir="rtl">&#1573;&#1606;&#1588;&#1575;&#1569; &#1582;&#1591;&#1575;&#1601; &#1605;&#1585;&#1588;&#1581; filter hook &#1604;&#1571;&#1581;&#1583; &#1605;&#1578;&#1594;&#1610;&#1585;&#1575;&#1578;&#1603;</h3><p dir="rtl">&#1601;&#1604;&#1606;&#1601;&#1585;&#1590; &#1571;&#1606;&#1603; &#1578;&#1585;&#1610;&#1583; &#1571;&#1606; &#1578;&#1578;&#1610;&#1581; &#1604;&#1604;&#1605;&#1591;&#1608;&#1585;&#1610;&#1606; &#1573;&#1605;&#1603;&#1575;&#1606;&#1610;&#1577; &#1575;&#1604;&#1578;&#1593;&#1583;&#1610;&#1604; &#1593;&#1604;&#1609; &#1606;&#1589; &#1605;&#1593;&#1610;&#1606; &#1602;&#1576;&#1604; &#1593;&#1585;&#1590;&#1607;&#1548; &#1610;&#1605;&#1603;&#1606; &#1571;&#1606; &#1578;&#1608;&#1601;&#1585; &#1604;&#1607;&#1605; &#1582;&#1591;&#1575;&#1601; &#1605;&#1585;&#1588;&#1581; &#1604;&#1610;&#1590;&#1610;&#1601;&#1608;&#1575; &#1604;&#1607; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1578;&#1610; &#1610;&#1608;&#1583;&#1608;&#1606; &#1571;&#1606; &#1578;&#1602;&#1608;&#1605; &#1576;&#1593;&#1605;&#1610;&#1604;&#1577; &#1575;&#1604;&#1578;&#1593;&#1583;&#1610;&#1604; &#1593;&#1604;&#1609; &#1575;&#1604;&#1606;&#1589;&#1548; &#1608;&#1584;&#1604;&#1603; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1578;&#1593;&#1585;&#1610;&#1601; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; &#1576;&#1575;<span style="line-height:20.3636360168457px;">&#1604;&#1589;&#1617;&#1610;&#1594;&#1577;</span> &#1575;&#1604;&#1578;&#1575;&#1604;&#1610;&#1577;</p><pre class="php ipsCode prettyprint">$text = apply_filters("my_text", $text);</pre><p dir="rtl">&#1576;&#1607;&#1584;&#1607; &#1575;&#1604;&#1589;&#1608;&#1585;&#1577; &#1601;&#1573;&#1606;&#1607; &#1587;&#1610;&#1602;&#1608;&#1605; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1576;&#1578;&#1591;&#1576;&#1610;&#1602; &#1580;&#1605;&#1610;&#1593; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1605;&#1590;&#1575;&#1601;&#1577; &#1604;&#1604;&#1582;&#1591;&#1575;&#1601; my_text &#1593;&#1604;&#1609; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; $text &#1601;&#1610; &#1575;&#1604;&#1580;&#1575;&#1606;&#1576; &#1575;&#1604;&#1571;&#1610;&#1605;&#1606; &#1605;&#1606; &#1575;&#1604;&#1605;&#1593;&#1575;&#1583;&#1604;&#1577; &#1602;&#1576;&#1604; &#1573;&#1587;&#1606;&#1575;&#1583;&#1607; &#1604;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585; &#1601;&#1610; &#1575;&#1604;&#1580;&#1575;&#1606;&#1576; &#1575;&#1604;&#1571;&#1610;&#1587;&#1585;&#1548; &#1608;&#1607;&#1584;&#1575; &#1607;&#1608; &#1575;&#1604;&#1605;&#1591;&#1604;&#1608;&#1576;.</p><h2 dir="rtl">&#1571;&#1587;&#1605;&#1575;&#1569; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1575;&#1578; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585;&#1577; Variable Hook Names</h2><p dir="rtl">&#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1575;&#1578; &#1575;&#1604;&#1578;&#1610; &#1575;&#1591;&#1604;&#1593;&#1606;&#1575; &#1593;&#1604;&#1610;&#1607;&#1575; &#1571;&#1593;&#1604;&#1575;&#1607; &#1604;&#1610;&#1587;&#1578; &#1603;&#1604; &#1605;&#1575; &#1610;&#1608;&#1601;&#1585;&#1607; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1576;&#1604; &#1607;&#1606;&#1575;&#1604;&#1603; &#1575;&#1604;&#1605;&#1586;&#1610;&#1583; &#1605;&#1606; &#1575;&#1604;&#1605;&#1585;&#1608;&#1606;&#1577; &#1575;&#1604;&#1605;&#1578;&#1575;&#1581;&#1577; &#1605;&#1606; &#1582;&#1604;&#1575;&#1604; &#1571;&#1587;&#1605;&#1575;&#1569; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1575;&#1578; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585;&#1577; &#1601;&#1605;&#1579;&#1604;&#1575; &#1604;&#1606;&#1604;&#1602;&#1609; &#1606;&#1592;&#1585;&#1577; &#1593;&#1604;&#1609; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; <span style="font-family:'courier new', courier, monospace;">publish_post</span> &#1608;&#1607;&#1608; &#1593;&#1576;&#1575;&#1585;&#1577; &#1593;&#1606; &#1582;&#1591;&#1575;&#1601; &#1581;&#1583;&#1579; action hook &#1610;&#1608;&#1601;&#1585;&#1607; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1608;&#1610;&#1578;&#1605; &#1578;&#1606;&#1601;&#1610;&#1584; &#1575;&#1604;&#1583;&#1617;&#1608;&#1575;&#1604; &#1575;&#1604;&#1605;&#1585;&#1578;&#1576;&#1591;&#1577; &#1576;&#1607; &#1603;&#1604;&#1605;&#1575; &#1578;&#1605; &#1606;&#1588;&#1585; publish &#1605;&#1602;&#1575;&#1604; post &#1608;&#1607;&#1584;&#1575; &#1601;&#1610; &#1575;&#1604;&#1581;&#1602;&#1610;&#1602;&#1577; &#1582;&#1591;&#1575;&#1601; &#1580;&#1605;&#1610;&#1604; &#1580;&#1583;&#1575; &#1610;&#1605;&#1603;&#1606;&#1603; &#1605;&#1606; &#1578;&#1606;&#1601;&#1610;&#1584; &#1571;&#1610; &#1583;&#1575;&#1604;&#1577; &#1578;&#1585;&#1610;&#1583;&#1607;&#1575; &#1593;&#1606;&#1583;&#1605;&#1575; &#1610;&#1578;&#1605; &#1606;&#1588;&#1585; &#1571;&#1610; &#1605;&#1602;&#1575;&#1604; &#1604;&#1603;&#1606; &#1605;&#1575;&#1584;&#1575; &#1573;&#1606; &#1571;&#1585;&#1583;&#1578; &#1578;&#1606;&#1601;&#1610;&#1584; &#1583;&#1575;&#1604;&#1577; &#1605;&#1593;&#1610;&#1606;&#1577; &#1593;&#1606;&#1583; &#1606;&#1588;&#1585; &#1606;&#1608;&#1593; &#1605;&#1602;&#1575;&#1604;&#1575;&#1578; &#1605;&#1582;&#1589;&#1589; &#1608;&#1604;&#1578;&#1603;&#1606; &#1605;&#1579;&#1604;&#1575; &#1605;&#1606;&#1578;&#1580;&#1575;&#1578;&#1548; &#1571;&#1610; &#1606;&#1585;&#1610;&#1583; &#1578;&#1606;&#1601;&#1610;&#1584; &#1575;&#1604;&#1583;&#1575;&#1604;&#1577; my_function &#1593;&#1606;&#1583;&#1605;&#1575; &#1610;&#1578;&#1605; &#1606;&#1588;&#1585; publish &#1605;&#1606;&#1578;&#1580; product&#1548; &#1607;&#1584;&#1575; &#1575;&#1604;&#1571;&#1605;&#1585; &#1575;&#1606;&#1578;&#1576;&#1607; &#1604;&#1607; &#1575;&#1604;&#1605;&#1591;&#1608;&#1585;&#1608;&#1606; &#1608;&#1604;&#1584;&#1604;&#1603; &#1602;&#1575;&#1605;&#1608;&#1575; &#1576;&#1573;&#1590;&#1575;&#1601;&#1577; &#1607;&#1584;&#1575; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; &#1584;&#1608; &#1575;&#1604;&#1575;&#1587;&#1605; &#1575;&#1604;&#1593;&#1575;&#1605;</p><pre class="php ipsCode prettyprint">{$new_status}_{$post-&gt;post_type}</pre><p dir="rtl"><br>&#1608;&#1603;&#1605;&#1575; &#1578;&#1585;&#1609; &#1601;&#1573;&#1606;&#1607; &#1610;&#1608;&#1601;&#1585; &#1605;&#1585;&#1608;&#1606;&#1577; &#1593;&#1575;&#1604;&#1610;&#1577; &#1580;&#1583;&#1575; &#1581;&#1610;&#1579; &#1610;&#1605;&#1603;&#1606;&#1603; &#1575;&#1582;&#1578;&#1610;&#1575;&#1585; &#1575;&#1604;&#1581;&#1575;&#1604;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1610;&#1583; &#1575;&#1604;&#1578;&#1606;&#1601;&#1610;&#1584; &#1593;&#1606;&#1607;&#1575; &#1608;&#1571;&#1589;&#1576;&#1581; &#1575;&#1604;&#1571;&#1605;&#1585; &#1604;&#1610;&#1587; &#1605;&#1602;&#1578;&#1589;&#1585;&#1575; &#1593;&#1604;&#1609; &#1575;&#1604;&#1606;&#1588;&#1585; &#1601;&#1602;&#1591; publish &#1576;&#1604; &#1610;&#1605;&#1603;&#1606;&#1603; &#1605;&#1579;&#1604; &#1578;&#1606;&#1601;&#1610;&#1584; &#1588;&#1574; &#1605;&#1593;&#1610;&#1606; &#1593;&#1606;&#1583; &#1581;&#1584;&#1601; delete &#1605;&#1602;&#1575;&#1604; &#1571;&#1608; &#1593;&#1605;&#1608;&#1605;&#1575; &#1578;&#1594;&#1610;&#1585; &#1581;&#1575;&#1604;&#1577; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604; &#1573;&#1604;&#1609; &#1571;&#1610; &#1581;&#1575;&#1604;&#1577; <span style="font-family:'courier new', courier, monospace;">{$new_status}.</span> &#1603;&#1605;&#1575; &#1571;&#1606; &#1575;&#1604;&#1571;&#1605;&#1585; &#1604;&#1605; &#1610;&#1593;&#1583; &#1605;&#1602;&#1578;&#1589;&#1585;&#1575; &#1593;&#1604;&#1609; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604;&#1575;&#1578; &#1601;&#1602;&#1591; &#1576;&#1604; &#1610;&#1605;&#1603;&#1606;&#1603; &#1578;&#1581;&#1583;&#1610;&#1583; &#1606;&#1608;&#1593; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604; <span style="font-family:'courier new', courier, monospace;">{$post-&gt;post_type}</span> &#1608;&#1607;&#1603;&#1584;&#1575; &#1575;&#1589;&#1576;&#1581; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601; <span style="font-family:'courier new', courier, monospace;">publish_post </span>&#1581;&#1575;&#1604;&#1577; &#1582;&#1575;&#1589;&#1577; &#1605;&#1606; &#1582;&#1591;&#1575;&#1601; &#1571;&#1593;&#1605; &#1604;&#1607; &#1575;&#1604;&#1575;&#1587;&#1605; &#1575;&#1604;&#1593;&#1575;&#1605; <span style="font-family:'courier new', courier, monospace;">{$new_status}_{$post-&gt;post_type}</span>.<br>&#1607;&#1584;&#1575; &#1605;&#1579;&#1575;&#1604; &#1608;&#1575;&#1581;&#1583; &#1601;&#1602;&#1591; &#1604;&#1571;&#1587;&#1605;&#1575;&#1569; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1575;&#1578; &#1575;&#1604;&#1605;&#1578;&#1594;&#1610;&#1585;&#1577; &#1608;&#1607;&#1606;&#1575;&#1604;&#1603; &#1582;&#1591;&#1575;&#1601;&#1575;&#1578; &#1605;&#1578;&#1594;&#1610;&#1585;&#1577; &#1594;&#1610;&#1585;&#1607; &#1610;&#1608;&#1601;&#1585;&#1607;&#1575; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1604;&#1573;&#1578;&#1575;&#1581;&#1577; &#1575;&#1604;&#1605;&#1586;&#1610;&#1583; &#1605;&#1606; &#1575;&#1604;&#1605;&#1585;&#1608;&#1606;&#1577; &#1604;&#1604;&#1605;&#1591;&#1608;&#1585;&#1610;&#1606;.</p><h2 dir="rtl">&#1582;&#1575;&#1578;&#1605;&#1577;</h2><p dir="rtl">&#1585;&#1594;&#1605; &#1571;&#1606;&#1606;&#1575; &#1571;&#1585;&#1583;&#1606;&#1575; &#1571;&#1606; &#1606;&#1604;&#1602;&#1610; &#1606;&#1592;&#1585;&#1577; &#1588;&#1575;&#1605;&#1604;&#1577; &#1593;&#1604;&#1609; &#1575;&#1604;&#1582;&#1591;&#1575;&#1601;&#1575;&#1578; &#1604;&#1603;&#1606; &#1605;&#1575; &#1586;&#1575;&#1604; &#1607;&#1606;&#1575;&#1604;&#1603; &#1575;&#1604;&#1605;&#1586;&#1610;&#1583; &#1604;&#1575;&#1603;&#1578;&#1588;&#1575;&#1601;&#1607; &#1604;&#1603;&#1606; &#1605;&#1575; &#1578;&#1606;&#1575;&#1608;&#1604;&#1606;&#1575;&#1607; &#1610;&#1593;&#1578;&#1576;&#1585; &#1605;&#1594;&#1591;&#1610;&#1575; &#1576;&#1589;&#1608;&#1585;&#1577; &#1603;&#1576;&#1610;&#1585;&#1577; &#1604;&#1571;&#1607;&#1605; &#1575;&#1604;&#1571;&#1588;&#1610;&#1575;&#1569; &#1575;&#1604;&#1578;&#1610; &#1578;&#1581;&#1578;&#1575;&#1580; &#1573;&#1604;&#1610;&#1607;&#1575; &#1593;&#1606;&#1583; &#1576;&#1583;&#1575;&#1610;&#1577; &#1605;&#1588;&#1608;&#1575;&#1585;&#1603; &#1605;&#1593; &#1578;&#1591;&#1608;&#1610;&#1585; &#1573;&#1590;&#1575;&#1601;&#1575;&#1578; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587; &#1608;&#1587;&#1606;&#1578;&#1585;&#1603;&#1603; &#1604;&#1578;&#1603;&#1578;&#1588;&#1601; &#1575;&#1604;&#1605;&#1586;&#1610;&#1583; &#1576;&#1606;&#1601;&#1587;&#1603; &#1593;&#1606;&#1583; &#1575;&#1604;&#1578;&#1593;&#1605;&#1602; &#1601;&#1610; &#1593;&#1575;&#1604;&#1605; &#1608;&#1608;&#1585;&#1583;&#1576;&#1585;&#1610;&#1587;.</p>
]]></description><guid isPermaLink="false">40</guid><pubDate>Thu, 12 Mar 2015 12:58:00 +0000</pubDate></item><item><title>&#x645;&#x64F;&#x642;&#x62F;&#x651;&#x645;&#x629; &#x625;&#x644;&#x649; &#x628;&#x631;&#x645;&#x62C;&#x629; &#x625;&#x636;&#x627;&#x641;&#x627;&#x62A; Wordpress</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%85%D9%8F%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-wordpress-r38/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/wp-plugins.png.78a1023128f0926a9776bb3cb8cb1a06.png" /></p>

<h2 dir="rtl">
	مقدمة
</h2>

<p dir="rtl">
	من أهم أسباب انتشار ووردبريس وسيطرته على سوق أنظمة إدارة المحتوى هو الكم الهائل من إضافاته المجانية والمدفوعة والتي تقدم العديد من <strong>الخصائص والمميزات والتحسينات</strong> الإضافية التي لا تتوفر بصورة افتراضية في قلب ووردبريس WordPress Core.<br>
	في هذا المقال سنتعرف سوّيًا على أساسيات <strong>إنشاء إضافة لووردبريس</strong> لكن قبل الدخول في لب الموضوع دعنا نجب على سؤال مُهمّ وكذلك تعريف إضافات ووردبريس.
</p>

<h2 dir="rtl">
	لماذا ننشئ إضافات ووردبريس
</h2>

<p dir="rtl">
	هنالك قاعدة مهمة في تطوير ووردبريس، وهي: <strong>إياك أن تلمس الشيفرات Codes الأساسية لووردبريس</strong> أي لا تُعدّل على قلب ووردبريس WordPress Core وذلك لأنه عند التحديث سيتمّ استبدال بعض أو كل ملفات ووردبريس الأساسية، وبالتّالي ستفقد التعديلات التي قمت بها، ولهذا السبب نلجأ إلى تطوير إضافات عند الحاجة لإضافة التحسينات والخصائص الجديدة على النّظام.
</p>

<h2 dir="rtl">
	تعريف إضافات ووردبريس
</h2>

<p dir="rtl">
	إضافة ووردبريس عبارة عن دالة أو مجموعة دوال (حزمة شيفرات code package) مكتوبة بلغة php تقوم بإضافة بعض الخصائص لنظام إدارة المُحتوى. وتندمج شيفرات الإضافة معه من خلال واجهة برمجية <abbr title="واجهة برمجية | Application Programming Interface"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> يوفرها له.<br>
	بالإضافة لملفات php يمكن أن تحتوي الإضافة على ملفات أخرى مثل ملفات JavaScript, CSS وبعض الصور.
</p>

<h2 dir="rtl">
	إنشاء إضافة ووردبريس
</h2>

<p dir="rtl">
	هذه بعض الخطوات المهمة عند إنشاء أي إضافة ووردبريس وبعض الأمور التي يجب مراعاتها.
</p>

<h3 dir="rtl">
	اختيار اسم الإضافة
</h3>

<p dir="rtl">
	في البدء عليك أن تقوم باختيار اسم فريد للإضافة التي تود إنشائها بحيث لا يكون الاسم مستخدما من قبل من إحدى إضافات ووردبريس حتى لا يحدث تعارض بين الإضافات مستقبلا.
</p>

<h3 dir="rtl">
	إنشاء مجلد الإضافة
</h3>

<p dir="rtl">
	بعد اختيار اسم الإضافة تقوم بإنشاء مجلد لها بالاسم الذي اخترناه ويكون هذا المجلد داخل مجلد  <span style="font-family:'courier new', courier, monospace;">plugins</span> الخاص بالإضافات والموجود داخل مجلد <span style="font-family:'courier new', courier, monospace;">wp-content</span> كما موضح بالصّورة.<br>
	يمكنك إنشاء ملف php بنفس الاسم بدلًا عن إنشاء مُجلّد كامل لكن يُفضّل أن تنشئ مُجلّدًا خاصًّا حتى يستوعب بقية ملفات الإضافة، ما لم تكن الإضافة تحتوي على ملف php واحد فقط.
</p>

<p dir="rtl" style="text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_03/plugin-folder.png.282e9092c4742192e96bd616140e3fd7.png" rel="" data-fileid="610"><img alt="plugin-folder.thumb.png.00ecfbab5aac676c" class="ipsImage ipsImage_thumbnailed" data-fileid="610" src="https://academy.hsoub.com/uploads/monthly_2015_03/plugin-folder.thumb.png.00ecfbab5aac676c7c7dd5813ca47bc7.png"></a>
</p>

<h3 dir="rtl">
	إنشاء الملف الأساسي للإضافة
</h3>

<p dir="rtl">
	بعد إنشائك للمُجلّد في الخطوة أعلاه عليك أن تقوم بإنشاء ملف php له نفس اسم المجلد السابق، وهذا الملف هو الملف الأساسي للإضافة والذي سيستخدمه ووردبريس للتّعرف على بعض الأمور المُتعلّقة بالإضافة مثل اسمها واسم المُبرمج ورخصة الإضافة وغيرها، وهذا يتم من خلال استخدام ترويسة للملف الأساسي للإضافة وهذه هي الصّيغة العامة لها:
</p>

<pre class="php ipsCode prettyprint prettyprinted" style="">
<span class="pln">    </span><span class="pun">&lt;?</span><span class="pln">php
    </span><span class="com">/**
     * Plugin Name: هنا تكتب اسم الإضافة والذي يجب أن يكون فريدًا
     * Plugin URI: هنا تكتب رابط موقع الإضافة
     * Description: هنا نبذة مختصرة عن الإضافة
     * Version: رقم نسخة الإضافة، مثلا 1.0.0
     * Author: اسم مطور الإضافة
     * Author URI: رابط موقع مطور الإضافة
     * License: اسم رخصة الإضافة
     */</span></pre>

<p dir="rtl">
	السّطر الإجباري هو سطر اسم الإضافة فقط، ويتمّ استخدام بقية السطور (في حال ورودها) في إنشاء معلومات الإضافة التي تظهر في لوحة تحكم الإضافات عند استعراض الإضافة.
</p>

<h2 dir="rtl">
	برمجة الإضافة
</h2>

<p dir="rtl">
	قبل أن تبدأ في برمجة الإضافة تحتاج لمعرفة بعض الأمور العامة في برمجة ووردبريس بالإضافة لبعض التسهيلات التي يقدمها ووردبريس للمبرمجين مثل الواجهات البرمجية الجاهزة WordPress <abbr title="واجهة برمجية | Application Programming Interface"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>'s.
</p>

<h2 dir="rtl">
	الخطافات في ووردبريس WordPress Hooks ( الدخول الى عمق ووردبريس)
</h2>

<p dir="rtl">
	من أهم المفاهيم في ووردبريس مفهوم الخطافات hooks والتي تنقسم إلى قسمين: الأحداث actions والمُرشّحات filters.
</p>

<h3 dir="rtl">
	1- الإجراءات في ووردبريس WordPress Actions
</h3>

<p dir="rtl">
	فلنفترض أنه لدينا دالة معينة نريد أن يتم تنفيذها في لحظة معينة أثناء دورة حياة ووردبريس أو عند حدوث حدث معين، كيف يمكننا إنجاز هذا الأمر؟<br>
	أحد الخيارات أن نقوم بمناداة هذه الدالة بالطريقة العادية في المكان الذي نريدها أن تُنفّذ فيه، لكن هذا الأمر يتطلّب التّعديل على ملفات ووردبريس الأساسية. لك القاعدة التي ذكرناها مسبقا: <strong>إياك أن تلمس الشيفرات الأساسية لووردبريس</strong> تمنعنا من القيام بذلك.<br>
	الحل الآخر هو أن نستخدم  الإجراءات actions وهي عبارة عن آليّة رائعة يوفرها ووردبريس <strong>تمكّنك من إضافة الدّوال الخاصّة بك لتُنفّذ في وقت معين أثناء تنفيذ الشيفرات الخاصة بووردبريس</strong><br>
	إذًا، يمكننا أن نعرف  الإجراءات بأنها <strong>طريقة تمكننا من إخبار ووردبريس بتنفيذ دالة معينة عند حصول حدث معين</strong><br>
	وبهذه الطريقة نستطيع الدخول إلى عمق ووردبريس من دون التعديل المباشر على ملفاته الأساسية Core files.
</p>

<p dir="rtl">
	يتم هذا كله من خلال ربط الدّوال التي تريدها مع الأحداث الجاهزة التي يوفرها ووردبريس والتي يقوم بتنفيذها أثناء دورة حياته وهذا ما يجعلك قادرا على تنفيذ الدّوال الخاصة بك في أي مكان تريده تقريبا. 
</p>

<p dir="rtl">
	إذا كنّا نريد مثلا تنفيذ الدّالة  <span style="font-family:'courier new', courier, monospace;">my_function</span> عندما ينفذ ووردبريس الحدث  <span style="font-family:'courier new', courier, monospace;">my_action</span>   علينا ببساطة أن نخبره بذلك من خلال إضافة هذه الدالة إلى هذا الحدث. ويتم ذلك من خلال الدالة <span style="font-family:'courier new', courier, monospace;">add_actions</span> بالطريقة التالية
</p>

<pre class="php ipsCode prettyprint prettyprinted" style="">
<span class="pln">       add_action</span><span class="pun">(</span><span class="str">'my_action'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'my_function'</span><span class="pun">);</span></pre>

<h4 dir="rtl">
	1-1مثال للإجراءات في ووردبريس
</h4>

<p dir="rtl">
	فلنأخذ هذا المثال الذي يقوم بإرسال بريد إلى مدير الموقع (الدالة المراد تنفيذها) كلما نشر مقالًا جديدًا (الحدث الذي تنفذ عنده الدالة)
</p>

<pre class="php ipsCode prettyprint prettyprinted" style="">
<span class="pln">           add_action</span><span class="pun">(</span><span class="str">'publish_post'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'email_admin'</span><span class="pun">);</span><span class="pln">
        </span><span class="kwd">function</span><span class="pln"> email_admin</span><span class="pun">(){</span><span class="pln">
                </span><span class="com">// هنا يتم إرسال البريد الإلكتروني إلى مدير الموقع</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">       </span></pre>

<h3 dir="rtl">
	2-المرشحات في ووردبريس WordPress Filters
</h3>

<p dir="rtl">
	المُرشّحات هي النوع الثاني من الخطّافات التي يوفرها ووردبريس وهي مختصّة أكثر بالبيانات حيث أنها تتيح لنا إمكانية التعديل على قيم المتغيرات (اسم المقال مثلا)  قبل حفظها في قاعدة البيانات أو قبل عرضها للمستخدم، وكما هو ظاهر من اسمها فهي تتيح لنا إمكانية ترشيح البيانات، بمعنى إدخالها إلى filter مُعيّن يُعدّل عليها قبل إخراجها من الجانب الآخر من هذا المُرشّح .<br>
	بطبيعة الأمر وكما هو الحال بالنّسبة للأحداث فإن ووردبريس يُوفّر لك إمكانية إدخال أغلب مُتغيّراته في المُرشّحات التي تريدها من خلال اسم المتغير، ويمكنك الاطّلاع على المُتغيّرات التي يمكنك تمريرها عبر المُرشّحات بزيارة <a href="http://codex.wordpress.org/Plugin_API/Filter_Reference" rel="external nofollow">التوثيق الرسمي للمرشحات</a>.
</p>

<p dir="rtl">
	يتم إضافة فلتر معين <span style="font-family:'courier new', courier, monospace;">my_filter</span>  لبيانات معينة <span style="font-family:'courier new', courier, monospace;">my_data</span>  من خلال الدّالة <span style="font-family:'courier new', courier, monospace;">add_filter</span> بالطريقة التالية
</p>

<pre class="php ipsCode prettyprint prettyprinted" style="">
<span class="pln">    add_filter</span><span class="pun">(</span><span class="pln"> </span><span class="str">'my_data'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'my_filter'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p dir="rtl">
	حيث أن <span style="font-family:'courier new', courier, monospace;">my_filter</span> هي الدّالة التي ستقوم بالتعديل على البيانات ويتم تمرير البيانات لها من قبل ووردبريس أي أنها يجب أن تستقبل <span style="font-family:'courier new', courier, monospace;">my_data</span> كمعامل parameter.
</p>

<p dir="rtl">
	2-1مثال للمرشحات في ووردبريس<br>
	هذا المثال يقوم بتعديل محتوى المقال <span style="font-family:'courier new', courier, monospace;">the_content</span> حيث يقوم بإضافة التّوقيع لمُحتويات كل مقال في الموقع
</p>

<pre class="php ipsCode prettyprint prettyprinted" style="">
<span class="pln">    add_filter </span><span class="pun">(</span><span class="pln"> </span><span class="str">'the_content'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'add_signiture'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">function</span><span class="pln"> add_signiture</span><span class="pun">(</span><span class="pln">$the_content</span><span class="pun">){</span><span class="pln">
    </span><span class="com">// هنا نقوم بإضافة الشيفرات التي تضيف التّوقيع لمحتويات المقال</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> $the_content</span><span class="pun">;</span><span class="pln">   </span><span class="com">// بعد ذلك تقوم الدّالة بإرجاع القيم الجديدة لمحتويات المقال</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span></pre>

<p dir="rtl">
	<span style="line-height:1.6;">هذه نظرة سريعة فقط على الخطافات في ووردبريس ولكن ما زال هنالك العديد من الأشياء المتعلقة بهذه الآلية الرّائعة التي يوفرها ووردبريس منها:</span>
</p>

<ul dir="rtl">
<li>
		إمكانية إضافة الـhooks الخاصة بك.
	</li>
	<li>
		تعديل أولوية تنفيذ الدّوال التابعة لنفس الـhook.
	</li>
	<li>
		ويمكنك التعرف على المزيد حول موضوع الخطافات في التّوثيق الرسمي لPlugin <abbr title="واجهة برمجية | Application Programming Interface"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>
	</li>
</ul>
<h2 dir="rtl">
	وسوم القالب Template Tags
</h2>

<p dir="rtl">
	قد تبدو الترجمة الحرفية مُضلّلة نوعًا ما خصوصا إذا علمت أن المقصود من وسوم القالب هو مجموعة من <strong>الدّوال الجاهزة</strong> التي يوفرها ووردبريس والتي تختصر لك الكثير من العمل، لذلك من الجيد أن تلقي نظرة عليها قبل البدء في برمجة الإضافة الخاصة بك. الجدير بالذّكر أن يتم استخدام كثير من هذه الدّوال داخل الحلقة الخاصّة بجلب المقالات في ووردبريس WordPress Loop والتي تستخدم بكثرة في القوالب، ولعل هذا هو سرّ تسميتها بوسوم القالب.
</p>

<h2 dir="rtl">
	حفظ بيانات/ الإضافة في قاعدة البيانات
</h2>

<p dir="rtl">
	الكثير من إضافات ووردبريس إن لم يكن معظمها تحتاج لاستقبال بعض البيانات من مدير الموقع (خيارات الإضافة مثلا) وحفظها في قاعدة البيانات لاسترجاعها واستخدامها لاحقا، ولهذا السبب يتيح لنا ووردبريس عدّة طرق لحفظ البيانات في قاعدة بيانات الموقع واختيار الطريقة المناسبة يعتمد على نوع البيانات المراد حفظها. هذه الطرق هي:
</p>

<h3 dir="rtl">
	1- استخدام آلية "الخيارات options" التي يوفرها ووردبريس
</h3>

<p dir="rtl">
	 وهذه الطريقة مناسبة في حالة كون البيانات المراد حفظها صغيرة نسبيا ولا تتغير كثيرا مثل البيانات التي تتوقع من مدير الموقع إدخالها بعد تنصيب الإضافة مباشرة (خيارات الإضافة) والتي نادرا ما تتغير. في هذه الطريقة يتم حفظ بيانات الإضافة في جدول <span style="font-family:'courier new', courier, monospace;">wp_options</span> والذي يستخدمه ووردبريس لحفظ خياراته الخاصة.
</p>

<h3 dir="rtl">
	2-استخدام البيانات الوصفية الخاصة بالمقالات Post Meta
</h3>

<p dir="rtl">
	 وهذه الطريقة مناسبة في حالة البيانات المتعلقة بمقال أو صفحة مفردة (مثلا مزاج الكاتب عند كتابة المقال)
</p>

<h3 dir="rtl">
	3-استخدام الفئات المخصّصة
</h3>

<p dir="rtl">
	 وهذه مناسبة لتصنيف البيانات مثل تصنيف المقالات أو المستخدمين أو التعليقات.
</p>

<h3 dir="rtl">
	4- إنشاء جدول جديد في قاعدة البيانات
</h3>

<p dir="rtl">
	هذه الطريقة مناسبة مع البيانات التي لا يصلح معها أي نوع من الأنواع الثلاثة السابقة والتي تتوقع أن تتزايد مع الزمن والتي لا يمكن حصرها في اسم محدد.
</p>

<h2 dir="rtl">
	الاستفادة من الواجهات البرمجية <abbr title="واجهة برمجية | Application Programming Interface"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>'s التي يوفرها ووردبريس
</h2>

<p dir="rtl">
	يحتوي ووردبريس على مجموعة ضخمة من الدّوال والأصناف Classes المفيدة التي تمثل بوّابات تربطك بقلب ووردبريس WordPress Core بالإضافة إلى توفيرها لدوال مفيدة في كثيرا من الأمور البرمجية العامة في مجال الويب، وهذه أمثلة لبعض الواجهات البرمجية التي يوفرها ووربريس
</p>

<ul dir="rtl">
<li>
		Plugin <abbr title="واجهة برمجية | Application Programming Interface"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>: تتيح لك الدّوال المستخدمة في الاستفادة من ميكانيكية الخطافات وكذلك الدّوال المساعدة لإنشاء الخطافات الخاصة بك.
	</li>
	<li>
		Database <abbr title="واجهة برمجية | Application Programming Interface"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> : واجهة برمجية تسهل التعامل مع قاعدة بيانات ووردبريس.
	</li>
	<li>
		Rewrite <abbr title="واجهة برمجية | Application Programming Interface"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>: تتيح لك إمكانية تغير صيغة روابط المقالات والموقع عموما والتحكم فيها.
	</li>
	<li>
		Filesystem <abbr title="واجهة برمجية | Application Programming Interface"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>: للتعامل مع نظام الملفات في نظام التشغيل.
	</li>
</ul>
<p dir="rtl">
	وغيرها الكثير من الواجهات البرمجية ويمكنك الإطلاع عليها <a href="http://codex.wordpress.org/WordPress_APIs" rel="external nofollow">من هنا</a>
</p>

<h2 dir="rtl">
	أمور عامة عليك مراعاتها عند برمجة الإضافة
</h2>

<h3 dir="rtl">
	1- الاهتمام بأمن الشيفرة Code Security
</h3>

<p dir="rtl">
	كما هو الحال عند برمجة أي سكربت من خلال لغة php عليك مراعاة أن يكون خاليا من الثغرات التي قد تعرض الموقع لخطر الاختراق، نفس الأمر ينطبق على إضافات ووردبريس فعليك الاهتمام بإغلاق الثّغرات المعروفة وحماية المدخلات وكذلك ملفات الإضافة بمنع الوصول المباشر لها عن<br>
	طريق استخدام الشيفرة التالية مثلا
</p>

<pre class="php ipsCode prettyprint prettyprinted" style="">
<span class="pln">  </span><span class="kwd">defined</span><span class="pun">(</span><span class="pln"> </span><span class="str">'ABSPATH'</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="kwd">or</span><span class="pln"> </span><span class="kwd">die</span><span class="pun">(</span><span class="pln"> </span><span class="str">'ممنوع الوصول المباشر'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p dir="rtl">
	هنالك أشياء أخرى يجب مراعاتها خصوصا إذا أردت نشر إضافتك في مستودع إضافات ووردبريس، بعض هذه الأمور إجباري وتحتاج لعمله حتى يتم قبول إضافتك ونشرها في المستودع، من هذه الأمور:
</p>

<h3 dir="rtl">
	2- ملف اقرأني Readme File
</h3>

<p dir="rtl">
	هو ملف تقوم بتضمينه في مجلد الإضافة باسم <span style="font-family:'courier new', courier, monospace;">readme.txt</span>  ويستخدمه مستودع الإضافات لأخذ بعض المعلومات بالإضافة للمعلومات التي تظهر في صفحة الإضافة في المستودع، يمكنك استخدام <a href="http://generatewp.com/plugin-readme/" rel="external nofollow">هذا المُوّلد</a> لإنشائه 
</p>

<h3 dir="rtl">
	3- جعل الإضافة قابلة للترجمة
</h3>

<p dir="rtl">
	من الأمور الأخرى التي عليك مراعاتها هو جعل الإضافة قابلة للترجمة  لعدة لغات localized حيث يمكنك استخدام <a href="http://www.gnu.org/software/gettext/" rel="external nofollow">مكتبة </a><a href="http://www.gnu.org/software/gettext/" rel="external nofollow">gettext</a>  التي يوفرها ووردبريس والتي تجعل من عملية جعل الكلمات قابلة للترجمة أمر سهل، وبعد ذلك يتم إرفاق ملفات اللغة مع الإضافة، ويمكنك قراءة المزيد عن هذا الأمر <a href="http://codex.wordpress.org/I18n_for_WordPress_Developers" rel="external nofollow">من هنا</a> 
</p>

<h3 dir="rtl">
	4- استخدام معايير تطوير وودبريس
</h3>

<p dir="rtl">
	معايير التّطويرCoding Standard هي بعض القواعد العامة التي عليك مراعاتها عند كتابة الشيفرة لتجنب أخطاء التشفير Coding وتسهيل عملية كتابة الشيفرات ومراجعتها وقراءتها خصوصا في حالة تعاون أكثر من شخص في برمجة شيء ما.<br>
	لووردبريس قواعده الخاصة أيضا والتي يحاول من خلالها المحافظة على قواعد ثابتة في شيفرات ووردبريس وكذلك شيفرات الإضافات والقوالب لذلك يفضل أن تلتزم بهذه القواعد عند كتابة شيفرات الإضافة الخاصة بك. يمكنك قراءة المزيد عن هذه القواعد <a href="https://make.wordpress.org/core/handbook/coding-standards/" rel="external nofollow">من هنا</a>. 
</p>

<h3 dir="rtl">
	5- تحديث الإضافة
</h3>

<p dir="rtl">
	يستخدم  مستودع إضافات ووردبريس نظام Subversion لتحديث ولمعرفة آلية القيام بذلك، زر <a href="https://wordpress.org/plugins/about/svn/" rel="external nofollow">هذه الصّفحة</a>
</p>

<p dir="rtl">
	كانت هذه كانت مقدمة سريعة ونبذة مختصرة حاولنا أن نجعلها كمدخل لبرمجة إضافات ووردبريس وما زال هنالك المزيد  لمعرفته عن  برمجة إضافات ووردبريس في مقالات قادمة.
</p>
]]></description><guid isPermaLink="false">38</guid><pubDate>Tue, 10 Mar 2015 12:39:00 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x645;&#x629; &#x625;&#x644;&#x649; &#x62A;&#x637;&#x648;&#x64A;&#x631; &#x642;&#x648;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;: &#x62A;&#x62D;&#x648;&#x64A;&#x644; &#x635;&#x641;&#x62D;&#x629; HTML &#x625;&#x644;&#x649; &#x642;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-html-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r32/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/wp-themes-intro.png.06b88534d5569b6cbfa3966061e30ea4.png" /></p>
<div>
	<p>
		هل صنعت قالب HTML وأحببته لكنّك لم تعرف كيف تُحوّله إلى قالب ووردبريس؟ ليس بعد الآن، ستتعلم في هذا الدرس كيف تقوم بذلك.
	</p>

	<p>
		هل تعلم بأنّ هناك الكثير من المُطوّرين الذين يكسبون رزقهم عن طريق إنشاء قوالب وإضافات ووردبريس (Wordpress) وبيعها؟
	</p>

	<p>
		وهل تعلم أنّه بإمكان مطوّري ووردبريس الحصول على آلاف الدولارات سنويًَّا من خلال بيع مُنتجاتهم؟
	</p>

	<p>
		هذا الدّرس مُخصّص لمطوّري الويب، على فرض أن القارئ على اطّلاع (ولو بشكل مُبسّط) بما يتعلّق بلغة PHP وMySQL ومعلومات عامّة عن كيفية تنصيب واستخدام ووردبريس.
	</p>

	<p>
		هذا الدرس جزء من سلسلة تعلم كيفية تطوير قوالب ووردبريس:
	</p>

	<ul>
		<li>
			مقدمة إلى تطوير قوالب ووردبريس: تحويل صفحة HTML إلى قالب ووردبريس (هذا الدرس)
		</li>
		<li>
			<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D9%8A%D8%AD-pagination-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r54/" rel="">التصفيح (Pagination) في قوالب ووردبريس</a>
		</li>
		<li>
			<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%82%D9%88%D8%A7%D8%A6%D9%85-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%91%D9%84-navigation-menu-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-wordpress-r68/" rel="">إضافة قوائم التنقل (Navigation Menu) إلى قالب ووردبريس</a>
		</li>
		<li>
			<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%B5%D9%81-%D9%88%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D9%85%D9%84%D9%81%D8%A7%D8%AA-javascript-%D9%88-css-%D9%81%D9%8A-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r79/" rel="">صف وتسجيل ملفات Javascript و CSS في قوالب ووردبريس</a>
		</li>
	</ul>
</div>

<div>
	<h2>
		متطلبات التّشغيل
	</h2>

	<p>
		نحتاج إلى تحميل نسخة ووردبريس من <a href="http://wordpress.org" rel="external nofollow">الموقع الرسمي</a> ، سنستخدم النّسخة العربية من <a href="http://ar.wordpress.org" rel="external nofollow">هذا الرّابط</a>.
	</p>

	<p>
		تحتاج ووردبريس إلى خادوم ويب، سواء كان Apache أو Nginx أو الخادوم المُدمج مع لغة PHP (بإصدار5.4 وما فوق). وتحتاج أيضًا إلى خادوم قواعد البيانات MySQL.
	</p>

	<p>
		لنقم بإنشاء مُجلّد جديد <span style="font-family:'courier new', courier, monospace;">wordpress_tutorials</span> ونضع فيه نسخة ووردبريس النّاتجة عن فكّ ضغط الملف الذي قمنا بتحميله.
	</p>

	<p>
		<strong>ملاحظة</strong>: يمكن أن تستخدم البرامج المُجهّزة خصّيصًا بخواديم Apache و MySQL مثل MAMP ،WAMP أو XAMPP. مع مُراعاة الاختلاف بين رابط خادوم الويب ومعلومات خادوم MySQL مع ما سنستخدمه في هذا الدّرس.
	</p>

	<p>
		سنقوم باستخدام الخادوم المُدمج مع PHP لتجنّب تنصيب خادوم Apache أو Nginx وتجنب الخوض في الإعدادات الخاصّة بكل واحد منها.
	</p>

	<p>
		لتشغيل الخادوم المُدمج نتوجه باستخدام سطر اﻷوامر إلى المجلّد الذي يحوي نسخة ووردبريس. ثم نكتب أمر:
	</p>
</div>

<div>
	<pre class="ipsCode prettyprint prettyprinted"><span class="pln">php </span><span class="pun">-</span><span class="pln">S localhost</span><span class="pun">:</span><span class="lit">8000</span></pre>

	<p>
		يتمّ تشغيل خادوم الويب المُدمج مع PHP على الحاسوب، يمكن التّوجّه عن طريق المُتصفّح إلى الرّابط <span style="font-family:'courier new', courier, monospace;">localhost:8000</span>  للتّأكد من أن الخادوم يعمل.
	</p>
</div>

<div>
	<h2>
		تهيئة قالب HTML
	</h2>

	<p>
		سنقوم بالاعتماد على قالبٍ قمتُ بإعداده مُسبقاً، يمكن تحميله من <a href="https://github.com/AAlakkad/Simple-Template/releases/download/v1.0.0/dist.zip" rel="external nofollow">هذا الرابط</a>، التّصميم عبارة عن قالب عادي يحوي بضع ملفّات HTML ،CSS و JavaScript. وهو مبني اعتمادًا على إطار عمل Foundation مع بعض التّعديلات والإضافات. هذا القالب تجريبيّ فقط لرؤية كيفية ظهور الشكل العامّ له.
	</p>

	<p>
		نتوجه إلى مجلّد المشروع الذي يحوي ملفات ووردبريس، ومنه نتوجّه إلى مجلد <span style="font-family:courier new,courier,monospace;">wp-content</span> ثم إلى مُجلّد themes. نقوم بإنشاء مُجلّد اسمه <span style="font-family:courier new,courier,monospace;">my_theme</span> بمثابة مُجلّد القالب الذي سنقوم بإنشائه.
	</p>
</div>

<div>
	<h2>
		ملفات القالب الأساسية
	</h2>

	<p>
		نحتاج إلى وجود ملفّين على الأقل ضمن مجلد القالب الذي أنشأناه، وهما:
	</p>

	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">-</span><span class="pln"> style</span><span class="pun">.</span><span class="pln">css
</span><span class="pun">-</span><span class="pln"> index</span><span class="pun">.</span><span class="pln">php</span></pre>

	<p>
		وهذا أقل ما يجب توفّره في القالب ليكون قالبًا صالحًا للاستخدام.
	</p>

	<p>
		نتجه إلى صفحة تغيير القوالب من لوحة تحكم ووردبريس لنرى ما يشبه:
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="370" href="https://academy.hsoub.com/uploads/monthly_2015_03/04.png.4e03205f77b792ee2c25a7bdc724e061.png" rel="" data-fileext="png"><img alt="04.png" class="ipsImage ipsImage_thumbnailed" data-fileid="370" src="https://academy.hsoub.com/uploads/monthly_2015_03/04.thumb.png.2145b7d8a03cf924200560864ee4632e.png"></a>
	</p>

	<p>
		كما تلاحظون لا نرى القالب الجديد الذي أنشأناه ضمن القوالب، وذلك ﻷن هناك شيئًا آخر علينا فعله قبل أن نرى القالب الجديد في هذه الصفحة.
	</p>

	<p>
		نحتاج إلى إضافة تعليق في ملف <span style="font-family:'courier new', courier, monospace;">style.css</span> كالتّالي (يمكن تعديل أيّ قيمة أيضًا):
	</p>
</div>

<div>
	<pre class="css ipsCode prettyprint prettyprinted"><span class="com">/*
Theme Name: قالبي الجديد
Author: عمار العقاد
Author URI: http://aalakkad.me
Description: قالب جديد، نقوم من خلاله بالتّدرّب على إنشاء قوالب WordPress.
Version: 1.0
*/</span></pre>

	<p>
		تقوم ووردبريس بالدخول إلى كل مجلد في مجلد القوالب، ثم تبحث عن ملف <span style="font-family:'courier new', courier, monospace;">style.css</span> بداخله تعليق يشبه التّعليق السابق، ثم تقوم بتفسير هذه التّعليقات ووضعها في صفحة القوالب التي تظهر للمُستخدم من خلالها أسماء وتوصيف القوالب. وهناك تفصيلات أخرى للتعليقات في ملف <span style="font-family:'courier new', courier, monospace;line-height:22.3999996185303px;">style.css</span> يمكن الاطلاع عليها كاملة من <a href="http://codex.wordpress.org/Theme_Development#Theme_Stylesheet" rel="external nofollow">ملفات التوثيق</a>.
	</p>

	<p>
		يمكن التوجه إلى صفحة القوالب من خلال لوحة التحكم، لنرى شيئًا مُشابهًا لما يلي:
	</p>

	<p style="text-align:center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="368" href="https://academy.hsoub.com/uploads/monthly_2015_03/02.png.6b3ead6a38f4b574de902c699725e7fb.png" rel="" data-fileext="png"><img alt="02.png" class="ipsImage ipsImage_thumbnailed" data-fileid="368" src="https://academy.hsoub.com/uploads/monthly_2015_03/02.thumb.png.88ee5b4fbbf987556c5a30a76c3ddcdd.png"></a>
	</p>

	<p>
		لنقم بتفعيل هذا القالب الجديد، ثم نتوجّه إلى الصّفحة الرّئيسية للمُدوّنة (الصفحة التي تُظهر المقالات وليست صفحة لوحة التّحكم). إن كنت تستخدم الخادوم المُدمج مع PHP بالطريقة التي ذكرناها، فيكون رابط الصّفحة الرئيسية هو: <span style="font-family:'courier new', courier, monospace;">localhost:8000</span>.
	</p>

	<p>
		سنرى صفحة بيضاء دون أن تحوي أيّ شيء، وذلك ﻷن القالب ما زال فارغًا تمامًا.
	</p>

	<p>
		سيتغيّر الوضع بعد قليل.
	</p>
</div>

<div>
	<h2>
		نقل قالب HTML إلى قالب ووردبريس
	</h2>

	<p>
		ما سنفعله في الخطوة الأولى هو وضع قالب HTML في ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> ثم نقوم بتعديل مسارات ملفات CSS و JavaScript.
	</p>

	<p>
		ستكون جميع الصفحات التي نستخدمها من ووردبريس بعد تفعيل القالب الجديد مُتطابقة، وكأنها قالب <a href="https://wiki.hsoub.com/HTML" rel="external">HTML </a>نفسه. وهذا هو المطلوب في هذه المرحلة، سنقوم بإضافة التّفاصيل فيما بعد وعلى عدة مراحل.
	</p>

	<p>
		نقوم الآن بنسخ محتوى ملف <span style="font-family:'courier new', courier, monospace;">index.html</span> كاملًا من قالب HTML ونضعه في ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> في قالبنا الجديد <span style="font-family:'courier new', courier, monospace;">my_theme</span> ضمن ووردبريس. ثم ننسخ مجلد <span style="font-family:'courier new', courier, monospace;">assets</span> كما هو إلى داخل مجلد قالبنا الجديد.
	</p>

	<p>
		لنرى كيف أصبح شكل الموقع بعد أن وضعنا محتوى ملف <span style="font-family:'courier new', courier, monospace;">index.html</span> في ملف <span style="font-family:'courier new', courier, monospace;">index.php</span>:
	</p>

	<p style="text-align:center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="369" href="https://academy.hsoub.com/uploads/monthly_2015_03/03.png.8caa4671827dc09ea8bd8517b9a5f4fc.png" rel="" data-fileext="png"><img alt="03.png" class="ipsImage ipsImage_thumbnailed" data-fileid="369" src="https://academy.hsoub.com/uploads/monthly_2015_03/03.thumb.png.2c3e194ea06219598ca9d7130a8d0b23.png"></a>
	</p>

	<p>
		يظهر الآن القالب بهذا الشّكل ﻷن ملفات CSS وJavaScript أصبحت في مسار مختلف عن المسار الذي كان موجودًا في قالب HTML.
	</p>

	<p>
		علينا الآن أن نقوم بتعديل مسارات هذه الملفات كي يُصبح شكل <a href="https://www.wpar.net/multipurpose-arabized-wordpress-themes/" rel="external">قالب ووردبريس</a> الجديد مُطابقًا لشكل قالب HTML.
	</p>

	<p>
		توفّر لنا ووردبريس عددًا من الدّوالّ (functions) مهمتها تسهيل إنشاء القوالب، سنستخدم منها <span style="font-family:'courier new', courier, monospace;"><a href="http://codex.wordpress.org/Function_Reference/get_template_directory_uri" rel="external nofollow">get_template_directory_uri()</a></span>، تقوم هذه الدالّة بإرجاع قيمة نصّيّة هي رابط القالب.
	</p>

	<p>
		مثلاً، إن كان مجلد القالب هو<span style="font-family:'courier new', courier, monospace;"> my_theme</span> ورابط خادوم الويب الذي نعمل عليه هو <span style="font-family:'courier new', courier, monospace;"><a href="http://localhost:8000" rel="external nofollow">http://localhost:8000</a></span> ستكون نتيجة الدالّة هي:
	</p>

	<blockquote>
		<p style="text-align: center;">
			<span style="font-family:'courier new', courier, monospace;"><a href="http://localhost:8000/wp-content/my_theme" rel="external nofollow">http://localhost:8000/wp-content/my_theme</a></span>
		</p>
	</blockquote>

	<p>
		يجب أن نستخدم هذه الدالّة أو ما يشابهها لنحصل على الرّوابط، ولا نستخدم روابط نضعها بشكل يدوي، فيُمكن لرابط خادوم الويب أن يتغير، وإن كانت الروابط موضوعةً بشكل يدوي فسيظهر شكل القالب كما في الأعلى خاليًّا من ملفات CSS و .JavaScript.
	</p>

	<p>
		نقوم بتعديل ملف <span style="font-family:'courier new', courier, monospace;">index.html</span> في قسم <span style="font-family:courier new,courier,monospace;">head</span>، نبحث عن سطر استدعاء ملفات CSS، ثم نقوم بالتّعديل عليها لتصبح بالشّكل:
	</p>
</div>

<div>
	<pre><span style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.6;">في قسم <span style="font-family:courier new,courier,monospace;">head</span> أيضًا نُريد استبدال رابط استدعاء ملف <span style="font-family:courier new,courier,monospace;">modernizr.js</span> ليستخدم دالّة </span><a href="http://codex.wordpress.org/Function_Reference/get_template_directory" rel="external nofollow" style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.6;">get_template_directory()</a><span style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.6;">، فيُصبح:</span>
</pre>
</div>

<div>
	<pre class="html ipsCode prettyprint prettyprinted"><span class="pln">&lt;script src="</span><span class="pun">&lt;?</span><span class="pln">php echo get_template_directory_uri</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="str">/assets/</span><span class="pln">js</span><span class="pun">/</span><span class="pln">modernizr</span><span class="pun">.</span><span class="pln">js</span><span class="str">"&gt;</span><span class="tag">&lt;/script&gt;</span></pre>

	<p>
		أخيرًا نبحث في نهاية ملف <span style="font-family:courier new,courier,monospace;">index.php </span>عن سطر استدعاء ملف JavaScript، ونقوم بالتّعديل عليه ليُصبح كما يلي:
	</p>
</div>

<div>
	<pre class="html ipsCode prettyprint prettyprinted"><span class="pln">&lt;script src="</span><span class="pun">&lt;?</span><span class="pln">php echo get_template_directory_uri</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="str">/assets/</span><span class="pln">js</span><span class="pun">/</span><span class="pln">vendor</span><span class="pun">.</span><span class="pln">js</span><span class="str">"&gt;</span><span class="tag">&lt;/script&gt;</span></pre>

	<p>
		الآن عندما يتم طلب المُدوّنة من المُتصفّح، ستكون النّتيجة النّهائية للتعديلات الثلاثة التي قمنها بها كالتالي:
	</p>
</div>

<div>
	<pre class="html ipsCode prettyprint prettyprinted"><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://localhost:8000/wp-content/themes/my_theme/assets/css/main.css"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://localhost:8000/wp-content/themes/my_theme/assets/js/modernizr.js"</span><span class="tag">&gt;&lt;/script&gt;</span><span class="pln">
</span><span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://localhost:8000/wp-content/themes/my_theme/assets/js/vendor.js"</span><span class="tag">&gt;&lt;/script&gt;</span></pre>

	<p>
		نذهب الآن إلى الصّفحة الرّئيسية للمُدوّنة لنرى كيف أصبح القالب.
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="371" href="https://academy.hsoub.com/uploads/monthly_2015_03/05.png.3f57950e2d626274b321969456266860.png" rel="" data-fileext="png"><img alt="05.png" class="ipsImage ipsImage_thumbnailed" data-fileid="371" src="https://academy.hsoub.com/uploads/monthly_2015_03/05.thumb.png.2576801978c910772aa9624d5b678e40.png"></a>
	</p>

	<p>
		في آخر فقرة من هذا الدرس سنقوم بتعديل ترويسة الموقع التي نصّها الحالي هو: "عنوان الموقع"، والذي يظهر في الجُزء العُلويّ. نريد تغيير هذا النصّ ليصبح اسم المدونة التي قمنا بإدخالها أثناء مرحلة التّنصيب، يمكنك تغيير اسم المدونة من لوحة التحكم ثم الإعدادات.
	</p>

	<p>
		لنفتح صفحة<span style="font-family:'courier new', courier, monospace;"> index.php</span> في المُحرّر، ثم نبحث عن السطر الذي يحوي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="tag">&lt;h1</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"logo"</span><span class="tag">&gt;</span><span class="pln">عنون الموقع</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
,نقوم باستبداله بما يلي بعض إضافة وسم PHP له:
</span><span class="tag">&lt;h1</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"logo"</span><span class="tag">&gt;</span><span class="pun">&lt;?</span><span class="pln">php bloginfo</span><span class="pun">(</span><span class="str">'name'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/h1&gt;</span></pre>
</div>

<div>
	<p>
		وسم:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">&lt;?</span><span class="pln">php php bloginfo</span><span class="pun">(</span><span class="str">'name'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

	<p>
		يقوم بإظهار/طباعة نصّ يتم جلبه من قاعدة البيانات، النصّ هو اسم المُدوّنة. نلاحظ أن الدّالّة <span style="font-family:'courier new', courier, monospace;"><a href="http://codex.wordpress.org/Function_Reference/bloginfo" rel="external nofollow">bloginfo()</a></span> تقوم بالإظهار وليست الإرجاع <span style="font-family:courier new,courier,monospace;">return</span> كما تفعل دالّة ()<span style="font-family:'courier new', courier, monospace;">get_template_directory_uri</span>.
	</p>

	<p>
		الآن عندما نتوجّه إلى الصفحة الرئيسية للمدونة تكون الترويسة شبيهة بالصورة:
	</p>

	<p style="text-align:center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="372" href="https://academy.hsoub.com/uploads/monthly_2015_03/06.png.e78e5adf23b1c9443b0cef954e94c367.png" rel="" data-fileext="png"><img alt="06.png" class="ipsImage ipsImage_thumbnailed" data-fileid="372" src="https://academy.hsoub.com/uploads/monthly_2015_03/06.thumb.png.70885bd54228e422fabe2b0a7b8456eb.png"></a>
	</p>
</div>

<div>
	<h2>
		فصل محتوى الملفات
	</h2>

	<p>
		من قواعد البرمجة الهامة إلغاء التّرابط أو الفصل (decoupling)، فنحاول فصل العناصر المُترابطة قدر الإمكان ووضعها في ملفات مُنفصلة.
	</p>

	<p>
		مثلًا سنقوم لاحقًا بإنشاء صفحة خاصّة لعرض المواضيع المُنفردة، وستحتاج تلك الصّفحة إلى وجود الترويسة (header) والتذييل (footer) كي تحوي ملفات CSS و JavaScript وتكون متناغمة مع باقي القالب.
	</p>

	<p>
		توفّر لنا ووردبريس عدة طُرق لإلغاء التّرابط في الملفات، إمّا أن يتم استخدام التّسلسل الهرمي لملفّات القالب (theme hierarchy) أو يتم استخدام قِطَع القالب (template parts).
	</p>

	<p>
		التّسلسل الهرمي لملفّات القالب (أو ملفات القالب للاختصار) هي ملفات بأسماء ثابتة، تقوم ووردبريس باستخدام الملف المُتوفّر منها حسب الطلب الذي يأتيها من المتصفح؛ مثلاً طلبتَ من المدونة رابط مقالٍ معيّن، تقوم ووردبريس بتحليل الطّلب ومعرفة أن المطلوب هو مقال، فتبحث عن ملف باسم <span style="font-family:'courier new', courier, monospace;">single.php</span>، إن كان موجودًا يتمّ استخدامه، إن لم يكن موجودًا تبحث ووردبريس عن ملف <span style="font-family:'courier new', courier, monospace;">index.php</span>. وهكذا الأمر بالنسبة لجميع الطلبات.
	</p>

	<p>
		أما قِطع القالب، فهي ملفات يقوم المستخدم بإنشائها دون أن يلتزم باستخدام أسماء مُحدّدة كما في ملفات القالب. ثم يقوم المطوّر باستخدام هذه القِطع في أي مكان يريده ضمن القالب.<br>
		يقوم المُطوّر مثلًا بإنشاء قطعة مُخصّصة لعرض أزرار المُشاركة، يقوم بتسمية الملف: <span style="font-family:'courier new', courier, monospace;">sharing.php</span>، ويضع فيه الوسوم التي يُريدها. ثم يقوم باستدعاء هذا الملف في الصّفحة الرّئيسيّة <span style="font-family:'courier new', courier, monospace;">index.php</span> وصفحة المقال المُنفرد <span style="font-family:'courier new', courier, monospace;">single.php</span> على النّحو التّالي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
get_template_part</span><span class="pun">(</span><span class="str">'sharing'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

	<p>
		هناك تفصيلات حول كيفية إنشاء قطع القالب والتّعامل معها، ما سنذكره هنا فقط لإعطاء فكرة عامة عنها وليس لشرحها بالتّفصيل.
	</p>

	<p>
		سنستخدم في هذا الدرس التّسلسل الهرمي فقط لسهولته وشهرته. إن كان الاسم غريبًا بالنّسبة إليك فستألفه بمُجرد أن تشرع في استخدامه.
	</p>

	<p>
		سنقوم بإنشاء 3 ملفّات في القالب هي:
	</p>

	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">-</span><span class="pln"> header</span><span class="pun">.</span><span class="pln">php
</span><span class="pun">-</span><span class="pln"> footer</span><span class="pun">.</span><span class="pln">php
</span><span class="pun">-</span><span class="pln"> sidebar</span><span class="pun">.</span><span class="pln">php</span></pre>

	<p>
		ومن ثم يمكننا استخدام هذه الملفّات في أي مكان ضمن القالب عن طريق الدّوال:
	</p>

	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">-</span><span class="pln"> get_header</span><span class="pun">()</span><span class="pln">
</span><span class="pun">-</span><span class="pln"> get_footer</span><span class="pun">()</span><span class="pln">
</span><span class="pun">-</span><span class="pln"> get_sidebar</span><span class="pun">()</span></pre>

	<p>
		هذه الدّوال تعمل بشكل مُشابه لـ <span style="font-family:courier new,courier,monospace;">require</span> التّي نعرفها في لغة PHP.
	</p>

	<p>
		بهذه الطّريقة لن نحتاج إلى القيام بالنّسخ واللصق في كل مرة نريد إدراج الترويسة في ملفات القالب، وفي حال أردنا تعديل شيء في الترويسة فلن نضطرّ إلى تطبيق التعديل في جميع ملفات القالب.
	</p>

	<p>
		الخطوة التّالية هي نقل المحتوى المُناسب لكل ملفّ من الملفّات السّابقة من ملف <span style="font-family:'courier new', courier, monospace;">index.php </span>إلى الملفّات الثّلاثة الجديدة التي أنشأناها.
	</p>

	<p>
		سنقوم حرفيًا بالنّسخ واللّصق من ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> إلى الملفات الثّلاثة، ثم نقوم بوضع إحدى الدّوال الثلاثة في ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> بدل النصّ الذي قمنا باقتصاصه.
	</p>
</div>

<div>
	<h3>
		ملف الترويسة header.php
	</h3>

	<p>
		نقوم باقتصاص مُحتوى ملف<span style="font-family:'courier new', courier, monospace;"> index.php</span> من بدايته وحتى نهاية وسم <span style="font-family:'courier new', courier, monospace;">&lt;/header&gt;</span> في السطر 57. نضع ما اقتصصناه في ملف <span style="font-family:'courier new', courier, monospace;">header.php</span>. ثم نضع مكان الاقتصاص في ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> ما يلي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
get_header</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

	<p>
		فتصبح بداية ملف <span style="font-family:courier new,courier,monospace;">index.php </span>مشابهةً لما يلي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
get_header</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span><span class="pln">

    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"main-content"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span></pre>
</div>

<div>
	<h3>
		ملف التذييل <span style="font-family:'courier new', courier, monospace;">footer.php</span>
	</h3>

	<p>
		نقوم الآن باقتصاص الجزء الخاص بالتذييل من ملف <span style="font-family:'courier new', courier, monospace;">index.php</span>، في السطر 71 بدءاً من وسم:
	</p>
</div>

<div>
	<pre class="html ipsCode prettyprint prettyprinted"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"site-footer"</span><span class="tag">&gt;</span></pre>

	<p>
		وحتى نهاية الملف.
	</p>

	<p>
		نقوم بوضع المُحتوى في ملف <span style="font-family:'courier new', courier, monospace;">footer.php</span>، ثم نستبدل مكان الوسوم المقصوصة في ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> بما يلي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
get_footer</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>
</div>

<div>
	<h3>
		ملف الشريط الجانبي <span style="font-family:'courier new', courier, monospace;">sidebar.php</span>
	</h3>

	<p>
		الوسوم الخاصّة بالشريط الجانبي ما هي إلا أربعة أسطر، تبدأ من السطر 64، المحتوى هو:
	</p>
</div>

<div>
	<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_5318_7"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"large-4 columns sidebar"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"card"</span><span class="tag">&gt;</span><span class="pln">
        Sidebar
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

	<p>
		نقوم بنقل المحتوى السّابق من ملف <span style="font-family:'courier new', courier, monospace;">index.php </span>إلى ملف <span style="font-family:'courier new', courier, monospace;">sidebar.php</span>، ونضع مكانه في ملف <span style="font-family:'courier new', courier, monospace;">index.php</span>:
	</p>
</div>

<div>
	<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_5318_9"><span class="pun">&lt;?</span><span class="pln">php
get_sidebar</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

	<p>
		بهذا ننتهي من المرحلة الأولى من إلغاء الترابط بين الوسوم، وضعنا كل جزءٍ منها في ملفٍّ خاصٍّ به، وكلما أردنا استخدام ذلك الجزء نقوم باستدعاء الدّالّة المناسبة لذلك.
	</p>

	<p>
		أصبح ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> أقصر طولًا، ويؤدّي نفس الغرض الذي كان يؤدّيه قبل أن نقوم بالتّعديلات، محتوى الملف كالتالي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
get_header</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"main-content"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"large-8 right columns news"</span><span class="tag">&gt;</span><span class="pln">
                </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span><span class="pln">
                    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"medium-12 columns"</span><span class="tag">&gt;</span><span class="pln">
                        </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"card"</span><span class="tag">&gt;</span><span class="pln">
                            </span><span class="tag">&lt;header&gt;</span><span class="pln">
                                </span><span class="tag">&lt;h1&gt;</span><span class="pln">Post title</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
                            </span><span class="tag">&lt;/header&gt;</span><span class="pln">
                            </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"date"</span><span class="tag">&gt;</span><span class="pln">4 كانون الأول 2014</span><span class="tag">&lt;/div&gt;</span><span class="pln">

                            </span><span class="tag">&lt;p&gt;</span><span class="pln">خلافاَ للاعتقاد </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">السائد</span><span class="tag">&lt;/a&gt;</span><span class="pln"> فإن لوريم إيبسوم ليس نصاَ عشوائياً، بنذ العام 45 قبل الميلاد، مما يجعله أكثر من 2000 عام في القدم. قام البروفيسور "ريتشارد ماك لينتوك" (Richard McClintock) وهو بروفيسور اللغة اللاتينية في جامعة هامبدن-سيدني في فيرجينيا بالبحث عن أصول كلمة لاتينية غامضة في نص لوريم إيبسوم وهي "consectetur"، وخلال تتبعه لهذه الكلمة في الأدب اللاتيني اكتشف المصدر الغير قابل للشك. فلقد اتضح أن كلمات نص لوريم إيبسوم تأتي من الأقسام 1.10.32 و 1.10.33 من كتاب "حول أقاصي الخير والشر" (de Finibus Bonorum et Malorum) للمفكر شيشيرون (Cicero) والذي كتبه في عام 45 قبل الميلاد. هذا الكتاب هو بمثابة مقالة علمية مطولة في نظرية الأخلاق، وكان له شعبية كبيرة في عصر النهضة. السطر الأول من لوريم إيبسوم "Lorem ipsum dolor sit amet.." يأتي من سطر في القسم 1.20.32 من هذا الكتاب.</span><span class="tag">&lt;/p&gt;</span><span class="pln">

                            </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"read-more text-left"</span><span class="tag">&gt;</span><span class="pln">
                                </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">تابع قراءة المقال &amp;raquo;</span><span class="tag">&lt;/a&gt;</span><span class="pln">
                            </span><span class="tag">&lt;/div&gt;</span><span class="pln">

                            </span><span class="tag">&lt;footer</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"tags"</span><span class="tag">&gt;</span><span class="pln">
                                </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"label"</span><span class="tag">&gt;</span><span class="pln">تقني</span><span class="tag">&lt;/span&gt;</span><span class="pln">
                                </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"label"</span><span class="tag">&gt;</span><span class="pln">تنمية</span><span class="tag">&lt;/span&gt;</span><span class="pln">
                                </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"label"</span><span class="tag">&gt;</span><span class="pln">منوعات</span><span class="tag">&lt;/span&gt;</span><span class="pln">
                            </span><span class="tag">&lt;/footer&gt;</span><span class="pln">
                        </span><span class="tag">&lt;/article&gt;</span><span class="pln">
                    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
                    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"medium-12 columns"</span><span class="tag">&gt;</span><span class="pln">
                        </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"card"</span><span class="tag">&gt;</span><span class="pln">
                            </span><span class="tag">&lt;header&gt;</span><span class="pln">
                                </span><span class="tag">&lt;h1&gt;</span><span class="pln">Post title</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
                            </span><span class="tag">&lt;/header&gt;</span><span class="pln">
                            </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"date"</span><span class="tag">&gt;</span><span class="pln">4 كانون الأول 2014</span><span class="tag">&lt;/div&gt;</span><span class="pln">

                            </span><span class="tag">&lt;p&gt;</span><span class="pln">خلافاَ للاعتقاد </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">السائد</span><span class="tag">&lt;/a&gt;</span><span class="pln"> فإن لوريم إيبسوم ليس نصاَ عشوائياً، بنذ العام 45 قبل الميلاد، مما يجعله أكثر من 2000 عام في القدم. قام البروفيسور "ريتشارد ماك لينتوك" (Richard McClintock) وهو بروفيسور اللغة اللاتينية في جامعة هامبدن-سيدني في فيرجينيا بالبحث عن أصول كلمة لاتينية غامضة في نص لوريم إيبسوم وهي "consectetur"، وخلال تتبعه لهذه الكلمة في الأدب اللاتيني اكتشف المصدر الغير قابل للشك. فلقد اتضح أن كلمات نص لوريم إيبسوم تأتي من الأقسام 1.10.32 و 1.10.33 من كتاب "حول أقاصي الخير والشر" (de Finibus Bonorum et Malorum) للمفكر شيشيرون (Cicero) والذي كتبه في عام 45 قبل الميلاد. هذا الكتاب هو بمثابة مقالة علمية مطولة في نظرية الأخلاق، وكان له شعبية كبيرة في عصر النهضة. السطر الأول من لوريم إيبسوم "Lorem ipsum dolor sit amet.." يأتي من سطر في القسم 1.20.32 من هذا الكتاب.</span><span class="tag">&lt;/p&gt;</span><span class="pln">

                            </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"read-more text-left"</span><span class="tag">&gt;</span><span class="pln">
                                </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">تابع قراءة المقال &amp;raquo;</span><span class="tag">&lt;/a&gt;</span><span class="pln">
                            </span><span class="tag">&lt;/div&gt;</span><span class="pln">

                            </span><span class="tag">&lt;footer</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"tags"</span><span class="tag">&gt;</span><span class="pln">
                                </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"label"</span><span class="tag">&gt;</span><span class="pln">تقني</span><span class="tag">&lt;/span&gt;</span><span class="pln">
                                </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"label"</span><span class="tag">&gt;</span><span class="pln">تنمية</span><span class="tag">&lt;/span&gt;</span><span class="pln">
                            </span><span class="tag">&lt;/footer&gt;</span><span class="pln">
                        </span><span class="tag">&lt;/article&gt;</span><span class="pln">
                    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
                </span><span class="tag">&lt;/div&gt;</span><span class="pln">
                </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span><span class="pln">
                    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"medium-12 columns"</span><span class="tag">&gt;</span><span class="pln">
                        </span><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pagination"</span><span class="tag">&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"arrow unavailable"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">&amp;laquo;</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"current"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">1</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">2</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">3</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">4</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"unavailable"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">&amp;hellip;</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">12</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">13</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                            </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"arrow"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span><span class="pln">&amp;raquo;</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
                        </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
                    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
                </span><span class="tag">&lt;/div&gt;</span><span class="pln">
            </span><span class="tag">&lt;/div&gt;</span><span class="pln">
            </span><span class="pun">&lt;?</span><span class="pln">php
            get_sidebar</span><span class="pun">();</span><span class="pln">
            </span><span class="pun">?&gt;</span><span class="pln">
        </span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php
get_footer</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>
</div>

<div>
	<h2>
		جلب المقالات من قاعدة البيانات
	</h2>

	<p>
		نحتاج الآن إلى عرض المقالات المحفوظة في قاعدة البيانات (والتي يتم التّحكم فيها من لوحة التّحكم الخاصّة بووردبريس)، سنقوم بعرضها في ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> وفي دروس لاحقة سنستخدم نفس طريقة عرض المقالات في باقي ملفات القالب، سواءً في ملف <span style="font-family:'courier new', courier, monospace;">single.php</span> أو في <span style="font-family:'courier new', courier, monospace;">archive.php</span> أو في غيرها.
	</p>

	<p>
		ضمن ملف <span style="font-family:'courier new', courier, monospace;">index.php</span> نجد أن كل مقال مُحاط بالوسوم:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"medium-12 columns"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"card"</span><span class="tag">&gt;</span></pre>

	<p>
		كل مقال يجب أن يبدأ بهذه الوسوم، وينتهي بإغلاق هذه الوسوم.
	</p>
</div>

<div>
	<p>
		نلاحظ أن قالب HTML يحوي مقالين شكليين، سنحذف واحدًا منها ونكتفي بالآخر لنقوم باستخدامه كمعيار لعرض المقالات مثله.
	</p>

	<p>
		نحيط وسوم بداية المقال بالحلقة الرّئيسية التي تكلّمنا عنها سابقًا، فتُصبح الوسوم كما يلي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pun">&lt;?</span><span class="pln">php 
</span><span class="kwd">while</span><span class="pun">(</span><span class="pln">have_posts</span><span class="pun">())</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
the_post</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span><span class="pln">
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"medium-12 columns"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"card"</span><span class="tag">&gt;</span></pre>

	<p>
		وبعد إغلاق الوُسوم التي بدأ المقال عندها نضع نهاية الحلقة (قوس إغلاق الحلقة) كما يلي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pln"> </span><span class="tag">&lt;/article&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="pun">}</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

	<p>
		إن قمنا بحفظ التّعديلات والتجربة، سنجد أن المقال الشّكليّ سيتكرّر بعدد المقالات الموجودة في قاعدة بيانات ووردبريس لدينا.<br>
		لكن جميع المقالات ستكون بنفس الشّكل وبنفس المُحتوى.
	</p>

	<p>
		سنقوم الآن باستبدال المُحتوى الشّكليّ بالمُحتوى المُناسب من قاعدة البيانات حسب كل مقال.
	</p>

	<p>
		تقدم ووردبريس دالّة <a href="http://codex.wordpress.org/Function_Reference/the_title" rel="external nofollow">the_title</a> لطباعة عُنوان المقال الحالي، سنستخدمها بدل عنوان المقال الشّكلي، فتصبح الوسوم كما يلي:
	</p>
</div>

<div>
	<pre class="html ipsCode prettyprint prettyprinted"><span class="tag">&lt;h1&gt;</span><span class="pun">&lt;?</span><span class="pln">php the_title</span><span class="pun">();?&gt;</span><span class="tag">&lt;/h1&gt;</span></pre>

	<p>
		وبنفس الطريقة نستخدم دالّة <a href="http://codex.wordpress.org/Function_Reference/the_date" rel="external nofollow">the_date</a> لعرض تاريخ نشر المقال كما يلي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"date"</span><span class="tag">&gt;</span><span class="pun">&lt;?</span><span class="pln">php the_date</span><span class="pun">();?&gt;</span><span class="tag">&lt;/div&gt;</span></pre>

	<p>
		ثم لعرض محتوى المقال نستخدم دالّة <a href="http://codex.wordpress.org/Function_Reference/the_content" rel="external nofollow">the_content</a> بدل وسم <span style="font-family:'courier new', courier, monospace;">&lt;p&gt;&lt;/p&gt;</span> الذي يحوي المحتوى الشكليّ، كما يلي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="tag">&lt;p&gt;</span><span class="pun">&lt;?</span><span class="pln">php the_content</span><span class="pun">();?&gt;</span><span class="tag">&lt;/p&gt;</span></pre>

	<p>
		يُمكن أن نقوم بحفظ التّعديلات على الملف ومشاهدة النّتيجة في المُتصفّح لنتأكد من أن التّعديلات التي قمنا بها تم تطبيقها وتعرض النّتيجة الصّحيحة.
	</p>

	<p>
		بقي لدينا تعديلان مُشابهان لما قمنا به، الأول لتعديل رابط “تابع قراءة المقال” والثاني لعرض الوسوم الخاصّة بالمقال.
	</p>

	<p>
		لتعديل رابط المقال نستخدم دالّة <span style="font-family:'courier new', courier, monospace;"><a href="http://codex.wordpress.org/Function_Reference/the_permalink" rel="external nofollow">the_permalink</a></span> التي وظيفتها عرض رابط الويب الخاصّ بالمقال، لكن لا تقوم الدّالّة سوى بطباعة الرّابط دون وضعه في وسم <span style="font-family:'courier new', courier, monospace;">&lt;a&gt;&lt;/a&gt;</span> كي يصبح قابلًا للنّقر والاستخدام. علينا إذًا وضع الرّابط في مكانه المُناسب كما يلي:
	</p>
</div>

<div>
	<pre class="php ipsCode prettyprint prettyprinted"><span class="pln">&lt;a href="</span><span class="pun">&lt;?</span><span class="pln">php the_permalink</span><span class="pun">();?&gt;</span><span class="pln">"&gt;تابع قراءة المقال »</span><span class="tag">&lt;/a&gt;</span></pre>

	<p>
		قمنا باستبدال قيمة حقل href="#" بدالّة طباعة رابط المقال. الآن أصبح بإمكاننا مُشاهدة الصّفحة الرّئيسيّة للقالب التي تعرض المقالات ويمكن الضّغط على رابط “تابع قراءة المقال” للوصول إلى المقال بعينه ضمن صفحة مُستقلّة.
	</p>

	<p>
		بقي الآن أن نعرض الوسوم الخاصّة بكل مقال. مكان الوسوم هو داخل وسم:
	</p>
</div>

<div>
	<pre class="html ipsCode prettyprint prettyprinted"><span class="tag">&lt;footer</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"tags"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/footer&gt;</span></pre>

	<p>
		سنقوم باستخدام دالّة <a href="http://codex.wordpress.org/Function_Reference/wp_get_post_tags" rel="external nofollow">wp_get_post_tags</a> التي مهمتها إرجاع مصفوفة تحوي جميع الوسوم الخاصّة بالمقال على شكل كائنات (Objects) وليس مُجرّد نصّ عادي. وعليه فإنه سيكون بإمكاننا الوصول إلى اسم كل وسم عن طريق: <span style="font-family:courier new,courier,monospace;">tag-&gt;name$</span> كما يلي:
	</p>
</div>

<div>
	<pre class="html ipsCode prettyprint prettyprinted"><span class="tag">&lt;footer</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"tags"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php
$tags </span><span class="pun">=</span><span class="pln"> wp_get_post_tags</span><span class="pun">(</span><span class="pln">get_the_ID</span><span class="pun">());</span><span class="pln">
</span><span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$tags </span><span class="kwd">as</span><span class="pln"> $tag</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    echo </span><span class="str">'&lt;span class="label"&gt; '</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $tag</span><span class="pun">-&gt;</span><span class="pln">name </span><span class="pun">.</span><span class="pln"> </span><span class="str">'&lt;/span&gt; '</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="pln">footer</span><span class="pun">&gt;</span></pre>

	<p>
		يُمكننا الآن استعراض المقالات في الصّفحة الرّئيسية للمُدوّنة والوصول إلى كل مقال عن طريق الرّابط الخاص به ورؤية الوسوم الخاصّة بكل مقال أيضًا.
	</p>

	<p>
		سنتوقف هنا في هذا الدرس كي لا تكون المعلومات كثيفة يصعب استيعابها، وسنتابع في دروس أخرى استخدام أرقام الصّفحات في الأسفل بشكل صحيح. (يمكن الآن إضافة تعليق حول وسوم الصفحات كي لا تظهر بشكل خاطئ وبدون روابط صحيحة).
	</p>
</div>

<div>
	<h2>
		خلاصة
	</h2>

	<p>
		تعلّمنا في هذا الدّرس كيف نقوم بتجهيز قالب HTML ليُصبح قالبَ ووردبريس، وكيف نُعدّل مسارات ملفات JavaScript وCSS لتُصبح متناغمةً مع رابط الويب الخاص بقالب ووردبريس.
	</p>

	<p>
		وفي القسم الثاني من الدرس تعلّمنا كيف نقوم بفصل المحتوى عن ملف <span style="font-family:courier new,courier,monospace;">index.php </span>إلى ملفّات فرعية أخرى، لنقوم بإعادة استخدامها في أي ملف ضمن القالب.
	</p>

	<p>
		وفي القسم الأخير رأينا كيف يمكن جلب المقالات من قاعدة البيانات وإظهارها للمُستخدم مع عرض الوسوم الخاصّة بكل مقال.
	</p>

	<p>
		أرجو أن يكون الدرس سهلاً بسيطاً، في حال وجود أي استفسار أو مداخلة نرحّب به في التعليقات.
	</p>
</div>
]]></description><guid isPermaLink="false">32</guid><pubDate>Tue, 03 Mar 2015 18:44:00 +0000</pubDate></item></channel></rss>
