<?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/2/?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>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x631;&#x648;&#x627;&#x628;&#x637; &#x627;&#x644;&#x62F;&#x627;&#x626;&#x645;&#x629; &#x641;&#x64A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D8%AF%D8%A7%D8%A6%D9%85%D8%A9-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1343/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_10/61633838b448f_-----------------htaccess----.png.74bcec4e66a8ed58af4fe50c4c26cc84.png" /></p>

<p>
	تُشير <a href="https://academy.hsoub.com/apps/web/wordpress/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%84%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D8%AF%D8%A7%D8%A6%D9%85%D8%A9-permalinks-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r91/" rel="">الروابط الدائمة</a> إلى كل منشور ضمن مدونتك، إضافةً إلى التصنيفات ومكونات أخرى من منشورات المدونة، ويستخدم مُدوّن آخر الرابط الدائم لمقالك ليربط مقاله بمقالك، وهو ما تستخدمه لإرسال رابط عن قصتك في بريد إلكتروني. يجب أن يكون رابط كل منشور دائمًا ولا يتغير، ولذلك سُميت هذه الروابط بالروابط الدائمة.
</p>

<h2>
	أنواع الروابط الدائمة
</h2>

<p>
	توجد ثلاثة أنواع أساسية في ووردبريس للروابط الدائمة.
</p>

<h3>
	1- الافتراضي
</h3>

<p>
	يظهر الرابط الافتراضي بهذا الشكل:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_7" style="">
<span class="pln">http</span><span class="pun">:/</span><span class="str">/example.com/</span><span class="pun">?</span><span class="pln">p</span><span class="pun">=</span><span class="pln">N</span></pre>

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

<h3>
	2- الروابط الجميلة mod_rewrite
</h3>

<p>
	تستطيع تشكيل روابط أجمل باستخدام mod_rewrite أو lighttpd (انظر إلى <a href="https://wordpress.org/support/article/introduction-to-blogging/#pretty-permalinks" rel="external nofollow">الروابط الجميلة</a>)، حيث توجد عدة هيئات لكن الأكثر استخدامًا تبدو مثل الآتي:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_9" style="">
<span class="pln">http</span><span class="pun">:/</span><span class="str">/example.com/</span><span class="lit">2012</span><span class="pun">/</span><span class="pln">post</span><span class="pun">-</span><span class="pln">name</span><span class="pun">/</span></pre>

<p>
	أو مثل:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_11" style="">
<span class="pln">http</span><span class="pun">:/</span><span class="str">/example.com/</span><span class="lit">2012</span><span class="pun">/</span><span class="lit">12</span><span class="pun">/</span><span class="lit">30</span><span class="pun">/</span><span class="pln">post</span><span class="pun">-</span><span class="pln">name</span></pre>

<p>
	يُمكنك استخدام الروابط الجميلة في:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/servers/web/apache/%D9%81%D9%8A%D8%AF%D9%8A%D9%88-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%B6%D8%A8%D8%B7-%D8%AE%D8%A7%D8%AF%D9%85-apache-r407/" rel="">خوادم Apache</a> التي تستخدم وحدة mod_rewrite.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/web/nginx/%D9%81%D9%8A%D8%AF%D9%8A%D9%88-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%B6%D8%A8%D8%B7-%D8%AE%D8%A7%D8%AF%D9%85-nginx-r401/" rel="">خوادم NGINX</a> التي تستخدم try-files وفقًا <a href="http://nginxlibrary.com/wordpress-permalinks/" rel="external nofollow">للدليل التعليمي</a>.
	</li>
	<li>
		<a href="https://www.hiawatha-webserver.org/" rel="external nofollow">خوادم Hiawatha</a> عند تفعيل UrlToolkit.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/freebsd/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-lighttpd-%D9%85%D8%B9-mysql-%D9%88-php-%D8%B9%D9%84%D9%89-freebsd-110-r376/" rel="">Lighttpd </a>الذي يستخدم وحدة mod_rewrite أو <a href="http://chrisjohnston.org/2009/setting-up-a-wordpress-blog-on-lighttpd" rel="external nofollow">404 handler</a>.
	</li>
	<li>
		Caddy الذي يستخدم rewrite وفقًا <a href="https://denbeke.be/blog/servers/caddy-server-and-wordpress-php-fpm/" rel="external nofollow">للدليل التعليمي</a>.
	</li>
</ul>
<h3>
	3- معلومات المسار (روابط شبه جميلة)
</h3>

<p>
	تبدو هذه الروابط تقريبًا مثل روابط mod_rewrite لكن مع اختلاف واحد هو وجود /index.php قبلها.
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_16" style="">
<span class="pln">http</span><span class="pun">:/</span><span class="str">/example.com/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">php</span><span class="pun">/</span><span class="pln">yyyy</span><span class="pun">/</span><span class="pln">mm</span><span class="pun">/</span><span class="pln">dd</span><span class="pun">/</span><span class="pln">post</span><span class="pun">-</span><span class="pln">name</span><span class="pun">/</span></pre>

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

<h2>
	اختيار تركيبة الروابط الدائمة
</h2>

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

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		<strong>ملاحظة:</strong> لا تستخدم رابط الموقع ضمن حقول الروابط الدائمة، بل استخدم وسوم التركيبة الموجودة أو مزيج منها فقط.
	</p>
</blockquote>

<p>
	ابدأ التركيبة بـ /index.php لتفعيل الروابط شبه الجميلة.
</p>

<h3>
	1- وسوم تركيبة الروابط الدائمة
</h3>

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

<ul>
<li>
		لا تستخدم رابط موقعك ضمن حقول الروابط الدائمة، إذ تستطيع استخدام واحد من وسوم التراكيب أو مزيج منها.
	</li>
	<li>
		يجب أن تنتهي بنيتك إما بـ %post_id% أو %postname% مثل البنية:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_19" style="">
<span class="pln"> </span><span class="pun">/%</span><span class="pln">year</span><span class="pun">%</span><span class="str">/%monthnum%/</span><span class="pun">%</span><span class="pln">day</span><span class="pun">%</span><span class="str">/%postname%/</span><span class="pln">
</span></pre>

<p>
	وذلك لتُشير الروابط الدائمة إلى كل منشور فردي.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
<thead><tr>
<th style="text-align:center">
				الوصف
			</th>
			<th style="text-align:center">
				الوسم
			</th>
		</tr></thead>
<tbody>
<tr>
<td style="text-align:center">
				العام الذي نُشر فيه المنشور من أربعة أرقام مثل 2018
			</td>
			<td style="text-align:center">
				<strong>%year%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				شهر من العام مثل 05
			</td>
			<td style="text-align:center">
				<strong>%monthnum%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				يوم من الشهر مثل 28
			</td>
			<td style="text-align:center">
				<strong>%day%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				ساعة من اليوم مثل 15
			</td>
			<td style="text-align:center">
				<strong>%hour%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				دقيقة من الساعة مثل 43
			</td>
			<td style="text-align:center">
				<strong>%minute%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				ثانية من الدقيقة مثل 33
			</td>
			<td style="text-align:center">
				<strong>%second%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				رقم تعريف المنشور الفريد مثل 423
			</td>
			<td style="text-align:center">
				<strong>%post_id%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				نُسخة مُنقحة من عنوان المنشور (الاسم اللطيف للمنشور في صفحة تحرير الصفحة أو المقال). فإذا كان العنوان "هذا منشور رائع" سوف يصبح هذا-منشور-رائع ضمن الرابط.
			</td>
			<td style="text-align:center">
				<strong>%postname%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				نُسخة منقحة من اسم التصنيف (الاسم اللطيف للمنشور في صفحة تحرير التصنيف). تظهر التصنيفات الفرعية كمسارات فرعية ضمن الرابط.
			</td>
			<td style="text-align:center">
				<strong>%category%</strong>
			</td>
		</tr>
<tr>
<td style="text-align:center">
				نُسخة منقحة من اسم المؤلف
			</td>
			<td style="text-align:center">
				<strong>%author%</strong>
			</td>
		</tr>
</tbody>
</table>
<h3>
	2- تركيبة التصنيف وتركيبة الوسم
</h3>

<p>
	إن تركيبة التصنيف وتركيبة الوسم هي عبارة عن بوادئ تُستخدم في رابط التنصيف والوسم والذي يبدو هكذا:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_25" style="">
<span class="pln">example</span><span class="pun">.</span><span class="pln">net</span><span class="pun">/</span><span class="pln">wp</span><span class="pun">/</span><span class="pln">category_base</span><span class="pun">/</span><span class="pln">category_name
 example</span><span class="pun">.</span><span class="pln">net</span><span class="pun">/</span><span class="pln">wp</span><span class="pun">/</span><span class="pln">tag_base</span><span class="pun">/</span><span class="pln">tag_name</span></pre>

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

<h3>
	3- استخدام %category% مع عدة تصنيفات ضمن المنشور
</h3>

<p>
	عند تعيينك عدة تصنيفات للمنشور؛ يُمكن أن يظهر تصنيف واحد فقط ضمن الروابط الدائمة، حيث تُرتب التصنيفات حسب الأحرف الأبجدية، كما ينطبق الأمر نفسه ضمن التصنيفات الفرعية. (انظر <a href="https://codex.wordpress.org/Manage_Categories_SubPanel" rel="external nofollow">لإدارة التصنيفات</a>). يُمكن الوصول للمنشور من أي تصنيف،كما هو الحال عندما ينتمي لتصنيف واحد، كما تستطيع تجريب إضافة <a href="https://wordpress.org/plugins/wp-category-permalink/" rel="external nofollow">WP Category Permalink</a> إذا كنت تريد اختيار التصنيف الذي يظهر ضمن الرابط الدائم.
</p>

<h2>
	استخدام الروابط الدائمة الجميلة
</h2>

<p>
	1 المتطلبات:
</p>

<ul>
<li>
		خادم Apache مُثبت عليه وحدة mod_rewrite.
	</li>
	<li>
		ضمن المسار الرئيسي لووردبريس.
	</li>
	<li>
		يجب تفعيل خيار <a href="http://httpd.apache.org/docs/current/mod/core.html#options" rel="external nofollow">FollowSymLnks</a>.
	</li>
	<li>
		السماح <a href="http://httpd.apache.org/docs/current/mod/core.html#allowoverride" rel="external nofollow">بالتوجيه FileInfo</a> مثل <code>AllowOverride FileInfo or AllowOverride All</code>.
	</li>
	<li>
		ملف htaccess، حيث سيحاول ووردبريس إنشاء واحد إذا كان الملف مفقودًا عند تفعيل الروابط الدائمة الجميلة.
	</li>
	<li>
		إن كنت تريد أن يُحدث ووردبريس ملف htaccess تلقائيًا سوف يحتاج صلاحية الكتابة على الملف.
	</li>
	<li>
		عليك إضافة ما يلي عند استخدام خادم <a href="http://nginx.org/" rel="external nofollow">NGINX</a>.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_34" style="">
<span class="pln">location </span><span class="pun">/</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
           try_files $uri $uri</span><span class="pun">/</span><span class="pln"> </span><span class="pun">/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">php</span><span class="pun">?</span><span class="pln">$args</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<ul>
<li>
		بالنسبة لخادم <a href="https://www.hiawatha-webserver.org/" rel="external nofollow">Hiawatha</a> وهو خادم يُعنى بالأمان كثيرًا، فيجب استخدام قاعدة UrlToolkit التالية:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_9058_36" style="">
<span class="typ">UrlToolkit</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
   </span><span class="typ">ToolkitID</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> wordpress
   </span><span class="typ">RequestURI</span><span class="pln"> exists </span><span class="typ">Return</span><span class="pln">
   </span><span class="typ">Match</span><span class="pln"> </span><span class="pun">.*</span><span class="pln">\?</span><span class="pun">(.*)</span><span class="pln"> </span><span class="typ">Rewrite</span><span class="pln"> </span><span class="pun">/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">php</span><span class="pun">?</span><span class="pln">$1
   </span><span class="typ">Match</span><span class="pln"> </span><span class="pun">.*</span><span class="pln"> </span><span class="typ">Rewrite</span><span class="pln"> </span><span class="pun">/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">php
</span><span class="pun">{</span></pre>

<ul>
<li>
		يجب على مستخدمي ماك الذين يشغلون ووردبريس على حواسيبهم تعديل ملف httpd.conf لتغيير سطر AllowOverride لقراءة <code>AllowOverride All</code> ضمن المسار التالي:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_38" style="">
<span class="pln"> </span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">WebServer</span><span class="pun">/</span><span class="typ">Documents</span><span class="pln">
</span></pre>

<p>
	بالنسبة لنظام Mac OS X 10.2.x وما بعد، فإن الملف موجود في المسار الآتي:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_40" style="">
<span class="pln"> </span><span class="pun">‎/</span><span class="pln">private</span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">apache2</span><span class="pun">/</span><span class="pln">users</span><span class="pun">/[</span><span class="pln">your</span><span class="pun">-</span><span class="pln">username</span><span class="pun">].</span><span class="pln">conf
</span></pre>

<p>
	وإلا سوف تجده في ‎/etc/httpd/httpd.conf.
</p>

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

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

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

<h3>
	أين ملف htaccess الخاص بي
</h3>

<p>
	يجب أن تواجد ملفي index.php و‎htaccess معًا ضمن نفس المسار الذي يُشير إليه رابط عنوان الموقع في صفحة عام من إعدادات ووردبريس. يُحتمل ألا يكون الملف مرئيًا للعلن عند الاتصال عبر <a href="https://academy.hsoub.com/apps/web/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-ftp-%D9%84%D9%86%D9%82%D9%84-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%85%D8%AF%D9%88%D9%86%D8%A9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5-%D8%A8%D9%83%D8%9F-r107/" rel="">FTP </a>لأن اسمه يبدأ بنقطة، إلا في حال غيرت إعدادات برنامج FTP الذي تستخدمه لتظهر جميع الملفات بما فيها المخفية، ويُمكن ألا تُظهر لك بعض <a href="https://academy.hsoub.com/apps/web/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AD%D8%AC%D8%B2-%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D9%88%D8%B1%D8%A8%D8%B7%D9%87%D8%A7-%D9%85%D8%B9-%D8%A7%D8%B3%D9%85-%D9%86%D8%B7%D8%A7%D9%82-%D9%85%D8%AA%D8%AC%D8%B1%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r392/" rel="">الاستضافات </a>أو تسمح لك بتعديل ملف ‎htaccess إن ثُبت ووربدريس عبر تطبيقات الاستضافة.
</p>

<h3>
	إنشاء وتحرير ملف htaccess
</h3>

<p>
	يجب عليك إنشاء ملف htaccess إذا كنت لا تملك واحدًا، وهذا ممكن عبر اتصال shell أو <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr> للوصول للخادم، حيث يكفي كتابة الأمر <code>touch .htaccess</code> لإنشاء الملف. وإذا كنت تستخدم اتصال FTP لنقل الملفات، فأنشئ ملفًا على حاسوبك المحلي واسمه htaccess_old، ثم ارفعه للمسار الرئيسي لتثبيت ووردبريس، بعدها أعد تسميته لـ htaccess.
</p>

<p>
	تستطيع تحرير ملف ‎htaccess باستخدام FTP أو shell أو ربما <a href="https://academy.hsoub.com/apps/web/wordpress/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D9%88%D8%AD%D8%A9-%D8%AA%D8%AD%D9%83%D9%85-cpanel-%D9%84%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r365/" rel="">لوحة تحكم</a> الاستضافة، كما يجب أن تكون قواعد إعادة كتابة الروابط الدائمة التالية موجودةً ضمن ملف ‎.htaccess
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_9058_44" style="">
<span class="com"># BEGIN WordPress</span><span class="pln">
</span><span class="pun">&lt;</span><span class="typ">IfModule</span><span class="pln"> mod_rewrite</span><span class="pun">.</span><span class="pln">c</span><span class="pun">&gt;</span><span class="pln">
</span><span class="typ">RewriteEngine</span><span class="pln"> </span><span class="typ">On</span><span class="pln">
</span><span class="typ">RewriteBase</span><span class="pln"> </span><span class="pun">/</span><span class="pln">
</span><span class="typ">RewriteRule</span><span class="pln"> </span><span class="pun">^</span><span class="pln">index\.php$ </span><span class="pun">-</span><span class="pln"> </span><span class="pun">[</span><span class="pln">L</span><span class="pun">]</span><span class="pln">
</span><span class="typ">RewriteCond</span><span class="pln"> </span><span class="pun">%{</span><span class="pln">REQUEST_FILENAME</span><span class="pun">}</span><span class="pln"> </span><span class="pun">!-</span><span class="pln">f
</span><span class="typ">RewriteCond</span><span class="pln"> </span><span class="pun">%{</span><span class="pln">REQUEST_FILENAME</span><span class="pun">}</span><span class="pln"> </span><span class="pun">!-</span><span class="pln">d
</span><span class="typ">RewriteRule</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">php </span><span class="pun">[</span><span class="pln">L</span><span class="pun">]</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="typ">IfModule</span><span class="pun">&gt;</span><span class="pln">
</span><span class="com"># END WordPress</span></pre>

<p>
	سوف يتوقف موقعك إذا تضمن ملف htaccess أي أخطاء لتظهر لك رسالة Internal Server Error 500، وعندها سوف تُضطر لاستخدام اتصال FTP أو لوحة تحكم الاستضافة لحذف ملف htaccess التالف.
</p>

<h3>
	تحديث ملف htaccess تلقائيا
</h3>

<p>
	سوف يطلب منك ووردبريس تحديث ملف ‎htaccess إذا لم يتمكن من تحديثه تلقائيًا، حيث سوف تجد رسالةً في أسفل صفحة الروابط الدائمة في قسم الإعدادات.
</p>

<p>
	إذا كنت تريد أن يتولى ووردبريس تنفيذ هذه العملية، فعليك <a href="https://codex.wordpress.org/Changing_File_Permissions" rel="external nofollow">إعطاؤه صلاحيات الكتابة على ملف ‎htaccess</a>. تختلف الصلاحيات المطلوبة حسب إعدادات الخادم، لذلك حاول إضافة صلاحيات الكتابة للمالك ثم للمجموعة ثم للكل، واختبر بعد كل تغيير وحافظ على النتيجة التي تسمح لووردبريس بتحرير الملف بنجاح.
</p>

<p>
	وبعد تطبيق الروابط الدائمة، عليك تغيير الصلاحيات لصلاحيات أشد أمنيًا مثل 660 أو 644 لمنع الآخرين ضمن الخادم من الوصول لهذا الملف.
</p>

<h2>
	إصلاح مشاكل الروابط الدائمة
</h2>

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

<h3>
	1- إصلاح مشكلة توليد ملف htaccess
</h3>

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

<ul>
<li>
		<strong>تغيير صلاحيات الملف:</strong> يجب عليك تغيير الصلاحيات باستخدام <a href="https://codex.wordpress.org/Changing_File_Permissions" rel="external nofollow">chmod</a> إلى 666، وذلك لتتمكن من تعديل الملف باستخدام <a href="https://codex.wordpress.org/Editing_Files#Using_the_Built-in_Editor" rel="external nofollow">محرر قالب</a> ووردبريس، لكن لا يُنصح بهذا لأن هذه الخطوة تسمح لأي مستخدم ضمن مدونتك (يستطيع تعديل القوالب) بتعديل هذا الملف، كما تستطيع تغيير الصلاحيات إلى 660 لجعل الملف قابلًا للكتابة من قبل الخادم، لكن هذا يعود بنا لمحدودية الصلاحيات والتي ربما هي سبب المشكلة.
	</li>
	<li>
		<strong>حجب من قبل الخادم:</strong> يُحتمل أن تكون استضافتك قد حَجبت المتغير SERVER_SOFTWARE، وهذا يُسبب فشل ووردبريس في توليد ملف htaccess. إذا كنت واثقًا من أن خادمك يعمل على Apache، فتستطيع إجبار ووردبريس على الاعتقاد أن خادمك يعمل على Apache بتعديل ملف wp-includes/vars.php. اتّبع الخطوات التالية لتنفيذ التعديل:
		<ul>
<li>
				افتح ملف wp-includes/vars.php باستخدام محرر الملفات الموجودة ضمن لوحة تحكم ووردبريس، وللوصول لهذا المحرر عليك تسجيل الدخول لووردبريس، ثم الضغط على "إدارة"، ثم "ملفات". بعدها توجه لأسفل الصفحة واكتب wp-includes/vars.php من مربع النص أسفل عبارة "ملفات أخرى" وابحث عن:
			</li>
		</ul>
</li>
</ul>
<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_48" style="">
<span class="pln">$is_apache </span><span class="pun">=</span><span class="pln"> strstr</span><span class="pun">(</span><span class="pln">$_SERVER</span><span class="pun">[‘</span><span class="pln">SERVER_SOFTWARE</span><span class="pun">’],</span><span class="pln"> </span><span class="pun">‘</span><span class="typ">Apache</span><span class="pun">’)</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span></pre>

<p>
	واستبدله بـ:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9058_50" style="">
<span class="pln">// $is_apache = strstr($_SERVER[‘SERVER_SOFTWARE’], ‘Apache’) ? 1 : 0;</span></pre>

<p>
	أضف سطرًا جديدًا تحت
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9058_52" style="">
<span class="pun">/</span><span class="pln"> $is_apache </span><span class="pun">=</span><span class="pln"> strstr</span><span class="pun">(</span><span class="pln">$_SERVER</span><span class="pun">[‘</span><span class="pln">SERVER_SOFTWARE</span><span class="pun">’],</span><span class="pln"> </span><span class="pun">‘</span><span class="typ">Apache</span><span class="pun">’)</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span></pre>

<p>
	واكتب
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9058_54" style="">
<span class="pln">$is_apache </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span></pre>

<ul>
<li>
		مستخدمو XAMPP (ويندوز): لن يكون mod_rewrite في بعض إصدارات <a href="http://www.apachefriends.org/en/xampp.html" rel="external nofollow">XAMPP</a> مُفعلًا افتراضيًا، ولتفعيله لتمكين ووردبريس من الكتابة على ملف ‎htaccess وإنشاء الروابط الدائمة الجميلة المطلوبة، عليك فتح الملف ‎/apache/conf/httpd.conf وإزالة التعليق عن السطر الآتي:
	</li>
</ul>
<p>
	 
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_2506_6" style="">
<span class="pln"> </span><span class="typ">LoadModule</span><span class="pln"> rewrite_module modules</span><span class="pun">/</span><span class="pln">mod_rewrite</span><span class="pun">.</span><span class="pln">so
</span></pre>

<p style="margin-right: 40px;">
	وهنا يجب عليك حذف إشارة # الموجودة في بداية السطر.
</p>

<ul>
<li>
		مستخدمو WAMP (ويندوز): لن يكون mod_rewrite أو السماح باتباع SymLink مُفعلًا افتراضيًا في بعض إصدارات WAMP، ولتفعيل الميزات المطلوبة، عليك التوجه إلى apache/conf/httpd.conf وفتحه بمحرر نصوص، ثم إزالة التعليق عن السطر الآتي:
	</li>
</ul>
<p>
	 
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_2506_9" style="">
<span class="pln"> </span><span class="typ">LoadModule</span><span class="pln"> rewrite_module modules</span><span class="pun">/</span><span class="pln">mod_rewrite</span><span class="pun">.</span><span class="pln">so
</span></pre>

<p style="margin-right: 40px;">
	ويجب عليك هنا حذف إشارة <code>#</code> الموجودة في بداية السطر. يوجد في أسفل الملف قسم يبدأ بالسطر Options FollowSymlinks أيضًا، عليك بتغيير السطر الثاني ضمن هذا القسم من AllowOverride none إلى AllowOverride all، ثم احفظ الملف وأعد تشغيل WAMP. يجب أن تعمل الروابط الدائمة الآن.
</p>

<h2>
	نصائح
</h2>

<h3>
	تجنب التفسير مثل رابط أرشيف
</h3>

<p>
	من المُحتمل ألا تنشر أكثر من منشور في اليوم، ولهذا فإن استخدام الوسوم الآتية:
</p>

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_56" style="">
<span class="pun">%</span><span class="pln">year</span><span class="pun">%%</span><span class="pln">monthnum</span><span class="pun">%%</span><span class="pln">day</span><span class="pun">%</span><span class="pln">
</span></pre>

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

<pre class="ipsCode prettyprint lang-ruby prettyprinted" id="ips_uid_9058_59" style="">
<span class="pun">%</span><span class="pln">year</span><span class="pun">%%</span><span class="pln">monthnum</span><span class="pun">%%</span><span class="pln">day</span><span class="pun">%%</span><span class="pln">hour</span><span class="pun">%.</span><span class="pln">
</span></pre>

<h3>
	تحقق من تركيبة الروابط الدائمة
</h3>

<p>
	طريقة للتحقق إذا كانت المدونة تمتلك تركيبة روابط دائمة هي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_9058_61" style="">
<span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> get_option</span><span class="pun">(</span><span class="str">'permalink_structure'</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 </span><span class="str">'permalinks enabled'</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://wordpress.org/support/article/using-permalinks/" rel="external nofollow">Using Permalinks</a> من موقع <a href="https://wordpress.org/" rel="external nofollow">ووردبريس</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/servers/web/apache/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A7%D8%AA-%D8%B9%D9%85%D9%84-mod_rewrite-%D9%84%D8%A5%D8%B9%D8%A7%D8%AF%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-apache-r338/" rel="">أساسيّات عمل mod_rewrite لإعادة كتابة الروابط على خادوم Apache</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1248/" rel="">كيفية تثبيت ووردبريس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%B9%D8%B4%D8%B1%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%B4%D9%8A%D9%88%D8%B9%D9%8B%D8%A7-%D9%84%D8%AF%D9%89-%D9%85%D8%B7%D9%88%D8%B1%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r429/" rel="">الأخطاء العشرة الأكثر شيوعًا لدى مطوري ووردبريس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1343</guid><pubDate>Sat, 09 Oct 2021 15:00:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x646;&#x642;&#x64A;&#x62D; &#x623;&#x62E;&#x637;&#x627;&#x621; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x628;&#x62E;&#x637;&#x648;&#x627;&#x62A; &#x627;&#x62D;&#x62A;&#x631;&#x627;&#x641;&#x64A;&#x629;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D9%82%D9%8A%D8%AD-%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%A8%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%A7%D8%AD%D8%AA%D8%B1%D8%A7%D9%81%D9%8A%D8%A9-r1275/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_07/60ffb591b6e1e_-----.png.3e9a47974ccdcffd4a1f7e08058e7b76.png" /></p>

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

<ol>
<li>
		كيفية كتابة رسائل الخطأ في سجل وتحديد مسار هذا السجل.
	</li>
	<li>
		تعلُّم كيفية استخدام ملفات جافاسكربت و CSS للنظام بهدف تنقيح الأخطاء.
	</li>
	<li>
		كيفية تسجيل جميع استعلامات SQL التي تعمل في الصفحة.
	</li>
	<li>
		التعرف على بعض الإضافات الممكن أن تُساعد في عملية تنقيح الأخطاء.
	</li>
</ol>
<h2>
	كتابة رسائل الأخطاء في ملف التسجيل
</h2>

<p>
	تبدأ عملية تنقيح الأخطاء بالتوجُّه إلى ملف <code>wp-config.php</code> في مسار تثبيت ووردبريس وتفعيل نمط تنقيح الأخطاء.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_11" style="">
<span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	عند تغيير هذا الثابت 'WP_DEBUG' من <code>false</code> إلى <code>true</code>، فسوف تظهر جميع أخطاء وملاحظات وتحذيرات PHP على الشاشة، ويُنصح بتفعيل هذه الخاصية في مرحلة التطوير كونها تُظهر أخطاء الشيفرة البرمجية في هذه المرحلة، مما يُساعد على إصلاحها مباشرةً؛ ولكن إذا كان المطلوب التحقق من وجود أخطاء في موقعٍ نشطٍ وله مستخدمون، فإن إظهار هذه الأخطاء لهم هو آخر ما تريد عمله وذلك لسببين، أولهما أنها تُسرب معلومات عن الموقع، والثاني أنها تُصّعب عملية تصفُّح الموقع على المستخدم. وبالتالي للاطلاع على الأخطاء في موقعٍ انتهى من مرحلة التطوير وأصبح في حالة عمل، فلا بد من وجود وسيلةٍ لتحقيق ذلك دون مشاركتها مع زوار الموقع وهنا يأتي دور الثوابت الأخرى الممكن استخدامها في ملف <code>wp-config.php</code>.
</p>

<h3>
	ثوابت إظهار الأخطاء والتحذيرات
</h3>

<p>
	يتضمن توثيق ووردبريس حلًا لهذه المشكلة تحت عنوان <a data-ss1628957078="1" data-ss1628957507="1" href="https://wordpress.org/support/article/debugging-in-wordpress/" rel="external nofollow">How to debug WordPress</a>، حيث يمكن كتابة الأخطاء الناتجة في ملف التسجيل بعد تفعيل الثابت <code>WP_DEBUG</code> ثم الثابت <code>WP_DEBUG_LOG</code>، إذ يُنشئ ووردبريس تلقائيًا هذا الملف حالما يظهر خطأ أو تحذير أو ملاحظة في PHP؛ أما بالنسبة لموقع الملف فسوف يكون ضمن مجلد <code>wp-content</code>.
</p>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_13" style="">
<span class="com">// Disable display of errors and warnings</span><span class="pln">
define</span><span class="pun">(</span><span class="str">'WP_DEBUG_DISPLAY'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">);</span></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_15" style="">
<span class="com">// Enable WP_DEBUG mode</span><span class="pln">
define</span><span class="pun">(</span><span class="str">'WP_DEBUG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Enable Debug logging to the /wp-content/debug.log file</span><span class="pln">
define</span><span class="pun">(</span><span class="str">'WP_DEBUG_LOG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Disable display of errors and warnings </span><span class="pln">
define</span><span class="pun">(</span><span class="str">'WP_DEBUG_DISPLAY'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">);</span></pre>

<p>
	سوف نحتاج في بعض الأحيان إلى إضافة التعليمة التالية لمنع الأخطاء من الظهور على الشاشة، وذلك إذا كان ملف <code>php.ini</code> ضمن الخادم يحتوي على الثابت <code>display_errors</code> وقيمته 1.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_17" style="">
<span class="lit">@ini_set</span><span class="pun">(</span><span class="str">'display_errors'</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span></pre>

<h3>
	عدم الاستفادة من استخدام تعليمة تحديد الخطأ أو كتابة رسائلك الخاصة في ملف التسجيل
</h3>

<p>
	تُعد تعليمتا <code>echo</code> و<code>var_dump</code> من أكثر الطرق استخدامًا لتحديد موقع خطأ ضمن شيفرة برمجية، ولكن في بعض الأحيان لا يُمكن استخدام هاتين التعليمتين، فمثلًا عند إنشاء أداة Widget وحصول مشكلةٍ ما خلال عملية الحفظ، فلن تُظهر تعليمة <code>echo</code> شيئًاعلى الشاشة، وذلك لأن عملية الحفظ تستخدم AJAX لتحديث الجزئية التي تريد استخدام <code>echo</code> فيها، وفي أحيانٍ أخرى يكون السبب لعدم عمل <code>echo</code> غير معروف حيث يظهر خطأ PHP ليحول دون تحديث الصفحة وظهور محتوى تعليمة <code>echo</code>، وفي كلا الحالتين السابقتين، ستكون النتيجة واحدة ويجب استخدام طريقةٍ أخرى لتتبع المشكلة وعرض قيم المتغيرات المُحتمل أن تكون سببًا الخطأ.
</p>

<p>
	يكمن الحل في تفعيل <code>wp-debug</code> و<code>wp_debug_log</code> ضمن ملف <code>wp-config.php</code> وإسناد قيمة <code>true</code> لكليهما، فهذا يُنشئ سجلًا ضمن مجلد <code>wp-content</code> يتضمن أخطاء وملاحظات وتحذيرات PHP.
</p>

<h3>
	تسجيل المتغيرات في سجل الأخطاء نيابة عن استخدام تعليمة تحديد الخطأ
</h3>

<p>
	الآن وبدلًا من تسجيل المتغيرات على الشاشة باستخدام التعليمة <code>echo</code>، سوف نُسجلها ضمن سجل الأخطاء باستخدام التعليمة <code>error_log</code>، لذلك بدلًا من كتابة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_19" style="">
<span class="pln">echo </span><span class="str">"I'm on line 38"</span><span class="pun">;</span></pre>

<p>
	عليك كتابة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_23" style="">
<span class="pln">error_log</span><span class="pun">(</span><span class="str">"I'm on line 38"</span><span class="pun">);</span></pre>

<h3>
	كيفية تسجيل المتغيرات في سجل الأخطاء نيابة عن التحقق من قيمها
</h3>

<p>
	من أجل التحقق من قيم متغيراتٍ محددة كما تفعل الدالة <code>var_dump</code> وحفظ القيمة الناتجة ضمن سجل الأخطاء، وبفرض عدم وجود سلسلة خاطئة أو حتى أية سلسلةٍ على الإطلاق، فلا بد من استخدام التعليمات التالية:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_21" style="">
<span class="pln">$x </span><span class="pun">=</span><span class="pln"> </span><span class="str">"My string"</span><span class="pun">;</span><span class="pln">
</span><span class="com">// Dump x, or any other variable for that matter</span><span class="pln">
ob_start</span><span class="pun">();</span><span class="pln">
var_dump</span><span class="pun">(</span><span class="pln">$x</span><span class="pun">);</span><span class="pln">
$contents </span><span class="pun">=</span><span class="pln"> ob_get_contents</span><span class="pun">();</span><span class="pln">
ob_end_clean</span><span class="pun">();</span><span class="pln">
error_log</span><span class="pun">(</span><span class="pln">$contents</span><span class="pun">);</span></pre>

<h3>
	تحويل تعليمات تنقيح الأخطاء السابقة إلى دالة
</h3>

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

<h3>
	مدخلات إضافية لتعليمة تسجيل الأخطاء
</h3>

<p>
	تقبل تعليمة <code>error_log</code> ثلاث مُدخلات إضافية اختيارية، ويُمكن استخدام المُدخلة الثانية <code>message_type$</code> مع الثالثة <code>destination$</code> وفي بعض الأحيان مع الرابعة <code>extra_headers$</code> لتعريف موقعٍ إضافي لتسجيل الأخطاء ضمن سجل.
</p>

<h2>
	المزيد من إمكانيات تنقيح الأخطاء
</h2>

<p>
	توجد المزيد من التعليمات الممكن استخدامها ضمن ملف <code>wp-config.php</code> للمساعدة في عملية تتبع وتنقيحالأخطاء في ووردبريس.
</p>

<h3>
	إمكانية تنقيح الخطأ في السكربت
</h3>

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

<p>
	يُحمِّل ووردبريس ملفاته بفعالية فهو يستخدم نسخًا مُصغرة من ملفات جافا سكريبت وCSS وهذا ما يزيد من صعوبة تنقيح الأخطاء المرتبطة بهذه الملفات، ولكن لحسن الحظ فإن ووردبريس مُجّهز بصورةٍ جيدة لمثل هذه الحالات، حيث تتضمن ملفاته نُسخًا غير مصغرة من ملفات جافا سكريبت وCSS، ومن أجل إجبار ووردبريس على استخدامها؛ يجب إعطاء قيمة <code>true</code> للثابت <code>SCRIPT_DEBUG</code> ضمن ملف <code>wp-config.php</code>.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_28" style="">
<span class="pln">define</span><span class="pun">(</span><span class="str">'SCRIPT_DEBUG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="72645" data-ss1628957078="1" data-ss1628957507="1" href="https://academy.hsoub.com/uploads/monthly_2021_07/js-and-css-core.jpg.c0d26cda2fd21f955e0212e244e9f4ce.jpg" rel=""><img alt="js-and-css-core.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="72645" data-unique="uykjg1m1f" src="https://academy.hsoub.com/uploads/monthly_2021_07/js-and-css-core.thumb.jpg.d39a853639538840aa79751ed4feb39b.jpg" style=""></a>
</p>

<h3>
	حفظ الاستعلامات
</h3>

<p>
	سوف نحتاج أيضًا لتنقيح أخطاء قاعدة البيانات عند استغراق أحد الاستعلامات وقتًا أكثر من اللازم أو عندما يُعيد الاستعلام نتائجًا خاطئةً أو لأسبابٍ أخرى. أولى خطوات حل المشاكل السابقة هي إلقاء نظرةٍ على الاستعلامات التي تعمل عند تحميل صفحةٍ ما، لذلك من المُفيد تفعيل الثابت <code>SAVEQUERIES</code> ضمن ملف <code>wp-config.php</code> في مثل هذه الحالات لتُحفظ جميع الاستعلامات، إضافةً إلى معلوماتٍ عن مدة تنفيذها والدالة التي استدعتها، وتُحفظ جميع هذه المعلومات في متغيرٍ شاملٍ هو <code>wpdb-&gt;queries$</code>.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1637_31" style="">
<span class="pln">define</span><span class="pun">(</span><span class="str">'SAVEQUERIES'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span></pre>

<h2>
	تنقيح الأخطاء باستخدام الإضافات
</h2>

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

<h3>
	Query Monitor
</h3>

<p>
	الإضافة <a data-ss1628957078="1" data-ss1628957507="1" href="https://wordpress.org/plugins/query-monitor/" rel="external nofollow">Query Monitor</a> هي مجموعة أدوات تطوير ووردبريس تسمح تنقيح أخطاء استعلامات قاعدة البيانات وأخطاء PHP والخطّافات والإجراءات وكتل محرر الكتل والنصوص البرمجية، إلى جانب نداءات HTTP <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> ونداءات AJAX ونداءات REST <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> وغير ذلك، حيث تعرض معلوماتها بعد تجميعها ضمن مجموعاتٍ خاصة بكل إضافة أو قالب، أو حسب الدوال المسؤولة عنها، وتُضيف قائمة شريط أدواتٍ للمدير تعرض ضمنه ملخصًا عن الصفحة الحالية مع معلومات تنقيح الأخطاء الكاملة الموضحة في اللوحات.
</p>

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

<h3>
	Debug Bar
</h3>

<p>
	تضيف الإضافة <a data-ss1628957078="1" data-ss1628957507="1" href="https://wordpress.org/plugins/debug-bar/" rel="external nofollow">Debug Bar</a> قائمةً لتنقيح الأخطاء ضمن شريط المدير الذي يعرض الاستعلامات، والذاكرة المخبئية cache، ومعلومات مفيدة أخرى. تتبِّع هذه الإضافة عند تفعيل <code>WP_DEBUG</code> تحذيرات وملاحظات PHP لتسهيل الوصول إلى الأخطاء، كما أنها تتبِّع وتعرض الاستعلامات عند تفعيل <code>SAVEQUERIES</code>.
</p>

<p>
	تمتلك هذه الإضافة أكثر من 3000 تثبيتٍ نشطٍ وتقييمًا بأربع نجوم اعتمادًا على 59 مراجعة، كما أنها طُورت من قِبل أكثر من 10 مساهمين ومطورين.
</p>

<h3>
	Debug This
</h3>

<p>
	توفر الإضافة <a data-ss1628957078="1" data-ss1628957507="1" href="https://wordpress.org/plugins/debug-this/" rel="external nofollow">Debug This</a> معلوماتٍ عن تثبيت ووردبريس من خلال شريط المدير من خلال الكائن الحالي <code>WP_Query</code> ومعلومات المدونة وخياراتها والملفات التي عولجت ضمن HTML (الصور وCSS وملفات جافا سكربت) وأحجام الصور والمتغيرات الشاملة والثوابت والقوائم وإحصاءات الذاكرة المخبئية cache للكائن، إلى جانب الإضافات والإضافات التي يجب استخدامها والاستعلامات ومعلومات الخادم وPHP ومرفقات المنشور وأنواع المنشورات والسكربتات والأنماط المُدرجة ضمن قائمة الانتظار، وكذا الأشرطة الجانبية والأدوات وغيرها.
</p>

<p>
	يُمكن تفعيل إضافاتٍ لها باستخدام شيفرةٍ برمجية يمكن الاطلاع عليها في صفحة الإضافة ضمن مستودع ووردبريس.
</p>

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

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

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

<p>
	ترجمة -وبتصرّف- للمقال <a data-ss1628957078="1" data-ss1628957507="1" href="https://wpshout.com/how-to-debug-wordpress-beyond-the-basics/" rel="external nofollow">How to Debug WordPress Beyond the Basics</a> لصاحبه Lea Cohen.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a data-ss1628957078="1" data-ss1628957507="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%B3%D8%A8%D8%A8%D9%87%D8%A7-%D8%A7%D9%84%D8%A7%D8%B9%D8%AA%D9%85%D8%A7%D8%AF-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D8%AF-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D9%86%D9%81%D8%B3-%D9%8A%D8%AC%D8%A8-%D8%AA%D8%AC%D9%86%D8%A8%D9%87%D8%A7-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r147/" rel="">أخطاء سببها الاعتماد الزائد على النفس يجب تجنبها في ووردبريس</a>
	</li>
	<li>
		<a data-ss1628957078="1" data-ss1628957507="1" href="https://academy.hsoub.com/programming/php/wordpress/%D9%85%D8%A7-%D8%A7%D9%84%D8%B0%D9%8A-%D8%AA%D8%AD%D8%AA%D8%A7%D8%AC-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D9%82%D8%A8%D9%84-%D8%A7%D9%84%D8%B4%D8%B1%D9%88%D8%B9-%D9%81%D9%8A-%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%B9%D9%84%D9%89-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r325/" rel="">ما الذي تحتاج معرفته قبل الشروع في التطوير على ووردبريس</a>
	</li>
	<li>
		<a data-ss1628957078="1" data-ss1628957507="1" href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%A3-%D8%B5%D9%81%D8%AD%D8%A9-%D8%AE%D8%B7%D8%A3-404-%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r626/" rel="">كيف تنشأ صفحة خطأ 404 مخصصة في ووردبريس</a>
	</li>
	<li>
		<a data-ss1628957078="1" data-ss1628957507="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D9%85%D9%84%D9%81-wp-configphp-%D9%84%D8%B6%D8%A8%D8%B7-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1252/" rel="">تعديل ملف wp-config.php لضبط إعدادات ووردبريس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1275</guid><pubDate>Wed, 28 Jul 2021 15:00:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x646;&#x634;&#x627;&#x621; &#x645;&#x642;&#x62A;&#x637;&#x641; &#x645;&#x646; &#x645;&#x646;&#x634;&#x648;&#x631; &#x648;&#x636;&#x628;&#x637;&#x647; &#x628;&#x639;&#x62F;&#x62F; &#x627;&#x644;&#x623;&#x62D;&#x631;&#x641; &#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%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%85%D9%82%D8%AA%D8%B7%D9%81-%D9%85%D9%86-%D9%85%D9%86%D8%B4%D9%88%D8%B1-%D9%88%D8%B6%D8%A8%D8%B7%D9%87-%D8%A8%D8%B9%D8%AF%D8%AF-%D8%A7%D9%84%D8%A3%D8%AD%D8%B1%D9%81-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1274/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_07/60ffb249ccaa7_----------.png.f4888d7fe18ea4a04c50eb9c18c3c6a0.png" /></p>

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

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

<h2>
	الحاجة إلى مقتطف بطول ثابت من المحارف
</h2>

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

<p>
	يمتلك ووردبريس دالةً مفيدةً هي <code>the_excerpt()‎</code> تعرض مُقتطفًا للمنشور، حيث تعمل هذه الدالة بذكاء، فهي تتأكد أولًا مما إذا كان المنشور يتضمن مقتطفًا لعرضه، وفي حال عدم تضمنه فستستخرجُ أول بضع كلماتٍ من محتوى المنشور لتحل محل المُقتطف، والطول الافتراضي للمُقتطف هو 55 كلمة، ويُمكن تغيير هذا الطول باستخدام مُرشح <code>excerpt_length</code>.
</p>

<p>
	يمكن من الناحية النظرية استخدام الدالة <code>the_excerpt()‎</code> لتحديد طول المٌقتطف، ولكن تبين بعد التجربة أنها غير كافية لأنّ الكلمات وحدة قياسٍ غير دقيقة، فهي تتفاوت بالطول ولا بد من دقةٍ أكبر في تحديد الطول، ولذلك يجب استخدام المحارف كما تُدعى في لغة البرمجة أو الحروف في لغتنا العربية لتعيين طول المقتطف.
</p>

<p>
	يشرح هذا المقال دالةً تستخدم محتوى المنشور (وليس المُقتطف) من أجل استخراج العدد المرغوب من المحارف، حيث سيتناول جميع أجزاء هذه الدالة بما فيها من مكونات، مع الانتباه إلى أنّ عملية استخراج المحارف ليست عملية تعدادٍ للمحارف فقط، إذ يُمكن أن يتضمن محتوى المنشور عناصر أخرى ضمنه مثل وسوم HTML أو صورًا أو أكوادًا قصيرة، ويجب الأخذ بالحسبان عند عدّ المحارف تلك المحارف المكتوبة بشيفرة مغايرة لشيفرة ASCII مثل ترميز UTF-8.
</p>

<h2>
	إزالة الوسوم والأكواد القصيرة الأسطر والفراغات
</h2>

<p>
	يجب إزالة جميع وسوم HTML بالخطوة الأولى، وهذا سوف يؤدي إلى إزالة وسم <code>img</code> ووسم التعليق، لذلك سوف تكون التعليمة الأولى في الدالة هي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8078_10" style="">
<span class="pln">$content </span><span class="pun">=</span><span class="pln"> strip_tags</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">);</span></pre>

<p>
	أصبح المحتوى الآن خاليًا من وسوم HTML، ولكن ما تزال هناك الكثير من العناصر التي لا نحتاجها ضمن المُقتطف، مثل الأكواد القصيرة لأن وظيفة المٌقتطف هي عرض نص فقط ولا حاجة للأكواد القصيرة ضمنه حتى لو كان مضمونها نصًا، حيث لن يكون لها معنًى إلا عند تحليلها والأفضل التخلص منها. لن نحتاج إلى كتابة دالةٍ جديدة لفعل ذلك لأن ووردبريس يمتلك دالة <code>strip_shortcodes()‎</code> وظيفتها إزالة الأكواد القصيرة.
</p>

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

<h2>
	عد المحارف والحفاظ على كلمة كاملة
</h2>

<p>
	لقد حصلنا الآن على نصٍ بدون أي عناصر أخرى، وبقي علينا أمران هما استخراج عدد المحارف المطلوب والانتباه إلى أنّ الكلمة الأخيرة من المقتطف غير مقسومة. يمكن عدّ المحارف باستخدام إحدى الدالتين <code>strpos()‎</code> أو<code>substr()‎</code>، لكن عند تجربتهما على موقعٍ لا يستخدم ترميز ASCII، فقد حصل شيئان، وأولهما عدم الحصول على نفس عدد المحارف الممرر للدالة، والثاني ظهور أحرفٍ غريبةٍ بعض المرات في نهاية المُقتطف. وبعد البحث اكتشفنا وجود دالةٍ متعددة البايت مكافئةٍ لكل دالة <code>str</code> في PHP وتُستخدم لمعالجة جميع محارف UTF-8، حيث أن طول محارف UTF-8 أكبر من 1 بايت، لذلك كانت دالة <code>strpos()‎</code> تَعُد المحارف بالاعتماد على الطول وهو 1 بايت، ونتج عن ذلك أخطاء عند عَدّ محارف بترميز UTF-8 ليظهر عددٌ أقل من المطلوب، وكان هذا أيضًا السبب وراء ظهور محارفٍ غير معروفة في نهاية المقتطف.
</p>

<p>
	تعتمد <code>substr()‎</code> على طول المحارف لعدّها، والطول المعتمد لديها هو 1 بايت أيضًا، وعند وصولها بالعد لمنتصف محرفٍ معين (طول المحرف 2 بايت في ترميز UTF-8)، فسوف تعرض محرفًا غير معروف، ولذلك يجب استخدام <code>mb_strpos()‎</code> بدلًا من <code>strpos()‎</code>، و<code>mb_substr()‎</code> بدلًا من <code>substr()‎</code>.
</p>

<p>
	تتمثل الخطوة الآن في ترتيب المقتطف بصورةٍ أنيقة بحيث لا تُقتطع أية كلمة من المنتصف، حيث لن يكون عدد المحارف الذي يُمرر مثل معاملٍ في أغلب الأحيان دقيقًا، لكننا نريد أن نبقى قريبين منه قدر الإمكان، لذا سنتحقق أي الحالتين أقرب، وهما القطع قبل أو بعد الكلمة الأخيرة التي نحن في منتصفها. سنستخدم <code>mb_strrpos</code> لإيجاد الفراغ الأخير قبل نهاية المحرف و<code>mb_strpos</code> لإيجاد الفراغ التالي بعد نهاية المحرف، ثم نقيس المسافة بين هذين الفراغين من نهاية المحرف ونعيد المقتطف إلى أقرب فراغ.
</p>

<h2>
	الدالة الكاملة
</h2>

<p>
	تسمح الشيفرة البرمجية التالية بالحفاظ على آخر كلمة من المقتطف دون اقتطاعها مهما كان عدد المحارف المطلوب استخراجه من المحتوى.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8078_12" style="">
<span class="com">/**
* Get a limited part of the content - sans html tags and shortcodes - 
* according to the amount written in $limit. Make sure words aren't cut in the middle
* @param int $limit - number of characters
* @return string - the shortened content
*/</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> wpshout_the_short_content</span><span class="pun">(</span><span class="pln">$limit</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
   $content </span><span class="pun">=</span><span class="pln"> get_the_content</span><span class="pun">();</span><span class="pln">
  </span><span class="com">/* sometimes there are &lt;p&gt; tags that separate the words, and when the tags are removed, 
   * words from adjoining paragraphs stick together.
   * so replace the end &lt;p&gt; tags with space, to ensure unstickinees of words */</span><span class="pln">
   $content </span><span class="pun">=</span><span class="pln"> strip_tags</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">);</span><span class="pln">
   $content </span><span class="pun">=</span><span class="pln"> strip_shortcodes</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">);</span><span class="pln">
   $content </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">preg_replace</span><span class="pun">(</span><span class="str">'/\s+/'</span><span class="pun">,</span><span class="pln"> </span><span class="str">' '</span><span class="pun">,</span><span class="pln"> $content</span><span class="pun">));</span><span class="pln">
   $ret </span><span class="pun">=</span><span class="pln"> $content</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* if the limit is more than the length, this will be returned */</span><span class="pln">
   </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mb_strlen</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&gt;=</span><span class="pln"> $limit</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      $ret </span><span class="pun">=</span><span class="pln"> mb_substr</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> $limit</span><span class="pun">);</span><span class="pln">
     </span><span class="com">// make sure not to cut the words in the middle:</span><span class="pln">
     </span><span class="com">// 1. first check if the substring already ends with a space</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mb_substr</span><span class="pun">(</span><span class="pln">$ret</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </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">
        </span><span class="com">// 2. If it doesn't, find the last space before the end of the string</span><span class="pln">
         $space_pos_in_substr </span><span class="pun">=</span><span class="pln"> mb_strrpos</span><span class="pun">(</span><span class="pln">$ret</span><span class="pun">,</span><span class="pln"> </span><span class="str">' '</span><span class="pun">);</span><span class="pln">
        </span><span class="com">// 3. then find the next space after the end of the string(using the original string)</span><span class="pln">
         $space_pos_in_content </span><span class="pun">=</span><span class="pln"> mb_strpos</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">,</span><span class="pln"> </span><span class="str">' '</span><span class="pun">,</span><span class="pln"> $limit</span><span class="pun">);</span><span class="pln">
        </span><span class="com">// 4. now compare the distance of each space position from the limit</span><span class="pln">
         </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$space_pos_in_content </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> $space_pos_in_content </span><span class="pun">-</span><span class="pln"> $limit </span><span class="pun">&lt;=</span><span class="pln"> $limit </span><span class="pun">-</span><span class="pln"> $space_pos_in_substr</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
           </span><span class="com">/* if the closest space is in the original string, take the substring from there*/</span><span class="pln">
            $ret </span><span class="pun">=</span><span class="pln"> mb_substr</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> $space_pos_in_content</span><span class="pun">);</span><span class="pln">
         </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
           </span><span class="com">// else take the substring from the original string, but with the earlier (space) position</span><span class="pln">
            $ret </span><span class="pun">=</span><span class="pln"> mb_substr</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> $space_pos_in_substr</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">
   </span><span class="kwd">return</span><span class="pln"> $ret </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>

<h2>
	تحديث المنشور بالمقتطف المولد
</h2>

<p>
	يمكن تحديث مُقتطف المنشور ضمن قاعدة البيانات إذا كنا لا تريد للشيفرة البرمجية أن تُولّد المُقتطف في كل مرةٍ يُعرض فيها المنشور، وبالتالي فعندما تعمل الدالة <code>has_excerpt()‎</code> على منشورٍ معين، فسوف تُعيد نتيجةً إيجابيةً وتأخذ المُقتطف مباشرةً من قاعدة البيانات دون المرور بكل ما سبق. ويجب هنا أن يحدث استدعاء للدالّة <code>wp_update_post()‎</code> في نهاية الدالة <code>wpshout_the_short_content()‎</code>، وذلك من أجل تحديث المنشور والتي تحتاج لمُعرّف المنشور ID والمُقتطف.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8078_14" style="">
<span class="kwd">function</span><span class="pln"> wpshout_update_post_excerpt</span><span class="pun">(</span><span class="pln">$new_excerpt</span><span class="pun">){</span><span class="pln">
    $post </span><span class="pun">=</span><span class="pln"> array</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"> get_the_ID</span><span class="pun">(),</span><span class="pln">
        </span><span class="str">'post_excerpt'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $new_excerpt</span><span class="pun">,</span><span class="pln">
    </span><span class="pun">);</span><span class="pln">
    wp_update_post</span><span class="pun">(</span><span class="pln">$post</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	أفضل طريقةٍ لاستدعاء هذه الدالة هي من خلال ربطها مع مُرشح <code>wp_trim_excerpt</code> يولِّد مُقتطفًا من محتوى منشور ووردبريس عن طريق اختصاره إلى 55 كلمة وإضافة "[…]"، وقبل الإنتهاء نستدعي مرشح <code>wp_trim_excerpt</code> للسماح بترشيح النتائج وتوليد سلوك مقتطفٍ خاصٍ بنا.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8078_16" style="">
<span class="kwd">function</span><span class="pln"> wpshout_excerpt</span><span class="pun">(</span><span class="pln"> $text </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> is_admin</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="kwd">return</span><span class="pln"> $text</span><span class="pun">;</span><span class="pln">
    </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"> has_excerpt</span><span class="pun">()</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        $text </span><span class="pun">=</span><span class="pln"> wpshout_the_short_content</span><span class="pun">(</span><span class="lit">200</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    wpshout_update_post_excerpt</span><span class="pun">(</span><span class="pln">$text</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> $text</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="pln"> </span><span class="str">'wp_trim_excerpt'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'wpshout_excerpt'</span><span class="pln"> </span><span class="pun">);</span></pre>

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

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

<p>
	ترجمة -وبتصرّف- للمقال <a data-ss1628956495="1" href="https://wpshout.com/how-to-create-an-excerpt-from-a-post-without-an-excerpt-and-limit-it-by-character-count/" rel="external nofollow">How to Create an Excerpt From a Post Without an Excerpt and Limit It by Character Count</a> لصاحبه Lea Cohen.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a data-ss1628956495="1" href="https://academy.hsoub.com/programming/php/wordpress/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D8%AD%D9%84%D9%82%D8%A9-%D9%88%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%81%D9%8A-%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D9%86%D8%B4%D9%88%D8%B1%D8%A7%D8%AA-r1273/" rel="">فهم الحلقة وطريقة ووردبريس في عرض المنشورات</a>
	</li>
	<li>
		<a data-ss1628956495="1" href="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/" rel="">إنشاء أنواع منشورات مخصصة Custom Post Types في ووردبريس</a>
	</li>
	<li>
		<a data-ss1628956495="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D9%85%D9%84%D9%81-wp-configphp-%D9%84%D8%B6%D8%A8%D8%B7-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1252/" rel="">تعديل ملف wp-config.php لضبط إعدادات ووردبريس</a>
	</li>
	<li>
		<a data-ss1628956495="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1224/" rel="">إدارة الإضافات في ووردبريس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1274</guid><pubDate>Mon, 26 Jul 2021 15:00:00 +0000</pubDate></item><item><title>&#x641;&#x647;&#x645; &#x627;&#x644;&#x62D;&#x644;&#x642;&#x629; The loop &#x648;&#x637;&#x631;&#x64A;&#x642;&#x629; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x641;&#x64A; &#x639;&#x631;&#x636; &#x627;&#x644;&#x645;&#x646;&#x634;&#x648;&#x631;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%81%D9%87%D9%85-%D8%A7%D9%84%D8%AD%D9%84%D9%82%D8%A9-the-loop-%D9%88%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%81%D9%8A-%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D9%86%D8%B4%D9%88%D8%B1%D8%A7%D8%AA-r1273/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_07/60ffae393233d_------.png.2d7636b37d25c9d3855a9f80c86c0c86.png" /></p>
<p>
	يشرح هذا المقال أحد أهم المواضيع المرتبطة بتطوير ووردبريس وهو حلقة ووردبريس WordPress loop وتُدعى أيضًا "The loop"، لذلك يُعَد المحتوى مهمًا جدًا، كما أنه يُمثل دليلًا عمليًا لفهم ووردبريس، حيث تُعَد الحلقة ركنًا أساسيًا في تطوير قوالب ووردبريس، ولهذا يجب التعرف عليها، ولحسن الحظ فهي ليست معقدةً. يهدف المقال هنا إلى توضيح مبدأ عمل الحلقات في ووردبريس ثم الانتقال إلى الشيفرة البرمجية وآلية عملها.
</p>

<h2>
	تعريف الحلقة ببساطة
</h2>

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

<h3>
	حلقة ووردبريس موجودة في ملفات القالب
</h3>

<p>
	تتكون قوالب ووردبريس من ملفات قوالب PHP، وتُحدد هيكلية قوالب ووردبريس ملفات القالب المرتبطة مع كل صفحة، حيث يرتبط ملف <code>page.php</code> مثلًا مع طلبٍ لصفحة "من نحن About"، و<code>home.php</code> مع طلب الصفحة الرئيسية للموقع، بينما يُستخدم ملف <code>index.php</code> احتياطيًا في حال لم يُفعّل الجزء الأعلى من هذه الهرمية.
</p>

<p>
	يجب الغوص في محتوى ملف القالب بعد تحديد أي ملفٍ نريد العمل عليه لإيجاد الحلقة.
</p>

<h3>
	الحلقة هي المسؤولة عن معالجة المنشورات في ووردبريس
</h3>

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

<h3>
	حلقة ووردبريس هي أساس التخصيص في ملفات القالب في ووردبريس
</h3>

<p>
	تُعَد الحلقة المحرك النابض لأي ملف قالب، فهي قابلة للتخصيص وتتغير حسب الملف، ويُعَد تغيير محتوى الحلقة هو الطريقة الرئيسية لتغيير وظيفة ملفات القالب، فقد تريد لصفحة المدونة لديك مثلًأ (والتي يُتحكم بها من قِبل ملف <code>home.php</code> للقالب المُستخدم) عرض مقتطفاتٍ من فقرةٍ واحدةٍ من مقالات المدونة بدلًا من عرض كامل المحتوى، ولتحقيق ذلك سوف تُستخدم الدالة <code>the_excerpt()‎</code> داخل حلقة الملف <code>home.php</code>، وبنفس الوقت ربما نريد لصفحات مقالات المدونة والتي يُتحكم بها من قِبل ملف <code>single.php</code> عرض محتوى المقال كاملًا وليس فقط المقتطف، لذا علينا استخدام الدالة <code>the_content()‎</code> داخل حلقة الملف <code>single.php</code> بدلًا من الدالة <code>the_excerpt()‎</code>.
</p>

<p>
	يتمحور تطوير قوالب ووردبريس حول معرفة هذه التفاصيل والفرق بينها.
</p>

<h3>
	مثال على استخدام حلقة ووردبريس
</h3>

<p>
	تجد في الصورة المُبينة في الأسفل محتوى ملف <code>single.php</code> للقالب الشهير Twenty Fifteen، حيث تشغُل الحلقة مجال السطور (15 وحتى 43)، ولكن أُخفي محتواها كي لا نشغل ذهننا به الآن (أي السطور من 18 إلى 39 مخفية)، مع ملاحظة كيف أن ملف <code>single.php</code> مكونٌ تقريبًا ْمن الحلقة فقط، وبالتالي فهي التي تسمح لملف القالب بعرض محتواه.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="72644" data-ss1628956361="1" href="https://academy.hsoub.com/uploads/monthly_2021_07/001_wordpress_loop_single_php.png.715ef76e36e0c8f368c4bfcafad2d609.png" rel="" data-fileext="png"><img alt="001_wordpress_loop_single_php.png" class="ipsImage ipsImage_thumbnailed" data-fileid="72644" data-unique="3ivjnwe9h" src="https://academy.hsoub.com/uploads/monthly_2021_07/001_wordpress_loop_single_php.png.715ef76e36e0c8f368c4bfcafad2d609.png"></a>
</p>

<p>
	بعد رؤية توظيف الحلقة ضمن ملفٍ حقيقي، لنبدأ عملية التشريح الوظيفي لها في أي قالب.
</p>

<h3>
	النسخة البسيطة من الحلقة
</h3>

<p>
	سنلقي نظرةً هنا على الشيفرة البرمجية PHP للحلقة وبنيتها الأساسية، حيث يُمكن كتابة شيفرة الحلقة بطريقتين وكلتاهما تؤديان الوظيفة ذاتها.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_4903_11" style=""><span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">/* Environment: We're inside a theme template file in the WordPress template hierarchy */</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> </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"> </span><span class="pun">{</span><span class="pln"> </span><span class="com">// (1)</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </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"> </span><span class="pun">{</span><span class="pln"> </span><span class="com">// (2)</span><span class="pln">
        the_post</span><span class="pun">();</span><span class="pln">  </span><span class="com">// (3)</span><span class="pln">

       </span><span class="com">// (Loop contents will go here)  (4)</span><span class="pln">

    </span><span class="pun">}</span><span class="pln"> </span><span class="com">// end while  (5)</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="com">// end if  (6)</span></pre>

<p>
	أو
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_4903_13" style=""><span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">/* Environment: We're inside a theme template file in the WordPress template hierarchy */</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> </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"> </span><span class="pun">:</span><span class="pln"> </span><span class="com">// (1)</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </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"> </span><span class="pun">:</span><span class="pln">  </span><span class="com">// (2)</span><span class="pln">
        the_post</span><span class="pun">();</span><span class="pln">   </span><span class="com">// (3)</span><span class="pln">

       </span><span class="com">// (Loop contents will go here)  (4)</span><span class="pln">

    endwhile</span><span class="pun">;</span><span class="pln"> </span><span class="com">// (5)</span><span class="pln">
endif</span><span class="pun">;</span><span class="pln">  </span><span class="com">// (6)</span></pre>

<p>
	لا داعي للارتباك بفكرة وجود طريقتين لكتابة الحلقة، فما هي إلا خياراتٌ مختلفةٌ توفرها لغة البرمجة PHP ولها المعنى ذاته. وستُسخدم الطريقة الثانية في الأقسام الآتية من المقال.
</p>

<h2>
	كيفية عمل الحلقة في ووردبريس
</h2>

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

<p>
	تعمل الحلقة وفقًا للخطوات التالية المُرقمة ضمن الشيفرة:
</p>

<ol>
	<li>
		<p>
			تسأل الحلقة بيئة ووردبريس الرئيسية عما إذا كانت هناك أي منشوراتٍ لمعالجتها من خلال دالةٍ تُدعى <code>have_posts()‎</code>، حيث تُعيد هذه الدالة إما <code>true</code> في حال وُجد منشورات جاهزةٍ للمعالجة أو <code>false</code> في حال عدم وجود منشورات؛ وإذا كانت النتيجة المُعادة من قِبل الدالة <code>have_posts()‎</code> ضمن عبارة <code>if</code> هي <code>true</code>، فسوف تعمل أجزاء الحلقة؛ أما إذا كانت <code>false</code>، فسوف يتجاوز معالج PHP الحلقة لأنها لا تحتوي على شيء.
		</p>
	</li>
	<li>
		<p>
			سوف تُنفّذ تعليمة <code>(()while ( have_posts</code> عند تحقق شرط عبارة <code>if</code>، والذي يعني وجود منشورات يجب معالجتها ضمن الحلقة، وفعليًا هذا هو السطر الذي تبدأ عنده الحلقة، وهو عبارةٌ عن حلقة <code>while</code> في لغة PHP تُعيد تنفيذ التعليمات داخلها طالما أن شرطها مُحقق، أي وبمعنىً آخر "طالما توجد منشورات لمعالجتها ادخل الحلقة"، وبالتالي ستُنفذ الحلقة الشيفرة البرمجية الموجودة داخلها مرةً لكل منشور وتستمر هذه العملية حتى تنتهي المنشورات وتنتقل الصفحة لتنفيذ تعليمات PHP التي تلي الحلقة في نفس ملف القالب.
		</p>
	</li>
	<li>
		<p>
			نحن الآن داخل حلقة <code>while</code> المُشار إليها بالفقرة السابقة وتدل تعليمة <code>the_post()‎</code> على أنه "طالما لدينا منشورٌ للعمل عليه، فيجب أن نُضيف المنشور الحالي للرتل"، حيث تعمل هذه الدالة على إضافة المنشور للرتل أي أنها تُجهّز المنشور التالي لتُطبّق عليه عمليات ووردبريس المتوفرة ضمن الحلقة، ويجب أن تكون هذه الدالة موجودةً ضمن الحلقة.
		</p>
	</li>
	<li>
		<p>
			كتابة محتوى الحلقة، حيث يُعَد هذا القسم الجزء الرئيسي للحلقة وهنا نستطيع الإبداع وكتابة الشيفرة البرمجية التي سوف تُطبق على كل منشور، وهو فارغٌ الآن لأنه القسم الذي علينا كتابته بأنفسنا، وسنتوسع في شرح هذا القسم في الفقرات القادمة من هذا المقال.
		</p>
	</li>
	<li>
		<p>
			نهاية الحلقة من خلال كتابة تعليمة <code>endwhile;‎</code> وهذه هي طريقة PHP للقول "انتهينا من حلقة <code>while</code>" وكل التعليمات المتواجدة بين <code>while() :‎</code> و<code>endwhile;‎</code> هي تعليماتٌ تابعةٌ للحلقة <code>while</code>، وأي شيءٍ بعدها هو خارج هذه الحلقة وسوف يُنفذ لمرةٍ واحدة بعد الانتهاء من تنفيذ حلقة <code>while</code>.
		</p>
	</li>
	<li>
		<p>
			نهاية الشرط من خلال تعليمة <code>endif;‎</code>، وهذه هي طريقة PHP للقول "انتهينا من عبارة <code>if</code> التي كنا داخلها"، حيث تُنفذ جميع التعليمات المتواجدة بين <code>if():‎</code> و<code>endif;‎</code>لمرةٍ واحدة (طالما أنها ليست داخل حلقة) عند تحقق شرط عبارة <code>if</code>، ولن تتأثر أي تعليماتٍ بعدها بالشرط الخاص بها، وسوف تُنفذ مهما كانت نتيجة الشرط.
		</p>
	</li>
</ol>

<h2>
	مثال على عمل حلقة
</h2>

<p>
	سنطلّع الآن على مثالٍ لحلقةٍ تُنفّذ وظيفةً ما، حيث أصبح من الأسهل فهم ما يجري بعد الاطلاع على أجزاء الحلقة وعملها.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_4903_15" style=""><span class="pun">&lt;?</span><span class="pln">php 
</span><span class="com">/* Environment: We're inside a theme template file in the WordPress template hierarchy */</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> </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"> </span><span class="pun">:</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </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"> </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;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"full-article"</span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;h2&gt;</span><span class="pun">&lt;?</span><span class="pln">php the_title</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
            </span><span class="pun">&lt;?</span><span class="pln">php the_excerpt</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
        </span><span class="tag">&lt;/article&gt;</span><span class="pln">

    </span><span class="pun">&lt;?</span><span class="pln">php endwhile</span><span class="pun">;</span><span class="pln">
endif</span><span class="pun">;</span></pre>

<h3>
	خرج هذه الحلقة في قوالب ووردبريس
</h3>

<p>
	تُنشئ هذه الحلقة من أجل كل منشورٍ ضمن المجموعة وسمًا <code>&lt;article&gt;</code>، حيث تعرض داخله العنوان أولًا ثم مُقتطفًا قصيرًا (افتراضيًا أول 55 كلمة يتبعها الرمز <code>[...]</code>) للمنشور الحالي.
</p>

<p>
	سوف تعرض الحلقة السابقة المُخرج التالي بعد استخدام عدة منشوراتٍ من ضمن الموقع الذي نجربها عليه.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_4903_17" style=""><span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"full-article"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;h2&gt;</span><span class="pln">What Your Minimum Viable Product Should Be Measuring</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">In our last article we introduced you to the idea of the Minimum Viable Product (<abbr title="Minimum Viable Product | المنتج الفعال القاعدي">MVP</abbr>), and covered some of the internal challenges that often arise when you prepare to share a beta version of your idea. An <abbr title="Minimum Viable Product | المنتج الفعال القاعدي">MVP</abbr> isn't just a quick, cheap version of your product that you're releasing because it's easy. On […]</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/article&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">"full-article"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;h2&gt;</span><span class="pln">Starting Small: Creating a Minimum Viable Product</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">A common mistake entrepreneurs make is to start with a very specific idea and grind as hard as possible to make it work. This might work out great—but as many entrepreneurs learn, it's far too easy to rush through, or entirely overlook, the process of refining our initial ideas into something people truly want. Not […]</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/article&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">"full-article"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;h2&gt;</span><span class="pln">How to Plan a Successful Web Project</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">It's too easy to plan out a web project in terms of technologies rather than solutions. Too many web projects don't meet their goals. The project could be the wrong solution for the right goal, the right solution for the wrong goal—or, perhaps worst of all, a shiny solution for no goal. The problem is […]</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/article&gt;</span><span class="pln">

// (And so on for many more articles)</span></pre>

<h3>
	أنماط علينا ملاحظتها في الحلقة
</h3>

<p>
	يجب الانتباه لأمرين اثنين في المثال السابق: كيفية الانتقال بين وسوم HTML والصيغ المُستخدمة في PHP، ولا بد من الإنتباه إلى أن أي شيءٍ ليس ضمن <code>&lt;‎?php ?‎&gt;</code> فهو وسم HTML فقط، وفي مثالنا السابق هذه الوسوم كانت <code>&lt;h2&gt;</code> و<code>&lt;article&gt;</code>، حيث تُطبع هذه الوسوم مبُاشرةً في المتصفح في كل مرةٍ تمر فيها الحلقة على منشورٍ جديد. الجزء الحقيقي والعميق المُتعلقان بووردبريس، وهما وسما PHP المُستخدمان: الوسم الأول هو <code>the_title()‎</code> والذي يطبع عنوان المقال الحالي في كل مرةٍ يُستخدم فيها ضمن الحلقة؛ أما الوسم الثاني فهو <code>the_excerpt()‎</code> ويطبع مُقتطفًا من نفس المقال.
</p>

<p>
	نستطيع إنشاء قالبٍ واستخدام ملفٍ واحدٍ ضمنه وهو <code>index.php</code>، وكذا استخدام الحلقة السابقة ضمنه لتعرض الصفحة الرئيسية للموقع عناوين ومقتطفات أحدث المنشورات ضمنه (سواءٌ كان مقالًا أو صفحةً).
</p>

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

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

<p>
	ترجمة -وبتصرّف- للمقال <a data-ss1628956361="1" href="https://wpshout.com/the-loop-wordpress/" rel="external nofollow">Understanding The Loop: WordPress’s Way of Showing Posts</a> لصاحبه David Hayes.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a data-ss1628956361="1" href="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/" rel="">إنشاء أنواع منشورات مخصصة Custom Post Types في ووردبريس</a>
	</li>
	<li>
		<a data-ss1628956361="1" href="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/" rel="">إنشاء أنواع التصنيفات Taxonomies والحقول Fields في ووردبريس</a>
	</li>
	<li>
		<a data-ss1628956361="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AE%D9%85%D8%B3-%D8%B7%D8%B1%D9%82-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r144/" rel="">خمس طرق لإنشاء استعلامات مخصصة في ووردبريس</a>
	</li>
	<li>
		<a data-ss1628956361="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D8%AA%D8%B9%D9%84%D9%85-php-r582/" rel="">تطوير ووردبريس للمبتدئين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/php/" rel="">تعلم PHP</a>
	</li>
	<li>
		<a data-ss1628956361="1" href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r662/" rel="">تعلم البرمجة</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1273</guid><pubDate>Sat, 24 Jul 2021 15:00:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x62F;&#x64A;&#x644; &#x645;&#x644;&#x641; wp-config.php &#x644;&#x636;&#x628;&#x637; &#x625;&#x639;&#x62F;&#x627;&#x62F;&#x627;&#x62A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D9%85%D9%84%D9%81-wp-configphp-%D9%84%D8%B6%D8%A8%D8%B7-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1252/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_06/60d6cf5519345_--wp-config.png.58862231dfea6bebd39db6104001a784.png" /></p>
<p>
	يُعَد ملف wp-config.php أحد أهم ملفات إعدادات ووردبريس، وهو متواجد في مسار الجذر الرئيسي لملفات ووردبريس، كما يتضمن المعلومات الأساسية لتشغيل موقعك مثل معلومات الاتصال بقاعدة البيانات.
</p>

<p>
	لن تجد ملف wp-config.php عند تنزيل ملف ووردبريس المضغوط لأول مرة، ولكنه سيُنشأ فور تثبيت ووردبريس بالاعتماد على المعلومات التي تُقدمها في خطوات التثبيت (اسم قاعدة البيانات واسم مستخدم قاعدة البيانات وكلمة المرور الخاصة به).
</p>

<p>
	تستطيع إنشاء ملف wp-config.php يدويًا باستخدام الملف wp-config-sample.php، والذي تجده ضمن ملفات تثبيت ووردبريس عند فك ضغطه (ضمن المسار الرئيسي لملفات ووردبريس)، وبعد الانتهاء من تعديل محتوى الملف، عليك حفظه باسم wp-config.php.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: يجب عليك الانتباه إلى أهمية ترتيب محتويات ملف wp-config-sample.php، وقد ينتج عن إعادة ترتيب هذه المحتويات في ملف wp-config.php أخطاءٌ ضمن الموقع.
	</p>
</blockquote>

<p>
	تحتاج إلى المعلومات التالية لتعديل ملف wp-config.php أثناء التثبيت:
</p>

<ul>
	<li>
		اسم قاعدة البيانات التي سيستخدمها ووردبريس.
	</li>
	<li>
		اسم مستخدِم قاعدة البيانات للوصول لها.
	</li>
	<li>
		كلمة مرور قاعدة البيانات المربوطة مع اسم المستخدم للوصول لها.
	</li>
	<li>
		مضيف قاعدة البيانات، أي اسم مضيف خادم قاعدة البيانات. ومن الممكن أن تحتاج أيضًا إلى رقم منفذ أو مسار ملف مقبس يونكس وربما تحتاج إلى Pipe أيضًا.
	</li>
</ul>

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

<h2>
	ضبط إعدادات قاعدة البيانات
</h2>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة هامة</strong>: امتنع عن استخدام معالج نصوص مثل مايكروسوفت وورد لتعديل ملفات ووردبريس.
	</p>
</blockquote>

<p>
	حدد موقع ملف wp-config-sample.php ضمن مسار تثبيت ووردبريس الرئيسي وافتحه ضمن محرر نصوص.
</p>

<h3>
	ملف wp-config-sample.php الافتراضي
</h3>

<p>
	فيما يلي مثال عن ملف <a data-ss1625063328="1" href="https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-config-sample.php#L0" rel="external nofollow">wp-config-sample.php</a> الافتراضي، حيث أن القيم المستخدمة هي مجرد أمثلة لتعريفك ما يجب فعله.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_6" style=""><span class="com">// ** MySQL settings - You can get this info from your web host ** //</span><span class="pln">
</span><span class="com">/** The name of the database for WordPress */</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_NAME'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'database_name_here'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="com">/** MySQL database username */</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_USER'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'username_here'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="com">/** MySQL database password */</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_PASSWORD'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'password_here'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="com">/** MySQL hostname */</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_HOST'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'localhost'</span><span class="pln"> </span><span class="pun">);</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: يُعَد النص داخل /**/ <a data-ss1625063328="1" href="http://www.php.net/manual/en/language.basic-syntax.comments.php" rel="external nofollow">تعليقات</a> لتقديم معلومات لا غير.
	</p>
</blockquote>

<h4>
	ضبط اسم قاعدة البيانات
</h4>

<p>
	استبدل عبارة <code>database_name_here</code> باسم قاعدة البيانات الخاصة بك، مثل MyDatabaseName.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_17" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_NAME'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'MyDatabaseName'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="com">// Example MySQL database name</span></pre>

<h4>
	ضبط مستخدم قاعدة البيانات
</h4>

<p>
	استبدل عبارة <code>username_here</code> باسم مستخدم قاعدة البيانات الخاصة بك، على سبيل المثال MyUserName.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_19" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_USER'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'MyUserName'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="com">// Example MySQL username</span></pre>

<h4>
	ضبط كلمة مرور قاعدة البيانات
</h4>

<p>
	استبدل عبارة "password_here" بكلمة مرور قاعدة البيانات لديك، مثال MyPassword.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_21" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_PASSWORD'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'MyPassWord'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="com">// Example MySQL password</span></pre>

<h4>
	ضبط مضيف قاعدة البيانات
</h4>

<p>
	استبدل <code>localhost</code> باسم مضيف قاعدة البيانات، مثال MyDatabaseHost إضافةً إلى رقم منفذ الاتصال والذي من الممكن أن تحتاج معه إلى مسار ملف مقبس يونكس Unix socket.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_23" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_HOST'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'MyDatabaseHost'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="com">// Example MySQL Database host</span></pre>

<p>
	ملاحظة: لن تضطر غالبًا إلى تغيير مضيف قاعدة البيانات، ولكن إن لم تكن متأكدًا من ذلك، حاول استخدام القيمة <code>localhost</code> إن كانت ستعمل؛ وفي حال فشلت عملية التثبيت، تواصل مع مزود الاستضافة واسأله عن القيمة الصحيحة.
</p>

<h5>
	المنفذ البديل لقاعدة بيانات MYSQL
</h5>

<p>
	ستضطر لتغيير قيمة DB_HOST ضمن ملف wp-config.php في حال استخدم المضيف رقم منفذ بديل لقاعدة بياناتك.
</p>

<p>
	من أجل المُضيف المحلي localhost:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_25" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_HOST'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'127.0.0.1:3307'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	أو في بعض الحالات:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_27" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_HOST'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'localhost:3307'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	أما لخادم محدد:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_29" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_HOST'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'mysql.example.com:3307'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	طبعًا رقم المنفذ المُستخدم 3307 ليس إلزاميًا فهو يختلف تبعًا لما يمنحه لك مضيفك.
</p>

<h5>
	مقابس MYSQL أو Pipe
</h5>

<p>
	يجب عليك الانتباه أنه في حال استخدام مضيفك لمقابس يونكس أو Pipe، عليك تعديل قيمة DB_HOST ضمن ملف wp-config.php حسب المُستخدم.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_31" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_HOST'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'127.0.0.1:/var/run/mysqld/mysqld.sock'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="com">// or define( 'DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock' );</span><span class="pln">
</span><span class="com">// or define( 'DB_HOST', 'example.tld:/var/run/mysqld/mysqld.sock' );</span></pre>

<p>
	استبدل<code>/var/run/mysqld/mysqld.sock </code>بمعلومات المقبس أو Pipe المُقدّمة من قبل مضيفك.
</p>

<h5>
	الاحتمالات الممكنة لقيمة DB_HOST
</h5>

<p>
	تستخدم شركات الاستضافة المُختلفة إعدادات مختلفة للشبكة بما يخص قواعد بيانات mysql، وفي حال كان مزود الاستضافة الخاص بك ضمن القائمة التالية في العمود الأيمن، فإن القيمة الموجودة على اليسار مُماثلة لقيمة DB_HOST الصحيحة. وللتأكد من هذه القيمة عليك التواصل مع الفريق التقني للاستضافة أو البحث ضمن توثيق الشركة الموجود على الانترنت.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th>
				مزود الاستضافة
			</th>
			<th>
				قيمة DB_HOST المتوقعة
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				1and1
			</td>
			<td>
				db12345678
			</td>
		</tr>
		<tr>
			<td>
				استضافة A2
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				استضافة AN
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				Aruba.it
			</td>
			<td>
				localhost أو عنوان IP حقيقي يُرسل مع رسالة تفعيل البريد الالكتروني
			</td>
		</tr>
		<tr>
			<td>
				A Small Orange
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				AT&amp;T
			</td>
			<td>
				xxxxxxxx.carrierzone.com تجد الاسم الكامل للخادم ضمن PHPMyAdmin
			</td>
		</tr>
		<tr>
			<td>
				BlueHost
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				DreamHost
			</td>
			<td>
				mysql.example.com
			</td>
		</tr>
		<tr>
			<td>
				GoDaddy - الاستضافات المُشتركة واستضافات 4GH
			</td>
			<td>
				توجه ضمن قائمة قواعد البيانات إلىMySQL، واضغط على Actions and Details الموجودة إلى يمين اسم قاعدة البيانات. ستجد اسم المُضيف في أسفل النافذة.
			</td>
		</tr>
		<tr>
			<td>
				GoDaddy - استضافة مع لوحة تحكم cPanel
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				GoDaddy - استضافة مع لوحة تحكم Plesk
			</td>
			<td>
				استخدم عنوان IP الموجود ضمن قسم قواعد البيانات في لوحة تحكم Plesk ولا تشمل :3306
			</td>
		</tr>
		<tr>
			<td>
				HostGator
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				ICDSoft
			</td>
			<td>
				localhost:/tmp/mysql5.sock
			</td>
		</tr>
		<tr>
			<td>
				Infomaniak Network
			</td>
			<td>
				mysql.yourdomain
			</td>
		</tr>
		<tr>
			<td>
				InMotion
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				iPage
			</td>
			<td>
				username.ipagemysql.com
			</td>
		</tr>
		<tr>
			<td>
				IPower
			</td>
			<td>
				username.ipowermysql.com
			</td>
		</tr>
		<tr>
			<td>
				Laughing Squid
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				MediaTemple Grid
			</td>
			<td>
				internal-db.s00000.gridserver.com (استبدل 00000 برقم الموقع الحقيقي)
			</td>
		</tr>
		<tr>
			<td>
				MediaTemple DV
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				MegaHost
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				NearlyFreeSpeech.Net
			</td>
			<td>
				username.db
			</td>
		</tr>
		<tr>
			<td>
				NetworkSolutions
			</td>
			<td>
				mysqlv5
			</td>
		</tr>
		<tr>
			<td>
				One.com
			</td>
			<td>
				example.com.mysql
			</td>
		</tr>
		<tr>
			<td>
				Pair Networks
			</td>
			<td>
				dbnnnx.pair.com
			</td>
		</tr>
		<tr>
			<td>
				QTH.com
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				Rackspace Cloud
			</td>
			<td>
				استخدم localhost للخوادم غير المُدارة، أما بالنسبة للمواقع السحابية فعليك استخدام متغيرات مثل mysqlXY-AB.wcN.dfQ.stabletransit.com حيث X وY وA وB وN وQ متغيرات
			</td>
		</tr>
		<tr>
			<td>
				SysFix.eu Power
			</td>
			<td>
				datapower.sysfix.eu
			</td>
		</tr>
		<tr>
			<td>
				Site5
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				Yahoo
			</td>
			<td>
				Mysql
			</td>
		</tr>
		<tr>
			<td>
				الاستضافات التي تستخدم لوحة تحكم cPanel
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				الاستضافات التي تستخدم لوحة تحكم Plesk
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				الاستضافات التي تستخدم لوحة تحكم DirectAdmin
			</td>
			<td>
				localhost
			</td>
		</tr>
		<tr>
			<td>
				Tophost.it
			</td>
			<td>
				sql.your-domain-name.it
			</td>
		</tr>
	</tbody>
</table>

<h3>
	مجموعة محارف قاعدة البيانات Database character set
</h3>

<p>
	تسمح DB_CHARSET بتعيين مجموعة محارف قاعدة البيانات حتى تُستخدم عند تعريف جداول قاعدة البيانات. حيث تكون القيمة الافتراضية لها هي utf8 (مجموعة محارف <a data-ss1625063328="1" href="http://en.wikipedia.org/wiki/Unicode" rel="external nofollow">Unicode</a> <a data-ss1625063328="1" href="http://en.wikipedia.org/wiki/UTF-8" rel="external nofollow">UTF-8</a>)، وهي الخيار الأفضل في أغلب الأحيان، حيث تدعم UTF-8 جميع اللغات وبالتالي من المُستحسن الإبقاء على قيمة utf8 لـ DB_CHARSET واستخدام ترتيب قاعدة البيانات <a data-ss1625063328="1" href="https://codex.wordpress.org/Editing_wp-config.php#Database_collation" rel="external nofollow">DB_COLLATE</a> للغة المُراد دعمها بدلًا من ضبط قيمة DB_CHARSET.
</p>

<p>
	يُظهر المثال التالي استخدام utf8 وهي قيمة ووردبريس الافتراضية:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_33" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_CHARSET'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'utf8'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	لا توجد حاجة غالبًا لتغيير قيمة DB_HOST الافتراضية ولكن إن احتاجت مدونتك لمجموعة محارف مختلفة، فعليك قراءة مجموعات المحارف والترتيبات التي تدعمها<a data-ss1625063328="1" href="http://dev.mysql.com/doc/refman/5.6/en/charset-charsets.html" rel="external nofollow">MySQL</a> للحرص على استخدام قيم صحيحة لقيمة DB_HOST.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		تحذير: تتطلب بعض القيم عمل ترقية لقاعدة البيانات.
	</p>
</blockquote>

<p>
	لا تضف تعريفًا لمجموعة قاعدة البيانات DB_CHARSET  أو ترتيبها DB_COLLATE في حال عدم وجودها في ملف wp-config.php، إلا إن كنت قد قرأت عن وفهمت جيدًا آلية تحويل مجموعة محارف قاعدة البيانات، وذلك لأن إضافة DB_CHARSET  أو DB_COLLATE لمدونةٍ قيد التشغيل غالبًا سوف يُسبب مشاكل خطيرة.
</p>

<h3>
	ترتيب مجموعة محارف قاعدة البيانات Database Collation
</h3>

<p>
	يسمح DB_COLLATE بتعيين ترتيب مجموعة محارف قاعدة البيانات (مثال على ذلك كيفية ترتيب مجموعة المحارف)، ويجب الإبقاء على قيمة هذا المتغير في معظم الحالات فراغًا لتعيين ترتيب قاعدة البيانات افتراضيًا من قبل MySQL بالاعتماد على مجموعة محارف قاعدة البيانات المُحددة بقيمة DB_CHARSET. يُمكنك استخدام DB_COLLATE وإعطائها أحد قيم UTF-8 المُعرّفة في مجموعات <a data-ss1625063328="1" href="http://dev.mysql.com/doc/refman/5.6/en/charset-unicode-sets.html" rel="external nofollow">محارف UTF-8</a> للغات أوروبا الغربية عند استخدامك لغة مختلفة تظهر محارفها مختلفة عما هو مُدخل. (ألقِ نظرةً على <a data-ss1625063328="1" href="https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html#charset-unicode-sets-general-versus-unicode" rel="external nofollow">مجموعات محارف Unicode</a> ضمن كتيب <a data-ss1625063328="1" href="https://academy.hsoub.com/files/16-%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA-%D9%84%D9%84%D8%B9%D8%A7%D9%85%D9%84%D9%8A%D9%86-%D8%A8%D9%84%D8%BA%D8%A9-sql/" rel="">إرشادات SQL</a>).
</p>

<p>
	القيمة الافتراضية لـ DB_COLLATE في ووردبريس:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_35" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_COLLATE'</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	ترتيب UTF-8 Unicode العام:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_37" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_COLLATE'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'utf8_general_ci'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	ترتيب UTF-8 Unicode التركي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_39" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DB_COLLATE'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'utf8_turkish_ci'</span><span class="pln"> </span><span class="pun">);</span></pre>

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

<p>
	لا يوجد عادًة أي داعي لتغيير قيمة DB_COLLATE الافتراضية، حيث يضمن إبقاء القيمة فارغة التعيين التلقائي لها من قِبل MySQL عند إنشاء جداول قاعدة البيانات.
</p>

<h3>
	المفاتيح الأمنية Security Keys
</h3>

<p>
	يجب أن تكون هذه المفاتيح طويلةً وعشوائيةً ومعقدة، وهي ليست مشكلة، إذ ليس عليك حفظها بذاكرتك، والخيار الأفضل هو إنشاء هذه المفاتيح باستخدام <a data-ss1625063328="1" href="https://api.wordpress.org/secret-key/1.1/salt/" rel="external nofollow">مولد عبر الانترنت</a>، حيث تستطيع تغيير هذه المفاتيح في أي مرحلة وأي وقت لإنهاء صلاحية كل ملفات الارتباط الموجودة وهذا يعني إجبار جميع المستخدمين على إعادة تسجيل الدخول من جديد.
</p>

<p>
	مثال (لا تستخدم البيانات التالية):
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_14" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'AUTH_KEY'</span><span class="pun">,</span><span class="pln">         </span><span class="str">'t`DK%X:&gt;xy|e-Z(BXb/f(Ur`8#~UzUQG-^_Cs_GHs5U-&amp;Wb?pgn^p8(2@}IcnCa|'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'SECURE_AUTH_KEY'</span><span class="pun">,</span><span class="pln">  </span><span class="str">'D&amp;ovlU#|CvJ##uNq}bel+^MFtT&amp;.b9{UvR]g%ixsXhGlRJ7q!h}XWdEC[BOKXssj'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'LOGGED_IN_KEY'</span><span class="pun">,</span><span class="pln">    </span><span class="str">'MGKi8Br(&amp;{H*~&amp;0s;{k0&lt;S(O:+f#WM+q|npJ-+P;RDKT:~jrmgj#/-,[hOBk!ry^'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'NONCE_KEY'</span><span class="pun">,</span><span class="pln">        </span><span class="str">'FIsAsXJKL5ZlQo)iD-pt??eUbdc{_Cn&lt;4!d~yqz))&amp;B D?AwK%)+)F2aNwI|siOe'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'AUTH_SALT'</span><span class="pun">,</span><span class="pln">        </span><span class="str">'7T-!^i!0,w)L#JK@pc2{8XE[DenYI^BVf{L:jvF,hf}zBf883td6D;Vcy8,S)-&amp;G'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'SECURE_AUTH_SALT'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'I6`V|mDZq21-J|ihb u^q0F }F_NUcy`l,=obGtq*p#Ybe4a31R,r=|n#=]@]c #'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'LOGGED_IN_SALT'</span><span class="pun">,</span><span class="pln">   </span><span class="str">'w&lt;$4c$Hmd%/*]`Oom&gt;(hdXW|0M=X={we6;Mpvtg+V.o&lt;$|#_}qG(GaVDEsn,~*4i'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'NONCE_SALT'</span><span class="pun">,</span><span class="pln">       </span><span class="str">'a|#h{c5|P &amp;xWs4IZ20c2&amp;%4!c(/uG}W:mAvy&lt;I44`jAbup]t=]V&lt;`}.py(wTP%%'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	يحمي المفتاح الأمني موقعك تجاه الهجمات من خلال إضافة عناصر عشوائية لكلمة المرور، وبعبارة أبسط فإن المفتاح الأمني عبارة عن كلمة مرور مكونة من عناصر تجعل من الصعب توليد مفاتيح محتملة كافية لكسر أمن موقعك. من الناحية الأخرى فإن استخدام كلمات مرور، مثل: "password"، أو "test"، يُسهل جدًا اختراق موقعك لأنها كلمات سهلة التوليد ومُتوقعة؛ بينما استخدام كلمة مرور طويلة وعشوائية وخالية من كلمات ذات معنى مثل "88a7da62429ba6ad3cb3c76a09641fc"، يتطلب ملايين الساعات لكسرها باستخدام هجوم القوة الغاشمة Brute Force. تُضاف مفاتيح salt وهي بيانات عشوائية تُستخدم مثل إضافي للدوال أحادية الاتجاه لحماية كلمات المرور المخزنة في الذاكرة) لزيادة أمان كلمة المرور المُولدة أيضًا.
</p>

<p>
	تزيد المفاتيح الأربعة من أمان موقعك ولكنك غير مُلزم بإضافتها، حيث يُولد ووردبريس مفاتيح salt لك في حال عدم توفرها. وتستطيع إيجادها ضمن ملف wp-config.php بالحالة العادية بعد التثبيت.
</p>

<p>
	ألق نظرةً على المراجع التالية للحصول على فكرة تقنية أوسع ومزيد من المعلومات التفصيلية عن المفاتيح الأمنية وكلمات المرور الآمنة:
</p>

<ul>
	<li>
		<a data-ss1625063328="1" href="https://academy.hsoub.com/apps/web/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%B9%D9%85%D9%84-ssl-%D9%88-https-%D9%85%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r278/" rel="">كيف تستعمل <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> وHTTPS مع ووردبريس</a>
	</li>
	<li>
		<a data-ss1625063328="1" href="https://academy.hsoub.com/devops/servers/databases/mysql/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B6%D8%A8%D8%B7-%D8%AA%D8%B4%D9%81%D9%8A%D8%B1-ssltls-%D9%84%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84%D8%A7%D8%AA-%D8%A5%D9%84%D9%89-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-mysql-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1604-r341/" rel="">كيفية ضبط تشفير <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr> للاتصالات إلى قواعد بيانات MySQL على خادم أوبنتو 16.04 </a>
	</li>
	<li>
		<a data-ss1625063328="1" href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D9%86-%D8%B3%D9%84%D8%B7%D8%A9-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%AA%D8%AC%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-%D9%88%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA%D9%87%D8%A7-r148/" rel="">كيفية تثبيت شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> من سلطة شهادات تجارية: الحصول على الشهادة وتثبيتها </a>
	</li>
	<li>
		<a data-ss1625063328="1" href="https://academy.hsoub.com/apps/general/%D8%AD%D9%81%D8%B8-%D9%88-%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D9%83%D9%84%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B1%D9%88%D8%B1-%D8%B9%D8%A8%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-keepass-r426/" rel="">حفظ و تأمين كلمات المرور عبر تطبيق KeePass </a>
	</li>
</ul>

<h2>
	خيارات متقدمة
</h2>

<p>
	تتضمن الأقسام التالية معلومات متقدمة عن بعض التعديلات التي قد تُسبب مشاكل غير متوقعة، لذلك من فضلك تأكد من معرفتك بكيفية أخذ <a data-ss1625063328="1" href="https://academy.hsoub.com/apps/web/wordpress/%D8%A3%D9%81%D8%B6%D9%84-11-%D9%85%D9%84%D8%AD%D9%82%D8%A7-%D8%A7%D8%AD%D8%AA%D8%B1%D8%A7%D9%81%D9%8A%D8%A7-%D9%88%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A7-%D9%84%D8%B9%D9%85%D9%84-%D9%86%D8%B3%D8%AE-%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A%D8%A9-%D9%84%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5-%D8%A8%D9%83-r190/" rel="">نسخ احتياطية دوريًا</a> لموقعك، إضافةً إلى آلية استعادة هذه النسخ قبل البدء بتعديل الإعدادات المُتضمنة في الأقسام التالية.
</p>

<h3>
	بادئة جداول قاعدة البيانات table_prefix
</h3>

<p>
	يحتوي المُتغير <code>‎$table_prefix</code>على قيمة البادئة التي تُحشر ببداية اسم كل جدول ضمن قاعدة البيانات المُستخدمة مع ووردبريس والقيمة الافتراضية لها هي ‎wp_"‎"، وتتغير قيمة هذا المتغير طالما باستطاعتك تغيير البادئة. تُستخدم بادئات مختلفة عند <a data-ss1625063328="1" href="https://academy.hsoub.com/apps/web/wordpress/wordpress-multisite/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%85%D9%8F%D8%AA%D8%B9%D8%AF%D9%91%D8%AF-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-r176/" rel="">تثبيت عدة مدونات ووردبريس</a> باستخدام نفس قاعدة البيانات، كما هو الحال عند إنشاء مواقع متعددة multisite ضمن ووردبريس.
</p>

<p>
	بالتالي من الممكن استخدام نفس قاعدة البيانات لعدة مواقع ووردبريس بشرط استخدام بادئة مختلفة أثناء عملية تثبيت ووردبريس لكل موقع، ولكن عليك الانتباه لموضوع الأمان عند المُضي في هذا الخيار.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_44" style=""><span class="pln">$table_prefix </span><span class="pun">=</span><span class="pln"> </span><span class="str">'r235_'</span><span class="pun">;</span><span class="pln"> </span><span class="com">// من فضلك يجب أن تتضمن أرقام أو محارف أو إشارة _ فقط!</span></pre>

<h3>
	رابط عنوان ووردبريس WP_SITEURL
</h3>

<p>
	يسمح لك WP_SITEURL بتعريف رابط عنوان ووردبريس، ويجب أن تدل القيمة المُعرفة ضمنه على موقع ملفات ووردبريس الأساسية؛ كما يجب أن يتضمن الرابط الجزئية "‎"‎ http://‎ التي تدل على البروتوكول المستخدم لتصفح مواقع الويب، لكن عليك عدم إضافة "/" لنهاية الرابط.
</p>

<p>
	يسمح لك ضبط هذه القيمة ضمن ملف wp-config.php بتجاهل القيمة الموجودة ضمن جدول <a data-ss1625063328="1" href="https://codex.wordpress.org/Database_Description#Table:_wp_options" rel="external nofollow">wp_options</a> لرابط الموقع siteurl، كما يُقلل إضافة هذه القيمة من خلال الملف السابق من عدد مرات الاتصال بقاعدة البيانات عند تحميل الموقع.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: لايُغيّر هذا من القيمة المحفوظة ضمن قاعدة البيانات.
	</p>
</blockquote>

<p>
	ستُستخدم القيمة المحفوظة في قاعدة البيانات عند حذف السطر الذي يغير هذه القيمة من ملف wp-config.php، أما لتغيير قيمة siteurl ضمن قاعدة البيانات عليك، فاستخدم الثابت <a data-ss1625063328="1" href="https://codex.wordpress.org/Changing_The_Site_URL#Relocate_method" rel="external nofollow">RELOCATE</a>.
</p>

<p>
	لنقترض أن ووردبريس مُثبت ضمن مسار يُدعى "wordpress" للنطاق example.com، عندها عليك تعريف WP_SITEURL كالتالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_42" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_SITEURL'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://example.com/wordpress'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	يُمكن ضبط قيمة WP_SITEURL ديناميكيًا بالاعتماد على المتغير ‎<code>$_SERVER['HTTP_HOST']</code>‎:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_46" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_SITEURL'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://'</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $_SERVER</span><span class="pun">[</span><span class="str">'HTTP_HOST'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/path/to/wordpress'</span><span class="pln"> </span><span class="pun">);</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<strong>ملاحظة:</strong> يُنشَأ HTTP_HOST ديناميكيًا من خلال بي اتش بي بالاعتماد على قيمة ترويسة HTTP_HOST ضمن الطلب، وهذا قد يسمح بثغرات تضمين الملف File Inclusion Vulnerabilities. ومن الممكن أيضًا إنشاء SERVER_NAME ديناميكيًا ولكن عند إعداد خادم Apache ليستخدم UseCanonicalName، وتُضبط قيمة SERVER_NAME من خلال إعدادات الخادم وهذه الحالة أكثر أمانًا للمستخدِم من HTTP_HOST.
		</p>
	</div>
</blockquote>

<p>
	تُضبط قيمة WP_SITEURL اعتمادًا على <code>‎</code>‎$_SERVER['SERVER_NAME']‎:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_50" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_SITEURL'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://'</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $_SERVER</span><span class="pun">[</span><span class="str">'SERVER_NAME'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/path/to/wordpress'</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	عنوان رابط المدونة URL
</h3>

<p>
	يسمح استخدام هذا المتغير WP_HOME بتجاهل قيمة home ضمن جدول ‎<a data-ss1625063328="1" href="https://codex.wordpress.org/Database_Description#Table:_wp_options" rel="external nofollow">_wp_options</a> دون تغييره ضمن قاعدة البيانات، وهذه القيمة هي العنوان الذي تريد لزوارك كتابته ضمن متصفحاتهم للوصول لمدونتك على ووردبريس. يجب أن يتضمن الرابط بروتوكول http://"‎" دون الانتهاء بـ "/" في نهاية الرابط. انتبه أن استخدام هذا المتغير يُقلل من عدد الطلبات لقاعدة البيانات عند تحميل الموقع.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_52" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_HOME'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://example.com'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span></pre>

<p>
	يجب عليك اتباع المثال التالي في حال كنت تستخدم التقنية المشروحة ضمن تعيين المسار الخاص بووردبريس، ولا تنسى إضافة index.php ضمن المسار الخاص بموقعك إن كنت تستخدم هذه الإعدادات. اضبط WP_HOME ديناميكيًا بالاعتماد على قيمة ‎<code>‎$_SERVER['HTTP_HOST']</code>‎‎:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_54" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_HOME'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://'</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $_SERVER</span><span class="pun">[</span><span class="str">'HTTP_HOST'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/path/to/wordpress'</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	نقل مجلد wp-content
</h3>

<p>
	تستطيع نقل مسار المجلد wp-content المُتضمن القوالب والإضافات والملفات المرفوعة للموقع إلى مسار خارج مسار ووردبريس.
</p>

<p>
	اضبط قيمة WP_CONTENT_DIR للمسار المحلي الكامل الذي تريد النقل له بدون إضافة "/" لنهاية المسار.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_56" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_CONTENT_DIR'</span><span class="pun">,</span><span class="pln"> dirname</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">'/blog/wp-content'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	اضبط قيمة WP_CONTENT_URL بالرابط الكامل للمسار السابق دون إضافة "/" لنهاية الرابط.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_58" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_CONTENT_URL'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://example/blog/wp-content'</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	نقل المجلد الخاص بالإضافات
</h3>

<p>
	اضبط قيمة WP_PLUGIN_DIR للمسار المحلي الكامل الذي تريد النقل له دون إضافة "/" لنهاية المسار.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_60" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_PLUGIN_DIR'</span><span class="pun">,</span><span class="pln"> dirname</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">'/blog/wp-content/plugins'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	اضبط قيمة WP_PLUGIN_URL بالرابط الكامل للمسار السابق دون إضافة "/" لنهاية الرابط.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_62" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_PLUGIN_URL'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://example/blog/wp-content/plugins'</span><span class="pln"> </span><span class="pun">);</span></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_64" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'PLUGINDIR'</span><span class="pun">,</span><span class="pln"> dirname</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">'/blog/wp-content/plugins'</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	نقل مجلد القوالب
</h3>

<p>
	من غير الممكن نقل مجلد القوالب، لأن مساره منسوب ضمن الكود البرمجي إلى مجلد wp-content:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_66" style=""><span class="pln">$theme_root </span><span class="pun">=</span><span class="pln"> WP_CONTENT_DIR </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/themes'</span><span class="pun">;</span></pre>

<p>
	بينما تستطيع تسجيل مسارات إضافية للقالب من خلال تسجيل مسار القالب.
</p>

<p>
	ألقِ نظرةً على كيفية نقل مجلد wp-content. ولمزيدٍ من التفاصيل حول موقع مجلد القوالب وكيفية تصميمه، ألقِ نظرةً على ملف wp-includes/theme.php.
</p>

<h3>
	نقل مجلد المرفوعات
</h3>

<p>
	اضبط قيمة UPLOADS إلى:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_68" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'UPLOADS'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'blog/wp-content/uploads'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	لا يمكن أبدًا لهذا المسار أن يكون ثابتًا مطلقًا، بل يكون منسوبًا إلى ABSPATH؛ لذلك لا يتطلب استخدام "/" في البداية.
</p>

<h3>
	تعديل فواصل الحفظ التلقائي الزمنية
</h3>

<p>
	يَستخدم ووردبريس Ajax لتنفيذ عملية الحفظ التلقائي للمقال خلال تعديلك له وحفظ نسخ عنه. ومن المُحتمل أن ترغب في زيادة هذه القيمة لتصبح الفواصل الزمنية بين عمليات الحفظ أطول، أو ربما العكس لضمان عدم خسارة أي تعديلات. بحيث القيمة الافتراضية هي 60 ثانية.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_70" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'AUTOSAVE_INTERVAL'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">160</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="com">// Seconds</span></pre>

<h3>
	تنقيحات المنشور
</h3>

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

<h3>
	تعطيل تنقيحات المنشور
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_72" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_POST_REVISIONS'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: لا يستطيع بعض المستخدمين تفعيل هذه الميزة إلا عند نقل الأمر السابق لأول سطر يلي تعليق الكتلة الأوّلي ضمن ملف wp-config.php.
	</p>
</blockquote>

<h3>
	تحديد عدد نسخ تنقيحات المنشور
</h3>

<p>
	لتحديد عددٍ أعظمي من التنقيحات المحفوظة تلقائيًا عن المنشور، يجب تغيير قيمة WP_POST_REVISIONS لعدد صحيح بدلًا من قيمة منطقية (على سبيل المثال، 3 أو 12).
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_74" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_POST_REVISIONS'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	 
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<strong>ملاحظة:</strong> لا يستطيع بعض المستخدمين تفعيل هذه الميزة إلا عند نقل الأمر السابق لأول سطر يلي تعليق الكتلة الأوّلي ضمن ملف wp-config.php.
		</p>
	</div>
</blockquote>

<h3>
	ضبط نطاق ملفات الارتباط
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_76" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'COOKIE_DOMAIN'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'www.example.com'</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	تفعيل ميزة المواقع المتعددة/ الشبكة Multisite/ Network
</h3>

<p>
	يسمح ضبط قيمة WP_ALLOW_MULTISITE بتفعيل أو تعطيل ميزة المواقع المتعددة، وفي حال عدم وجود هذا الخيار ضمن ملف wp-config.php، فإن الحالة الافتراضية هي عدم تفعيل الميزة والقيمة الافتراضية للمتغير هي false.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_78" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_ALLOW_MULTISITE'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	إعادة التوجيه للمدونات غير الموجودة
</h3>

<p>
	يُمكن استخدام NOBLOGREDIRECT لإعادة توجيه الزوار الذين يحاولون الوصول لِنطاق فرعي أو مجلد فرعي غير موجود.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_80" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'NOBLOGREDIRECT'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'http://example.com'</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span></pre>

<h3>
	إظهار رسالة خطأ WP_DISABLE_FATAL_ERROR_HANDLER
</h3>

<p>
	قدّم إصدار 5.2 من ووردبريس نمط الاستعادة Recovery Mode الذي يُظهر رسالة خطأ بدلًا من شاشة بيضاء عندما تتسبب الإضافات بخطأ برمجي، إذ تُعرض رسالة تشبه الرسالة التالية:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		The site is experiencing technical difficulties. Please check your site admin email inbox for instructions.
	</p>

	<p>
		والتي تعني: يعاني الموقع من صعوبات تقنية. يرجى التحقق من البريد الوارد البريد الإلكتروني المسؤول الموقع للحصول على تعليمات
	</p>
</blockquote>

<p>
	لن تظهر شاشة بيضاء أو رسالة خطأ ضمن كود البي اتش بي للمستخدِمين بعد الآن. ولكن ضمن بيئة التطوير فقط، فإن كنت ترغب بتفعيل WP_DEBUG_DISPLAY، فيجب عليك تعطيل نمط الاستعادة من خلال ضبط قيمة WP_DISABLE_FATAL_ERROR_HANDLER للقيمة true.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_82" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DISABLE_FATAL_ERROR_HANDLER'</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">   </span><span class="com">// 5.2 and later define( 'WP_DEBUG', true );</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_DISPLAY'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	تنقيح الأخطاء WP_DEBUG
</h3>

<p>
	يتحكم خيار <a data-ss1625063328="1" href="https://codex.wordpress.org/Debugging_in_WordPress" rel="external nofollow">WP_DEBUG</a> بعرض بعض الأخطاء والتحذيرات، وتفعيله يسمح باستخدام إعدادات WP_DEBUG_DISPLAY وWP_DEBUG_LOG. الحالة الافتراضية لهذه المتغيرات هي false.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_84" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DISABLE_FATAL_ERROR_HANDLER'</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">   </span><span class="com">// 5.2 and later</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	تظهر أخطاء قاعدة البيانات ضمن المتصفح فقط عند ضبط قيمة WP_DEBUG إلى القيمة true، ويتعامل الصنف wpdb مع أخطاء قاعدة البيانات التي لا تتأثر بإعدادات أخطاء بي اتش بي، كما ويرفع ضبط قيمة WP_DEBUG إلى true من مستوى التبليغ عن الخطأ إلى E_ALL، ويُفعل التحذيرات عند استخدام ملفات أو دوال قديمة لا يجب استخدامها؛ أما في الحالة الافتراضية، يكون مستوى التبليغ عن الخطأ مضبوطًا إلىM
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_87" style=""><span class="pln"> E_ALL </span><span class="pun">^</span><span class="pln"> E_NOTICE </span><span class="pun">^</span><span class="pln"> E_USER_NOTICE</span></pre>

<h3>
	نمط البيئة WP_ENVIRONMENT_TYPE
</h3>

<p>
	يتحكم خيار WP_ENVIRONMENT_TYPE بنمط البيئة لموقعك الالكتروني، سواءً محلية local، أو تطوير development، أو مرحلية staging، أو إنتاج production. وتُعالج قيم أنماط البيئة بالترتيب التالي، بحيث تُلغي كل طريقة تسلسلية القيم السابقة: متغير بيئة بي اتش بي WP_ENVIRONMENT وثابت WP_ENVIRONMENT.
</p>

<p>
	ستُعاد القيمة الافتراضية production في حال كانت قيمة نمط البيئة المُوفرة من قِبل أي من الطريقتين السابقتين غير موجودة ضمن أنماط البيئة المُسموح بها.
</p>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_90" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_ENVIRONMENT_TYPE'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'staging'</span><span class="pln"> </span><span class="pun">);</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: عند إعادة development من قبل الدالة <a data-ss1625063328="1" href="https://developer.wordpress.org/reference/functions/wp_get_environment_type/" rel="external nofollow">wp_get_environment_type()‎</a>، فستُضبَط قيمة WP_DEBUG إلى true في حال كانت غير معرّفة ضمن ملف wp-config.php للموقع.
	</p>
</blockquote>

<h3>
	تنقيح السكربت SCRIPT_DEBUG
</h3>

<p>
	يجبر الثابت <a data-ss1625063328="1" href="https://wordpress.org/support/article/debugging-in-wordpress/" rel="external nofollow">SCRIPT_DEBUG</a> ووردبريس على استخدام إصدارات "dev" للسكربت، وأوراق الأنماط stylesheet من ملفات الجافاسكربت، و<a data-ss1625063328="1" href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel="">CSS</a> الموجودة ضمن: wp-includes/js، وwp-include/css، وwp-admin/js، وwp-admin/css لتُحمَّل بدلًا من النسخ min.js وmin.css.
</p>

<p>
	لذلك يجب عليك إضافة الكود التالي إن كنت تريد التعديل على كود <a data-ss1625063328="1" href="https://wiki.hsoub.com/JavaScript" rel="external">جافاسكربت</a> أو <a data-ss1625063328="1" href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> موجود ضمن ملفات ووردبريس:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_92" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'SCRIPT_DEBUG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	تعطيل ضم ملفات الجافاسكربت
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_94" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'CONCATENATE_SCRIPTS'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	إعداد تسجيل الخطأ
</h3>

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

<p>
	عينة عن الإعدادات التي يُوصى بها لملف php.ini:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_100" style=""><span class="pln">error_reporting </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4339</span><span class="pln">
display_errors </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Off</span><span class="pln">
display_startup_errors </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Off</span><span class="pln">
log_errors </span><span class="pun">=</span><span class="pln"> </span><span class="typ">On</span><span class="pln">
error_log </span><span class="pun">=</span><span class="pln"> </span><span class="str">/home/</span><span class="pln">example</span><span class="pun">.</span><span class="pln">com</span><span class="pun">/</span><span class="pln">logs</span><span class="pun">/</span><span class="pln">php_error</span><span class="pun">.</span><span class="pln">log
log_errors_max_len </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1024</span><span class="pln">
ignore_repeated_errors </span><span class="pun">=</span><span class="pln"> </span><span class="typ">On</span><span class="pln">
ignore_repeated_source </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Off</span><span class="pln">
html_errors </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Off</span></pre>

<p>
	إن error_reporting 4339 هي قيمة مخصصة تسمح بتسجيل المشاكل التي تؤثر على عمل موقعك الإلكتروني وتتجاهل أشياء أخرى مثل الملاحظات التي قد لا تكون أخطاء. ألقِ نظرةً على <a data-ss1625063328="1" href="http://php.net/manual/en/errorfunc.constants.php" rel="external nofollow">ثوابت أخطاء بي اتش بي</a> لتفهم معنى موقع كل بت من "1000011110011" وهو العدد الثنائي الموافق للعدد العشري 4339. حيث يعني البت الأول من جهة اليسار والذي أخذ قيمة 1، وجوب عرض تقرير عن أي E_RECOVERABLE_ERROR؛ أما البت التالي وهو بقيمة 0، فيعني عدم الإبلاغ عن E_STRICT (يُرفع هذا الخطأ عندما يُستخدم ترميز غير متقن ولكنه فعّال). تستطيع استخدام الرقم الذي تريد بدلًا من 4339.
</p>

<p>
	لا بد أنك ترغب بإعدادات مختلفة لبيئة التطوير الخاصة بك، وفي حال كانت النسخة المرحلية على ذات الخادم أو ليس لديك وصول لملف php.ini، فعليك تجاوز الإعدادات الافتراضية في زمن التشغيل. هذا طبعًا أمرٌ شخصي يعود لما تفضله، فهل تفضل توجيه الأخطاء إلى السجل، أو تنبيهك على الفور بوجود خطأ، أو ربما الاثنان معًا. يسمح المثال التالي لإعدادات بعرض جميع الأخطاء حال حصولها عند إضافة الكود إلى ملف wp-config.php:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_103" style=""><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'log_errors'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Off'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'display_errors'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'On'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DISABLE_FATAL_ERROR_HANDLER'</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">   </span><span class="com">// 5.2 and later</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG'</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">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_LOG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_DISPLAY'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	ملف wp-config.php هو مكان مثالي لتعيين إعدادات ملف php.ini المتحكّمة بتثبيت بي اتش بي الخاص بك، نظرًا لتحميل هذا الملف في كل مرة تزور الصفحة فيها ولا يُحمَّل أبدًا من ذاكرة التخزين المؤقتة cache. هذا الإعداد مفيد جدًا إن كنت لا تمتلك صلاحية الوصول لملف php.ini أو في حال أردت تغيير بعض الإعدادات سريعًا.
</p>

<p>
	يوجد استثناء وحيد مرتبط بإعداد error_reporting، حيث يأخذ القيمة E_ALL من قِبل ووردبريس في حال عُيّنت قيمة WP_DEBUG إلى true بغض النظر عن الإعدادات التي تحاول تغييرها ضمن ملف wp-config.php. عند اضطرارك لضبط قيمة error_reporting لشيء آخر، يجب ضبط ذلك بعد تحميل ملف wp-settings.php، مثلًا في ملف إضافة.
</p>

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

<p>
	يُفعّل المثال التالي سجل أخطاء بي اتش بي ويُسجلهم ضمن ملف محدد وفي حال كان قيمة WP_DEBUG هي true سيحفظ الأخطاء ضمن هذا الملف. عليك تضمين هذا الكود قبل أوامر require_once أو includes.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_105" style=""><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'log_errors'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'On'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'display_errors'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Off'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'error_log'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'/home/example.com/logs/php_error.log'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="com">/* That's all, stop editing! Happy blogging. */</span></pre>

<p>
	نعرض مثالًا آخر لتسجيل الأخطاء، مقترح من قبل مايك ليتل Mike Little ضمن <a data-ss1625063328="1" href="http://lists.automattic.com/pipermail/wp-hackers/2010-September/034830.html" rel="external nofollow">قائمة البريد الالكتروني لـِ wp-hackers</a>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_107" style=""><span class="com">/**
* This will log all errors notices and warnings to a file called debug.log in
* wp-content (if Apache does not have write permission, you may need to create
* the file first and set the appropriate permissions (i.e. use 666) )
*/</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG'</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">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_LOG'</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">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_DISPLAY'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'display_errors'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	توجد نسخة أخرى مُحسنة من مايكل ليتل ضمن <a data-ss1625063328="1" href="http://groups.google.com/group/manchester-wordpress-user-group/msg/dcab0836cabc7f76" rel="external nofollow">مجموعة مانشستر لمستخدم ووردبريس</a>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_109" style=""><span class="com">/**
* This will log all errors notices and warnings to a file called debug.log in
* wp-content only when WP_DEBUG is true. if Apache does not have write permission,
* you may need to create the file first and set the appropriate permissions (i.e. use 666).
*/</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG'</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"> </span><span class="com">// Or false</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> WP_DEBUG </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_LOG'</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">
    define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_DISPLAY'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
    </span><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'display_errors'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يمتلك ووردبريس ثلاثة ثوابت يبدو أن لها نفس الوظيفة ظاهريًا وهذا يُسبب إشكالية. تذكر أولًا أن WP_DEBUG لا يفعل أي شيء مع ثابتي التنقيح الآخرين عند احتوائه على قيمة false. طبعًا أيًا كانت إعدادات بي اتش بي، فستكون هي السائدة إلا error_reporting حيث يعطيها ووردبريس القيمة 4983 في حال كان WP_DEBUG مُعرف بقيمة false. ثانيًا، حتى عند امتلاك WP_DEBUG على قيمة true، لا يعمل الثابتين الآخرين أي شيء إلا عند إسناد قيمة true لهما؛ أما في حال ضُبطا على قيمة false، فلن تتغير إعدادات <a data-ss1625063328="1" href="https://wiki.hsoub.com/PHP" rel="external">بي اتش بي</a>.
</p>

<p>
	على سبيل المثال، إذا احتوى ملف php.ini على التوجيه 'display_errors'='On' ولكن لديك ضمن ملف wp-config.php التعريف التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_112" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="pun">‘</span><span class="pln">WP_DEBUG_DISPLAY</span><span class="pun">’,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">)</span></pre>

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

<p>
	تستطيع استخدام الكود البرمجي التالي لمنصة ووردبريس لديك في مرحلة التثبيت ضمن ملف wp-config.php بالرغم أن جزء منه يبدو زائدًا عن الحاجة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_115" style=""><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'log_errors'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'On'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="lit">@ini_set</span><span class="pun">(</span><span class="pln"> </span><span class="str">'display_errors'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Off'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DISABLE_FATAL_ERROR_HANDLER'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span><span class="pln">   </span><span class="com">// 5.2 and later</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_LOG'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_DEBUG_DISPLAY'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	الملف الافتراضي لسجل التنقيحات هو ‎/wp-content/debug.log"‎". إن وضع سجلات الأخطاء في مسار يُمكن الوصول له، هو خطأٌ أمني، لذلك من الأفضل أن تُوضع سجلاتك في مسار أعلى من جذر الموقع، ولكن إن كنت لا تستطيع فعل ذلك، غيّر صلاحيات ملف السجل إلى 600 مع إضافة ما يلي إلى ملف "htaccess." الموجود في مسار تثبيت ووردبريس الرئيسي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_117" style=""><span class="tag">&lt;Files</span><span class="pln"> </span><span class="atn">debug</span><span class="pln">.</span><span class="atn">log</span><span class="tag">&gt;</span><span class="pln">
    Order allow,deny
    Deny from all
</span><span class="tag">&lt;/Files&gt;</span></pre>

<p>
	يمنع هذا أي شخص من دخول الملف من خلال بروتوكول HTTP، أما بالنسبة لك فتستطيع الاطلاع على ملف السجل من خلال تنزيله باستخدام اتصال FTP مع خادمك.
</p>

<h3>
	زيادة الذاكرة المخصصة من أجل بي اتش بي
</h3>

<p>
	يسمح لك WP_MEMORY_LIMIT بتحديد قيمة الذاكرة التي يستطيع بي اتش بي استهلاكها، وهي ضرورية جدًا في حال كنت تتلقى رسالة مثل "Allowed memory size of xxxxxx bytes exhausted".
</p>

<p>
	يستطيع هذا الثابت رفع ذاكرة بي اتش بي من أجل ووردبريس فقط، ويحاول ووردبريس افتراضيًا رفع الذاكرة المحجوزة من أجل بي اتش بي إلى 40 ميجا بايت (انظر الكود في بداية ملف ‎/wp-includes/default-constants.php"‎") للموقع الواحد، و64 ميجا بايت للمواقع المتعددة. لذلك يجب استخدام قيمة أعلى من 40 أو 64 ميجا بايت عند استخدام هذا الثابت ضمن ملف wp-config.php.
</p>

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

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: لا تسمح بعض الاستضافات برفع حدود ذاكرة بي اتش بي تلقائيًا، وفي هذه الحالة يجب عليك التواصل مع فريق دعم الاستضافة لزيادة حدود ذاكرة بي اتش بي، حيث تُحددها العديد من الاستضافات بقيمة 8 ميجا بايت.
	</p>
</blockquote>

<p>
	لرفع ذاكرة بي اتش بي إلى 64 ميجا بايت:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_120" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_MEMORY_LIMIT'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'64M'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	لرفع ذاكرة بي اتش بي إلى 96 ميجا بايت:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_122" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_MEMORY_LIMIT'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'96M'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	وتتطلب المهام الإدارية كمية ذاكرة أكبر من المهام العادية. يمكن زيادة الذاكرة أو إنقاصها عند استخدام لوحة تحكم المدير باستخدام WP_MEMORY_LIMIT عبر تعريف WP_MAX_MEMORY_LIMIT.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_124" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_MAX_MEMORY_LIMIT'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'256M'</span><span class="pln"> </span><span class="pun">);</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: يجب وضع العبارة السابقة قبل تضمين ملف wp-settings.php.
	</p>
</blockquote>

<h3>
	ملفات التخزين المؤقت Cache
</h3>

<p>
	يُستخدم سكربت wp-content/advanced-cache.php عند إعطاء قيمة true لِـ WP_CACHE عند تنفيذ الملف wp-settings.php.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_126" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_CACHE'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	جدولي المستخدم العادي والمستخدم المخصص
</h3>

<p>
	تُشير CUSTOM_USER_TABLE وCUSTOM_USER_META_TABLE إلى عدم استخدام جداول المستخدم المخصص وجداول usermeta العادية من قِبل ووردبريس، إنّما تُستخدم هذه القيم أو الجداول لتخزين معلومات المستخدم.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_128" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'CUSTOM_USER_TABLE'</span><span class="pun">,</span><span class="pln"> $table_prefix</span><span class="pun">.</span><span class="str">'my_users'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'CUSTOM_USER_META_TABLE'</span><span class="pun">,</span><span class="pln"> $table_prefix</span><span class="pun">.</span><span class="str">'my_usermeta'</span><span class="pln"> </span><span class="pun">);</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: يُنشَأ جدول usermata لكل قاعدة بيانات مع الصلاحيات المرتبطة بكلٍ منها حتى عند ضبط CUSTOM_USER_META_TABLE يدويًا. حيث يُضيف مُثبِّت ووردبريس افتراضيًا الصلاحيات لأول مستخدم (ID #1)، وعليك إدارة الصلاحيات لكل واحد ضمن الموقع من خلال إضافة plugin أو دالة مخصصة، وفي حال عدم إعداد هذا، فستواجه أخطاءً في الصلاحيات ومشاكل في تسجيل الدخول.
	</p>
</blockquote>

<p>
	من السهل اعتماد CUSTOM_USER_TABLE عند إعداد أول نسخة من موقع ووردبريس، حيث تشير العبارات المُعرفة في ملف wp-config.php للنسخة الأولى إلى مكان تخزين بيانات wp-users افتراضيًا، وبعد الانتهاء من إعداد أول نسخة ووردبريس ستحتاج لنسخ ملف wp-config.php للنسخة الثانية مع تعديل في المتغير ‎$table_prefix"‎"، وانتبه لعدم استخدام عنوان بريدٍ إلكتروني موجود سلفًا في النسخة الأولى. حالما تنتهي من عملية التثبيت تستطيع تسجيل الدخول باستخدام حساب المدير المُولّد تلقائيًا وكلمة المرور، وعليك ترقية حسابك العادي بعد ذلك إلى مدير، ثم تسجيل خروج من حساب المدير وإعادة تسجيل الدخول بحسابك وحذف حساب المدير، وعندئذٍ تستطيع ترقية بقية الحسابات كما تريد.
</p>

<h3>
	اللغة ومسار اللغة
</h3>

<p>
	تسمح نسخة ووردبريس 4.0 بتغيير اللغة ضمن <a data-ss1625063328="1" href="https://wordpress.org/support/article/administration-screens/" rel="external nofollow">لوحة تحكم ووردبريس</a>، من خلال التوجّه إلى الإعدادات ثم عام، واختر لغة الموقع.
</p>

<h4>
	نسخة ووردبريس 3.9.6 وما قبل
</h4>

<p>
	يُعرِّف WPLANG اسم لغة ملف الترجمة ‎.mo"‎"، بينما يُعرف WP_LANG_DIR مسار تواجد ملف ‎.mo"‎". يبحث ووردبريس أولًا في المسار wp-content/languages في حال لم يكن WP_LANG_DIR مُعرفًا، ثم يبحث في includes/languages عن ملف ‎.mo"‎" المُعرف من قِبل ملف WPLANG.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_130" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WPLANG'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'de_DE'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_LANG_DIR'</span><span class="pun">,</span><span class="pln"> dirname</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">'wordpress/languages'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	لمعرفة كود اللغة WPLANG، انظر إلى الكود الموجود ضمن عمود WP local فهو ما تحتاجه.
</p>

<h3>
	حفظ الاستعلامات لتحليلها
</h3>

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

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: سيؤثر هذا على أداء موقعك لذا لابد من تعطيل هذه الميزة بعد الانتهاء من البحث عن المشاكل.
	</p>
</blockquote>

<p>
	أولًا، عليك إضافة السطر التالي لِملف wp-config.php:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_132" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'SAVEQUERIES'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	ثم أضف التالي للتذييل ضمن القالب الخاص بموقعك:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_134" style=""><span class="pun">&lt;?</span><span class="pln">php
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> current_user_can</span><span class="pun">(</span><span class="pln"> </span><span class="str">'administrator'</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">
    </span><span class="kwd">global</span><span class="pln"> $wpdb</span><span class="pun">;</span><span class="pln">
    echo </span><span class="str">"&lt;pre&gt;"</span><span class="pun">;</span><span class="pln">
    print_r</span><span class="pun">(</span><span class="pln"> $wpdb</span><span class="pun">-&gt;</span><span class="pln">queries </span><span class="pun">);</span><span class="pln">
    echo </span><span class="str">"&lt;/pre&gt;"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

<h3>
	تجاوز صلاحيات الملف الافتراضية
</h3>

<p>
	يسمح FS_CHMOD_DIR وFS_CHNOD_FILE بتجاوز صلاحيات الملف الافتراضية، حيث طُوّر هذين المتغيرين استجابةً لمشكلة فشل وظيفة تحديث ووردبريس مع استضافات تعمل ضمن suexec. ويمكن لهذين المتغيرين حل مشكلة الصلاحيات المقيّدة (مثال 400) في حال استخدامها من قِبل مضيف أو عند عدم السماح لمضيف بالوصول للملفات التي تمتلك صلاحيات مجموعة أو صلاحيات عامة.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_136" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FS_CHMOD_DIR'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="lit">0755</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> </span><span class="pun">~</span><span class="pln"> umask</span><span class="pun">()</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FS_CHMOD_FILE'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="lit">0644</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> </span><span class="pun">~</span><span class="pln"> umask</span><span class="pun">()</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_138" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FS_CHMOD_DIR'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="lit">02755</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> </span><span class="pun">~</span><span class="pln">umask</span><span class="pun">()</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: القيم ‘0755’ و’02755’ هي قيم بترميز ثماني، فيجب أن تبدأ بصفر ولا تُحاط بإشارة اقتباس مفردة. ألقِ نظرةً على <a data-ss1625063328="1" href="https://codex.wordpress.org/Changing_File_Permissions" rel="external nofollow">تغيير صلاحيات الملف</a>.
	</p>
</blockquote>

<h3>
	ثوابت ترقية ووردبريس
</h3>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: استخدم أقل عدد ممكن من الثوابت التالية لإصلاح مشاكل التحديث.
	</p>
</blockquote>

<p>
	إن أكثر المشاكل التي تتطلب منك تعريف بعض من هذه الثوابت هي:
</p>

<ul>
	<li>
		<p>
			تشغيل المضيف مع إعداد تثبيت خاص يتضمن ارتباطات رمزية symlinks، عندها ستضطر لتعريف ثوابت مرتبطة بالمسارات FTP_BASE وFTP_CONTENT_DIR وFTP_PLUGIN_DIR، ويكفي عادةً تعريف FTP_BASE.
		</p>
	</li>
	<li>
		<p>
			تتضمن بعض عمليات تثبيت بي اتش بي وجود إضافة PHP FTP غير المتوافقة مع بعض خوادم FTP وفي ظل هذه الظروف النادرة قد تُضطر لتعريف FS_METHOD وإسناد قيمة ftpsockets له.
		</p>

		<p>
			الثوابت التالية هي ثوابت فعلية لتحديثات ووردبريس:
		</p>
	</li>
	<li>
		<p>
			تفرض FS_METHOD طريقة ملفات النظام، حيث يجب أن تكون إما direct، أو ssh2، أو ftpext، أو ftpsockets. ويجب عليك تغيير قيمة هذا الثابت فقط عند مواجهتك لمشاكل أثناء التحديث، وفي حال استمرار المشكلة، فعليك إعادته لقيمته السابقة أو إزالته، وستُحل المشكلة غالبًا عند استخدام ftpsockets في حال فشلت الطريقة المختارة تلقائيًا.
		</p>
	</li>
	<li>
		<p>
			* الخيار الأول direct لإجبار النظام على استخدام طلبات دخل وخرج للملف مباشرةً ضمن بي اتش بي، ولكن هذا الخيار مليء بالمشاكل الأمنية في حال تفعيله ضمن استضافة ضعيفة من الناحية الأمنية، ويجري اختياره تلقائيًا في حال كان مناسبًا.
		</p>
	</li>
	<li>
		<p>
			* الخيار الثاني ssh2 لإجبار النظام على استخدام إضافة <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> PHP إن كانت مُثبتة.
		</p>
	</li>
	<li>
		<p>
			* الخيار الثالث ftpext لإجبار النظام على استخدام إضافة FTP PHP للدخول باستخدام بروتوكول FTP.
		</p>
	</li>
	<li>
		<p>
			* الخيار الرابع ftpsockets والذي يَستخدم صف مقابس بي اتش بي للدخول باستخدام بروتوكول FTP.
		</p>
	</li>
	<li>
		<p>
			FTP_BASE: وهو المسار الكامل لمجلد تثبيت ووردبريس الرئيسي.
		</p>
	</li>
	<li>
		<p>
			FTP_CONTENT_DIR: وهو المسار الكامل للمجلد wp-content لتثبيت ووردبريس.
		</p>
	</li>
	<li>
		<p>
			FTP_PLUGIN_DIR: وهو المسار الكامل لمجلد الإضافات plugins لتثبيت ووردبريس.
		</p>
	</li>
	<li>
		<p>
			FTP_PUBKEY: وهو المسار الكامل للمفتاح العام <a data-ss1625063328="1" href="https://academy.hsoub.com/programming/general/%D8%AF%D9%84%D9%8A%D9%84-%D8%A8%D8%B5%D8%B1%D9%8A-%D9%84%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D9%86%D9%81%D8%A7%D9%82-ssh-r1249/" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr></a> الخاص بك.
		</p>
	</li>
	<li>
		<p>
			FTP_PRIKEY: وهو المسار الكامل للمفتاح الخاص <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> الخاص بك.
		</p>
	</li>
	<li>
		<p>
			FTP_USER: إما اسم مستخدم FTP أو اسم مستخدم <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> ولا فرق في استخدام أيٍ منهما غالبًا، لذا استخدم الأنسب لنوع التحديث الذي ترغب بالقيام به.
		</p>
	</li>
	<li>
		<p>
			FTP_PASS: كلمة المرور لاسم المستخدم الموجود في FTP_USER. إن كنت تستخدم مفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> عام يُمكن حذف هذا الثابت.
		</p>
	</li>
	<li>
		<p>
			FTP_HOST: وهو دمج اسم المُتضيف مع رقم المنفذ hostname:port لِخادم <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>/FTP. حيث أن المنفذ الافتراضي من أجل FTP هو 21، أما الافتراضي من أجل <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> هو 22.
		</p>
	</li>
	<li>
		<p>
			FTP_SSL: يكون true للاتصالات ذات شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> في حال كانت مدعومة (غير متوفرة في كل الخوادم). وهو من أجل Secure FTP وليس <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> SFTP.
		</p>
	</li>
</ul>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_141" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FS_METHOD'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ftpext'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_BASE'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'/path/to/wordpress/'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_CONTENT_DIR'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'/path/to/wordpress/wp-content/'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_PLUGIN_DIR '</span><span class="pun">,</span><span class="pln"> </span><span class="str">'/path/to/wordpress/wp-content/plugins/'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_PUBKEY'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'/home/username/.<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr>/id_rsa.pub'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_PRIKEY'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'/home/username/.<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr>/id_rsa'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_USER'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'username'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_PASS'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'password'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_HOST'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ftp.example.org'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FTP_SSL'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	يجب ضبط FTP_HOST في بعض التشكيلات بقيمة localhost لتجنب أخطاء 503 عند محاولة تحديث الإضافات أو ووردبريس نفسه.
</p>

<h4>
	تفعيل الدخول والترقية من خلال <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>
</h4>

<p>
	توجد طريقتان للترقية باستخدام SSH2، هما:
</p>

<ul>
	<li>
		الطريقة الأولى: باستخدام <a data-ss1625063328="1" href="https://wordpress.org/plugins/ssh-sftp-updater-support/" rel="external nofollow">إضافة دعم لمُحدِّث <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> SFTP</a>.
	</li>
	<li>
		الطريقة الثانية: من خلال استخدام مطوّر SSH2 مبني داخليًا والذي يتطلب تثبيت إضافة pecl SSh2.
	</li>
</ul>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_144" style=""><span class="pln">pecl install ssh2</span></pre>

<p>
	ستحتاج لتعديل إعدادات بي اتش بي الخاصة بعد تثبيت pecl ssh2 لتحميل هذه الإضافة تلقائيًا.
</p>

<p>
	تُوفَّر pecl ضمن حزمة pear في معظم توزيعات لينكس، ومن أجل تثبيت pecl ضمن ريدهات Redhat/فيدورا Fedora/ سينتوس CentOS:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_147" style=""><span class="pln">yum </span><span class="pun">-</span><span class="pln">y install php</span><span class="pun">-</span><span class="pln">pear</span></pre>

<p>
	لتثبيت pecl ضمن نظام ديبيان Debian/ اوبنتو Ubuntu:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_149" style=""><span class="pln">apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install php</span><span class="pun">-</span><span class="pln">pear</span></pre>

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

<h3>
	استخدام Cron بديل
</h3>

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

<p>
	تتضمن هذه الطريقة بعض المخاطر لأنها تعتمد على خدمة غير أساسية ضمن ووردبريس.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_151" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'ALTERNATE_WP_CRON'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	تعطيل Cron وزمن انتهائه
</h3>

<p>
	تستطيع تعطيل عمليات Cron نهائيًا من خلال إسناد قيمة true للثابت DISABLE_WP&lt;_CRON.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_153" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DISABLE_WP_CRON'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	للتأكد من عدم تشغيل عمليات cron إلا مرةً كل WP_CRON_LOCK_TIMEOUT ثانية.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_155" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_CRON_LOCK_TIMEOUT'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">60</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	ثوابت إضافية معرفة
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_157" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'COOKIEPATH'</span><span class="pun">,</span><span class="pln"> preg_replace</span><span class="pun">(</span><span class="pln"> </span><span class="str">'|https?://[^/]+|i'</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln"> get_option</span><span class="pun">(</span><span class="pln"> </span><span class="str">'home'</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/'</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'SITECOOKIEPATH'</span><span class="pun">,</span><span class="pln"> preg_replace</span><span class="pun">(</span><span class="pln"> </span><span class="str">'|https?://[^/]+|i'</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln"> get_option</span><span class="pun">(</span><span class="pln"> </span><span class="str">'siteurl'</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/'</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'ADMIN_COOKIE_PATH'</span><span class="pun">,</span><span class="pln"> SITECOOKIEPATH </span><span class="pun">.</span><span class="pln"> </span><span class="str">'wp-admin'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'PLUGINS_COOKIE_PATH'</span><span class="pun">,</span><span class="pln"> preg_replace</span><span class="pun">(</span><span class="pln"> </span><span class="str">'|https?://[^/]+|i'</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln"> WP_PLUGIN_URL </span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'TEMPLATEPATH'</span><span class="pun">,</span><span class="pln"> get_template_directory</span><span class="pun">()</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'STYLESHEETPATH'</span><span class="pun">,</span><span class="pln"> get_stylesheet_directory</span><span class="pun">()</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	تفريغ سلة المهملات
</h3>

<p>
	يتحكم هذا الثابت بعدد الأيام التي يحافظ فيها ووردبريس على المنشورات والصفحات والمرفقات والتعليقات المحذوفة ضمن سلة المهملات قبل حذفها نهائيًا. عدد الأيام الافتراضي هو 30 يوم:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_159" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'EMPTY_TRASH_DAYS'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">30</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="com">// 30 days</span></pre>

<p>
	يجب ضبط عدد الأيام إلى الصفر من أجل تعطيل سلة المهملات.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_161" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'EMPTY_TRASH_DAYS'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">);</span><span class="pln"> </span><span class="com">// Zero days</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: لا يسأل ووردبريس عن تأكيد عملية الحذف النهائي عند استخدام هذه الإعدادات.
	</p>
</blockquote>

<h3>
	التحسين التلقائي لقاعدة البيانات
</h3>

<p>
	هناك دعم لعملية إصلاح تلقائي لقاعدة البيانات، والتي تستطيع تفعيلها من خلال إضافة التعريف التالي ضمن ملف Wp-config.php.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: يجب تفعيل هذه الخاصية فقط عند الحاجة ثم تعطيلها عند الانتهاء من استخدامها. لا يحتاج المستخدم عند تفعيل هذه الميزة لتسجيل دخول كي يتمكن من الوصول لهذه الوظيفة، حيث أن الغرض الرئيسي منها هو إصلاح قاعدة بيانات مُعطلة ولا يمكن للمستخدمين تسجيل الدخول أساسًا عندما تكون قاعدة البيانات معطلة.
	</p>
</blockquote>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_163" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_ALLOW_REPAIR'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	يمكنك ايجاد السكربت ضمن
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_165" style=""><span class="pun">{</span><span class="pln">$your_site</span><span class="pun">}/</span><span class="pln">wp</span><span class="pun">-</span><span class="pln">admin</span><span class="pun">/</span><span class="pln">maint</span><span class="pun">/</span><span class="pln">repair</span><span class="pun">.</span><span class="pln">php
</span></pre>

<h3>
	عدم ترقية الجداول العامة DO_NOT_UPGRADE_GLOBAL_TABLES
</h3>

<p>
	يمنع تعريف DO_NOT_UPGRADES_GLOBAL_TABLES دوال الترقية و"‎"dbDelta()‎ من إجراء استعلامات ضخمة للجداول المعّرفة على أنها عامة global.
</p>

<p>
	يمكن للمواقع التي تمتلك جداول عامة (بالأخص جداول users وusermeta)، والمواقع التي تشارك جداول المستخدم مع bbpress، ومواقع ووردبريس أخرى، عدم السماح بتغيير هذه الجداول أثناء الترقية من خلال إسناد قيمة true للثابت DO_NOT_UPGRADES_GLOBAL_TABLES. وتستغرق تعليمات ALTER، وDELETE، وUPDATE وقتًا طويلًا، لذلك تتفادى المواقع الضخمة هذه التعليمات مثل جزء من عملية الترقية وتُعالج لوحدها.
</p>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_167" style=""><span class="pln">  define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DO_NOT_UPGRADE_GLOBAL_TABLES'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	عرض كل الثوابت المعرفة
</h3>

<p>
	تمتلك لغة بي اتش بي دالةَ تُعيد مصفوفةً لكل الثوابت المُعرّفة حاليا مع قيمها.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_169" style=""><span class="pln">print_r</span><span class="pun">(</span><span class="pln"> </span><span class="lit">@get_defined_constants</span><span class="pun">()</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	تعطيل محرر القالب والإضافة
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_171" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DISALLOW_FILE_EDIT'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: من الممكن أن تتأثر وظيفة بعض الإضافات باستخدام"‎"current_user_can('edit_plugins')‎ ضمن أكوادها. يجب على مطوّر الإضافة تجنُّب التحقق من هذه الصلاحية أو على الأقل التحقق من كون هذا الثابت مضبوطًا وعرض رسالة خطأ مناسبة.
	</p>
</blockquote>

<p>
	انتبه في حال لم تعمل الإضافة فقد يكون هذا هو السبب.
</p>

<h3>
	تعطيل تحديث وتثبيت الإضافات والقوالب
</h3>

<p>
	يمنع هذا التعطيل المستخدِم من الاستفادة من وظائف تحديث وتثبيت الإضافة والقالب ضمن لوحة تحكم ووردبريس، كما أن ضبط هذا الثابت يُعطل محرر الإضافة ومحرر القالب (ليس عليك تفعيل DISALLOW_FILE_MODES وDISALLOW_FILE_EDIT، حيث تُقدم DISALLOW_FILE_MODES نفس التأثير).
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_173" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'DISALLOW_FILE_MODS'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	طلب <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> للوحة تحكم المدير وتسجيل الدخول
</h3>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p data-gramm="false">
		<strong>ملاحظة</strong>: توقف ووردبريس <a data-ss1625063328="1" href="https://codex.wordpress.org/Version_4.0" rel="external nofollow">4.0</a> عن استخدام FORCE_SSL_LOGIN لذلك من فضلك استخدم FORCE_SSL_ADMIN.
	</p>
</blockquote>

<p>
	يُستخدم FORCE_SSL_ADMIN لتأمين صفحة تسجيل الدخول ولوحة التحكم، بحيث تُرسل كلمات المرور وملفات الارتباط بصورة آمنة. ألقِ نظرةً على <a data-ss1625063328="1" href="https://wordpress.org/support/article/administration-over-ssl/" rel="external nofollow">الإدارة من خلال <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr></a> لمزيدٍ من التفاصيل.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_175" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FORCE_SSL_ADMIN'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	حجب طلبات URL خارجية
</h3>

<p>
	تستطيع حجب طلبات URL خارجية من خلال إسناد قيمة true إلى WP_HTTP_BLOCK_EXTERNAL، وعندها يُسمح فقط لمدونتك وlocalhost بإجراء طلبات؛ في حين يسمح الثابت WP_ACCESSABLE_HOSTS لمضيفين آخرين بإجراء طلبات.
</p>

<p>
	تُعتمد قائمة بأسماء الاستضافات المسموح لها، بحيث يكون مفصولًا بينها بفاصلة تمامًا مثل صيغة مُستخدمة مع الثابت WP_ACCESSABLE_HOSTS.
</p>

<p>
	يمكن استخدام wildcard للنطاقات مثل ‎*.wordpress.org"‎" حيث يسمح هذا لجميع النطاقات الفرعية بإجراء طلبات.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_177" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_HTTP_BLOCK_EXTERNAL'</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">
define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'WP_ACCESSIBLE_HOSTS'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'api.wordpress.org,*.github.com'</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	تعطيل تحديثات ووردبريس التلقائية
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_179" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'AUTOMATIC_UPDATER_DISABLED'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h3>
	تعطيل تحديثات ووردبريس
</h3>

<p>
	أسهل طريقة للتلاعب بتحديثات ووردبريس هي باستخدام الثابت WP_AUTO_UPDATE_CORE:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_181" style=""><span class="com"># Disable all core updates:</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><span class="pln">

</span><span class="com"># Enable all core updates, including minor and major:</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">true</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

</span><span class="com"># Enable core updates for minor releases (default):</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="str">'minor'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	المرجع: <a data-ss1625063328="1" href="https://make.wordpress.org/core/2013/10/25/the-definitive-guide-to-disabling-auto-updates-in-wordpress-3-7/" rel="external nofollow">تعطيل التحديثات التلقائية في ووردبريس 3.7</a>
</p>

<h3>
	التخلص من تعديلات الصورة
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6680_183" style=""><span class="pln">define</span><span class="pun">(</span><span class="pln"> </span><span class="str">'IMAGE_EDIT_OVERWRITE'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="pun">);</span></pre>

<h2>
	تحقق بدقة قبل حفظ أي تغيير
</h2>

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

<p>
	اقرأ الملف الذي عدلت عليه مرتين قبل حفظه، وتحقق من عدم حذف إشارة تعليق مُفردة محيطة بقيمة المتغير عن طريق الخطأ.
</p>

<p>
	تأكد أيضًا من عدم وجود أي شيء بعد إشارة إغلاق وسم بي اتش بي، إذ يجب أن يكون آخر رمز تراه ضمن الملف هو '?&gt;' ولا أي شيء آخر ولا حتى فراغات.
</p>

<p>
	تستطيع حفظ الملف من خلال اختيار ملف ثم حفظ باسم، ثم كتابة الاسم wp-config.php واختيار المسار الرئيسي لتثبيت ووردبريس موقعًا لحفظ الملف، بعدها ارفع الملف لخادمك لتصبح جاهزًا لتثبيت ووردبريس.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a data-ss1625063328="1" href="https://wordpress.org/support/article/editing-wp-config-php/" rel="external nofollow">Editing wp-config.php</a> من موقع wordpress.org.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/wordpress/" rel="">تعلم ووردبريس</a>
	</li>
	<li>
		<a data-ss1625063328="1" href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1248/" rel="">كيفية تثبيت ووردبريس</a><a data-ss1625063328="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1224/" rel="">إدارة الإضافات في ووردبريس</a>
	</li>
	<li>
		<a data-ss1625063328="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%A7%D8%B1%D8%B6-%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%83%D9%8A%D9%81-%D8%AA%D9%83%D8%AA%D8%B4%D9%81%D9%87%D8%A7-%D9%88%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D9%81%D8%B9%D9%84-%D8%AD%D9%8A%D8%A7%D9%84%D9%87%D8%A7-r727/" rel="">تعارض إضافات ووردبريس: كيف تكتشفها وماذا تفعل حيالها</a>
	</li>
	<li>
		<a data-ss1625063328="1" href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%AD%D9%88%D9%91%D9%84-%D9%82%D8%A7%D9%84%D8%A8-html-%D8%B3%D8%A7%D9%83%D9%86-%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-%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%AD%D9%88%D9%84-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D9%88%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D9%88%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D9%88%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%8A%D9%82%D8%A7%D8%AA-r601/" rel="">كيف تحوّل قالب HTML ساكن إلى قالب ووردبريس متجاوب: ملفات حول الموقع والاتصال والبحث والتعليقات</a>
	</li>
	<li>
		<a data-ss1625063328="1" href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%A3-%D8%B5%D9%81%D8%AD%D8%A9-%D8%AE%D8%B7%D8%A3-404-%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r626/" rel="">كيف تنشأ صفحة خطأ 404 مخصصة في ووردبريس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1252</guid><pubDate>Sun, 27 Jun 2021 15:01:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1248/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_06/60c8597c155e5_--.png.ff33277db9487a3798f156171fa05f41.png" /></p>
<p>
	يشتهر ووردبريس بسهولة تثبيته، حيث تكون عملية تثبيته غالبًا بسيطةً ولا تستغرق أكثر من 5 دقائق. يقدم حاليًا <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/apps/web/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AD%D8%AC%D8%B2-%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D9%88%D8%B1%D8%A8%D8%B7%D9%87%D8%A7-%D9%85%D8%B9-%D8%A7%D8%B3%D9%85-%D9%86%D8%B7%D8%A7%D9%82-%D9%85%D8%AA%D8%AC%D8%B1%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r392/" rel="">العديد من مزودي الاستضافات</a> مجموعة أدوات مثل Fantastico، <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/apps/web/wordpress/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D9%85%D8%B5%D9%88%D8%B1-%D9%84%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%88%D8%A7%D9%84%D8%A8%D8%AF%D8%A1-%D8%A8%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%85%D8%AA%D8%AC%D8%B1-%D9%88%D9%88%D9%83%D9%88%D9%85%D8%B1%D8%B3-r393/" rel="">لتثبيت ووردبريس</a> تلقائيًا، ولكن إن كنت ممن يرغبون بتثبيت ووردبريس بأنفسهم فسيرشدك هذا الدليل لتصل لهدفك.
</p>

<h2 id="-">
	استضافة ووردبريس: أمور يجب معرفتها قبل تثبيت ووردبريس
</h2>

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

<h3 id="-">
	النظام الذي ينصح به
</h3>

<p>
	يُنصح باستخدام منصة مكونة من نظام تشغيل لينكس وخادم ويب <a href="https://academy.hsoub.com/devops/servers/web/apache/%D9%81%D9%8A%D8%AF%D9%8A%D9%88-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%B6%D8%A8%D8%B7-%D8%AE%D8%A7%D8%AF%D9%85-apache-r407/" rel="">Apache</a> أو <a href="https://academy.hsoub.com/devops/servers/web/nginx/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-nginx-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-1804-r434/" rel="">NGINX</a>، لكن أي خادم يدعم <a href="https://wiki.hsoub.com/PHP" rel="external">PHP</a> و MySQL يفي بالغرض، كما يجب أن يدعم خادمك وضع mod_rewrite أو أي بديل عنه من أجل الروابط الدائمة، كما أن استضافتك تكون أكثر أمانًا عندما تعمل تطبيقات PHP مثل ووردبريس باستخدام حساب مستخدم منفصل عن الحساب الافتراضي المشترك للخادم. يجب أن تسمح استضافتك بالاتصالات البعيدة لتعمل معظم ميزات ووردبريس، فعندما تحجب الاستضافة اتصالات HTTP الخارجة سوف تتوقف كثير من مكونات ووردبريس عن العمل.
</p>

<h3>
	متطلبات يجب تحقيقها من جهة الخادم
</h3>

<ul>
	<li>
		نسخة PHP 7.4 أو أعلى.
	</li>
	<li>
		نسخة MySQL 5.6 أو MariaDB 10.1 أو أعلى.
	</li>
</ul>

<p>
	استعِن بصفحة <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/about/requirements/" rel="external nofollow">المتطلبات الرسمية</a> لتفاصيل كاملة عن المتطلبات الأخرى الواجب على خادمك تحقيقها.
</p>

<h3 id="-">
	مزودو خدمة الاستضافة
</h3>

<p>
	يسهل العثور على استضافة توفر الشروط المذكورة في الأعلى بعملية بحث بسيطة ضمن محركات البحث، لكن إذا كنت تبحث عن اقتراحات لاستضافات تستطيع الاطلاع على:
</p>

<ul>
	<li>
		<a href="https://wordpress.org/hosting/" rel="external nofollow">الاستضافات التي ينصح بها ووردبريس</a>: تدعم هذه الاستضافات ووردبريس في كثير من الجوانب.
	</li>
	<li>
		ابحث ضمن وسم <a href="https://academy.hsoub.com/tags/%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9/" rel="">استضافة</a> في أكاديمية حسوب عن أي مقالات تتحدث عن الاستضافات للتعرف عليها أكثر.
	</li>
	<li>
		تباحث مع أعضاء <a href="https://academy.hsoub.com/questions/c9-apps/" rel="">أكاديمية حسوب</a> أو <a href="https://io.hsoub.com/webdev" rel="external">مجتمع مطوري حسوب IO</a> واسألهم عن رأيهم.
	</li>
</ul>

<h3>
	المتطلبات في حال استخدام الخادم المحلي
</h3>

<ul>
	<li>
		حساب دخول (اسم المستخدم وكلمة المرور) للخادم من خلال بروتوكول FTP أو Shell.
	</li>
	<li>
		محرر نصي.
	</li>
	<li>
		FTP.
	</li>
	<li>
		متصفح الويب المفضل لديك.
	</li>
</ul>

<p>
	يجب عليك تعلُّم استخدام محرر النصوص لتعديل ملف الإعداد الرئيسي، وفي حال كنت مستخدمًا لويندوز فسيفي المحرر Notepad بالغرض؛ أما في حال كنت مستخدمًا لنظام OS X، فيُمكنك الاعتماد على TextEdit. ربما تحتاج لاحقًا لتعديل ملفات القالب (ألقِ نظرة على <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://codex.wordpress.org/Templates" rel="external nofollow">القوالب</a> كمرجعية). تستطيع تعديل هذه الملفات طبعًا من خلال <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/apps/web/wordpress/%D9%84%D9%85%D8%AD%D8%A9-%D8%B9%D9%86-%D9%84%D9%88%D8%AD%D8%A9-%D8%AA%D8%AD%D9%83%D9%85-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r394/" rel="">لوحة تحكم</a> ووردبريس ولكن استخدام محرر نُصوص أفضل وهذا ما يُنصح به.
</p>

<p>
	يجب أن تكون مُتمكنًا من استخدام برنامج FTP لرفع الملفات وضبط صلاحيات الملف (اختياري)، ومن ضمن الخيارات برنامج <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/apps/web/wordpress/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-filezilla-%D9%88-phpmyadmin-%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%88%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r367/" rel="">FileZilla</a>.
</p>

<p>
	والآن، أنت جاهز للانطلاق بعملية التثبيت.
</p>

<h2>
	تعليمات أساسية
</h2>

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

<ol>
	<li>
		نزّل وفك ضغط ملف الووردبريس إن لم يكن لديك.
	</li>
	<li>
		أنشئ قاعدة بيانات ووردبريس على خادمك إضافة إلى مُستخدم <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/devops/servers/databases/mysql/" rel="">MySQL</a> (أو MariaDB) يمتلك كل الصلاحيات للدخول لها والتعديل عليها.
	</li>
	<li>
		ابحث عن الملف wp-config-sample.php وأعد تسميته إلى wp-config.php ثم عدّل محتويات الملف (ألق نظرةً على <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D9%85%D9%84%D9%81-wp-configphp-%D9%84%D8%B6%D8%A8%D8%B7-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1252/" rel="">تعديل ملف wp-config.php</a>) وأضِف معلومات قاعدة البيانات الخاصة بك. ملاحظة: الخطوة 3 اختيارية وفي حال كنت غير مرتاح لإعادة تسمية الملفات، فيمكنك تجاوزها وينشئ برنامج التثبيت ملف wp-config.php خاص بك.
	</li>
	<li>
		ارفع ملفات ووردبريس للمكان المطلوب ضمن خادمك:
	</li>
</ol>

<ul>
	<li>
		يجب عليك رفع ملفات ووردبريس إلى المسار الرئيسي للخادم إن أردت استخدام ووردبريس على النطاق الرئيسي (مثال: https://example.com).
	</li>
	<li>
		إن أردت تثبيت ووردبريس ضمن مسار فرعي (مثال: <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://example.com/blog)%D8%8C" ipsnoembed="true" rel="external nofollow">http://example.com/blog)،</a> فعليك إنشاء مجلد باسم blog ضمن المسار الرئيسي للنطاق على الخادم ورفع ملفات ووردبريس إليه عبر بروتوكول FTP.
	</li>
	<li>
		ملاحظة: إذا كان لبرنامج FTP client لديك خيار تحويل أسماء الملفات إلى أحرف لاتينية صغيرة، فعليك تعطيل هذا الخيار (مثال: تحويل الاسم Name إلى name).
	</li>
</ul>

<ol start="5">
	<li>
		ابدأ بتثبيت ووردبريس من خلال زيارة رابط الموقع عبر المتصفح، حيث يكون الرابط هو النطاق الرئيسي في حال رفعك الملفات للمسار الرئيسي للخادم (http://example.com) أو المسار الفرعي كما ذكرنا سابقًا في حال استخدمت مسار فرعي (http://example.com/blog).
	</li>
</ol>

<p>
	هذا كل شيء! وهكذا تكون انتهيت من تثبيت ووردبريس. وفيما يلي نُفصّل أكثر بالتعليمات:
</p>

<h2>
	تعليمات مفصلة عن عملية تثبيت ووردبريس
</h2>

<p>
	لنبدأ تثبيت ووردبريس باتباع الخطوات الآتية.
</p>

<h3>
	الخطوة الأولى: تنزيل وفك ضغط ملف ووردبريس
</h3>

<p>
	ابدأ ب<a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/download/" rel="external nofollow">تنزيل وفك ضغط ملف ووردبريس</a> 
</p>

<ul>
	<li>
		إن كنت سترفع ملفات ووردبريس إلى خادم بعيد، فعليك تنزيل الملف المضغوط لحزمة ووردبريس على حاسوبك من خلال المتصفح ثم فك ضغطه.
	</li>
	<li>
		إن كنت تريد استخدام FTP، تستطيع تجاوز الخطوة التالية – إذ سنتكلم عن رفع الملفات لاحقًا.
	</li>
	<li>
		إن كنت تملك آلية اتصال <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B3%D9%83%D8%B1%D8%A8%D8%AA%D8%A7%D8%AA-%D8%A7%D9%84%D8%B5%D8%AF%D9%81%D8%A9-shell-scripts-r252/" rel="">shell</a> بالخادم وليس لديك مشكلة في استخدام أدوات لوحة الأوامر، تستطيع تنزيل ملف ووردبريس مباشرةً على الخادم باستخدام الأمر wget (أو lynx أو متصفح ويب مُعتمد على لوحة الأوامر) إذا كنت تريد تجنب استخدام FTPing:
	</li>
	<li>
		<a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/latest.tar.gz" rel="external nofollow">wget</a>.
	</li>
	<li>
		ثم فُك ضغط الملف.
	</li>
</ul>

<p>
	سيُفك ضغط الملف ضمن مجلد باسم wordpress في نفس المسار الذي حملت ملف حزمة ووردبريس المضغوط إليه.
</p>

<h3>
	الخطوة الثانية: إنشاء قاعدة بيانات ومستخدم
</h3>

<p>
	إن كنت تستخدم <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/apps/web/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AD%D8%AC%D8%B2-%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D9%88%D8%B1%D8%A8%D8%B7%D9%87%D8%A7-%D9%85%D8%B9-%D8%A7%D8%B3%D9%85-%D9%86%D8%B7%D8%A7%D9%82-%D9%85%D8%AA%D8%AC%D8%B1%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r392/" rel="">مزود استضافة</a>، فغالبًا قد تم إعداد قاعدة بيانات ووردبريس لك مسبقًا أو ربما يوجد آلية تثبيت ووردبريس تلقائية لعمل ذلك.
</p>

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

<p>
	إن قررت إنشاء قاعدة البيانات يدويًا، فعليك اتباع التعليمات التالية لاستخدام <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/apps/web/wordpress/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-filezilla-%D9%88-phpmyadmin-%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%88%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r367/" rel="">phpMyAdmin</a> وإنشاء قاعدة بيانات واسم مستخدم. أنشئ <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="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/" rel="">قاعدة بيانات لووردبريس</a> للوحات تحكم، مثل: Plesk، و <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/apps/web/wordpress/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D9%88%D8%AD%D8%A9-%D8%AA%D8%AD%D9%83%D9%85-cpanel-%D9%84%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r365/" rel="">cPanel</a>، والتي تستخدم MySQL Client.
</p>

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

<h3>
	استخدام phpMyAdmin
</h3>

<p>
	اتبع التعليمات التالية إن كنت تستعمل خادم مثبت عليه phpMyAdmin لإنشاء قاعدة بيانات ووردبريس ومُستخدم تابع لها. إن كنت تعمل على حاسوبك فإن معظم توزيعات لينكس تستطيع تثبيت phpMyAdmin تلقائيًا.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			ملاحظة: التعليمات التالية مكتوبة لنسخة phpMyAdmin 4.4 لذلك قد تجد اختلافًا في واجهة المُستخدم بين نُسخ البرنامج المختلفة.
		</p>
	</div>
</blockquote>

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

<ol>
	<li>
		اختر اسمًا من أجل لقاعدة بيانات ووردبريس: إن أسماء wordpress وblog خيارات جيدة، ولكن معظم مزودي الاستضافات (بالأخص المشتركة منها) تُجبرك على استخدام اسم لقاعدة البيانات يبدأ باسم المستخدم مع إشارة . لذلك حتى وإن كنت تعمل على حاسوبك، ننصحك بالتحقق من متطلبات استضافتك كي تتبعها على حاسوبك لتتمكن من نقل قاعدة بياناتك إليها مستقبلًا دون مشاكل. أدخل اسم قاعدة البيانات المُختار ضمن حقل Create database، واختر الترتيب Collation الأفضل للغتك ونوع الترميز. يُفضل اختيار سلسلة utf8‎ في معظم الحالات وإن لم تجد لغتك فاختر utf8mb4generalci.
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="69314" data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/uploads/monthly_2021_06/001_phpMyAdmin_create_database_4.4.jpg.c3d6685901fb7d634ab16ab0384aeec0.jpg" rel="" data-fileext="jpg"><img alt="001_phpMyAdmin_create_database_4.4.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="69314" data-unique="5l2pkixap" src="https://academy.hsoub.com/uploads/monthly_2021_06/001_phpMyAdmin_create_database_4.4.jpg.c3d6685901fb7d634ab16ab0384aeec0.jpg"></a>
</p>

<ol start="2">
	<li>
		اضغط على شعار phpMyAdmin في الزاوية العلوية اليُسرى للعودة للصفحة الرئيسية، ثم اضغط على نافذة المستخدمين Users. والآن أنشئ مستخدم لقاعدة البيانات إن لم يكن هناك مُستخدم موجود سلفًا:
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="69315" data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/uploads/monthly_2021_06/002_users.jpg.ad321f0c73c836b675d44c831b38ff9d.jpg" rel="" data-fileext="jpg"><img alt="002_users.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="69315" data-unique="g3li7igy0" src="https://academy.hsoub.com/uploads/monthly_2021_06/002_users.jpg.ad321f0c73c836b675d44c831b38ff9d.jpg"></a>
</p>

<ol start="3">
	<li>
		اضغط على Add user.
	</li>
	<li>
		اختر اسم المستخدم لقاعدة البيانات (wordpress خيار جيد) وأدخله ضمن حقل User Name، ثم تأكد من اختيار Use text filed من القائمة المُنسدلة.
	</li>
	<li>
		اختر كلمة مرور آمنة وقوية، بحيث يجب أن تحتوي مزيجًا من الأحرف بالحالة الكبيرة والصغيرة وأرقام وإشارات خاصة، وأدخلها ضمن حقل Password مع التتأكد من اختيار Use text filed من القائمة المُنسدلة، ثم أعد إدخال كلمة المرور في حقل تكرار كلمة المرور.
	</li>
	<li>
		احفظ اسم المستخدم وكلمة المرور الخاصة به في مكان آمن لأنك سوف تحتاجها في خطوات لاحقة.
	</li>
	<li>
		 أبق على جميع الخيارات بحالتها الافتراضية في قسم Global privileges.
	</li>
	<li>
		  اضغط Go.
	</li>
	<li>
		عُد إلى صفحة المستخدمين واضغط على أيقونة Edit privileges للمستخدم الذي أنشأته لِووردبريس.
	</li>
	<li>
		اختر قاعدة البيانات التي أنشأتها من أجل ووردبريس ضمن قسم Database-specific privileges من خلال القائمة المنسدلة Add privileges to the following database ثم اضغط على Go.
	</li>
	<li>
		ستُحدَّث الصفحة مع صلاحيات قاعدة البيانات. اضغط على Check All لاختيار جميع الصلاحيات ثم اضغط Go.
	</li>
	<li>
		انتبه لاسم المُستضيف بجانب كلمة Server في الصفحة الناتجة، فعادةً ما يكون localhost.
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="69316" data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/uploads/monthly_2021_06/003_phpMyAdmin_server_info_4.4.jpg.a2bfa5cc479c7d94fc727145163b9596.jpg" rel="" data-fileext="jpg"><img alt="003_phpMyAdmin_server_info_4.4.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="69316" data-unique="0l8dat0xr" src="https://academy.hsoub.com/uploads/monthly_2021_06/003_phpMyAdmin_server_info_4.4.jpg.a2bfa5cc479c7d94fc727145163b9596.jpg"></a>
</p>

<h3>
	الخطوة الثالثة: إعدادات ملف wp-config.php
</h3>

<p>
	تستطيع إنشاء وتعديل ملف wp-config.php بنفسك، أو يمكنك تخطي هذه المرحلة والاعتماد على ووردبريس في إنشائه عند بدء عملية التثبيت (الخطوة الخامسة). ويجب عليك إخبار ووردبريس بمعلومات قاعدة البيانات من اسمها واسم المستخدم وكلمة المرور.
</p>

<p>
	ألق نظرةً على <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D9%85%D9%84%D9%81-wp-configphp-%D9%84%D8%B6%D8%A8%D8%B7-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1252/" rel="">تعديل ملف wp-config.php</a> لمزيد من التفاصيل والتعليمات المُفصلة لإنشاء الملف والمفتاح الأمني، والآن ارجع إلى حيث فككت ضغط ملفات ووردبريس في الخطوة الأولى وأعد تسمية الملف wp-config-sample.php للاسم wp-config.php وافتح هذا الملف باستخدام محرر نصي.
</p>

<p>
	أدخل معلومات قاعدة البيانات تحت القسم ذي العنوان التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_2476_8" style=""><span class="com">// ** MySQL settings - You can get this info from your web host ** //</span></pre>

<p>
	حيث أن:
</p>

<ul>
	<li>
		DB_NAME اسم قاعدة البيانات التي أنشأتها في الخطوة الثانية.
	</li>
	<li>
		DB_USER اسم المستخدم الذي أنشأته من أجل ووردبريس في الخطوة الثانية.
	</li>
	<li>
		DB_PASSWORD كلمة المرور التي اخترتها لاسم المستخدم في الخطوة الثانية.
	</li>
	<li>
		DB_HOST اسم المُستضيف الذي حددته في الخطوة الثانية (عادةً يكون localhost ولكن ليست قاعدة ثابتة، ألق نظرة على <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/support/article/editing-wp-config-php/#set-database-host" rel="external nofollow">بعض القيم المُحتملة للاسم DBHOST</a>). عليك إضافة (:) بعد اسم المُستضيف في حال وجود منفذ أو مقبس أو Pipe ثم أضف المعلومات اللازمة لِاسم المُستضيف.
	</li>
	<li>
		DB_CHARSET مجموعة محارف قاعدة البيانات ولا يتم تغييرها عادةً (ألق نظرةً على <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D9%85%D9%84%D9%81-wp-configphp-%D9%84%D8%B6%D8%A8%D8%B7-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1252/" rel="">تعديل ملف wp-config.php</a>).
	</li>
	<li>
		DB_COLLATE الترتيب الخاص بقاعدة البيانات وتكون فارغة عادةً (ألق نظرة على <a data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D9%85%D9%84%D9%81-wp-configphp-%D9%84%D8%B6%D8%A8%D8%B7-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1252/" rel="">تعديل ملف wp-config.php</a>).
	</li>
</ul>

<p>
	أدخل قيم المفتاح الأمني أسفل القسم ذي العنوان التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_2476_10" style=""><span class="pun">*</span><span class="pln"> </span><span class="typ">Authentication</span><span class="pln"> </span><span class="typ">Unique</span><span class="pln"> </span><span class="typ">Keys</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="typ">Salts</span><span class="pun">.</span></pre>

<p>
	الآن احفظ ملف wp-config.php.
</p>

<h3>
	الخطوة الرابعة: رفع الملفات
</h3>

<p>
	والآن يجب أن تقرر أين تريد لموقع ووردبريس أن يظهر على نطاقِك وذلك حسب مكان رفع ملفات ووردبريس:
</p>

<ul>
	<li>
		ضمن مسار الجذر الرئيسي للموقع (مثل: http://example.com)
	</li>
	<li>
		ضمن مسار فرعي للموقع (مثل: <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://example.com/blog/)" ipsnoembed="true" rel="external nofollow">http://example.com/blog/)</a>
	</li>
</ul>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<strong>ملاحظة</strong>: يتغير مكان المسار الرئيسي للموقع ضمن <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/support/article/glossary/#web-server" rel="external nofollow">الخادم</a> تبعًا لمزود الاستضافة ونظام التشغيل للخادم. إن لم تكن على دراية بهذه الأمور عليك التحقق منها مع <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/support/article/glossary#hosting-provider" rel="external nofollow">مزود الاستضافة</a> أو مدير النظام.
		</p>
	</div>
</blockquote>

<h4>
	ضمن مسار الجذر الرئيسي
</h4>

<ul>
	<li>
		عليك استخدام برنامج FTP client إن أردت رفع محتويات مجلد wordpress لخادمك (انتبه عليك رفع محتويات المجلد وليس المجلد نفسه) ضمن المسار الرئيسي لموقعك.
	</li>
	<li>
		إن كانت ملفاتك موجوة على الخادم وأنت تستخدم shell لتثبيت ووردبريس، عندها عليك نقل محتويات مجلد wordpress (انتبه عليك رفع محتويات المجلد وليس المجلد نفسه) إلى المسار الرئيسي لموقعك.
	</li>
</ul>

<h4>
	ضمن مسار فرعي
</h4>

<ul>
	<li>
		إن كنت تريد رفع الملفات للخادم الخاص بك، فيجب عليك تغيير اسم المجلد من wordpress إلى الاسم المناسب لك، ثم استخدام برنامج FTP client لرفع المجلد إلى مسار نطاق موقعك الرئيسي.
	</li>
	<li>
		في حال كنت تستخدم shell وملفاتك موجودة سلفًا على الخادم، فعندها عليك نقل المجلد wordpress إلى المسار المطلوب ضمن مسار الجذر الرئيسي للنطاق ثم تغيير اسم المجلد للاسم الذي ترغب به.
	</li>
</ul>

<h3>
	الخطوة الخامسة: البدء بتثبيت ووردبريس
</h3>

<p>
	تتم هذه الخطوة باستخدام متصفح ويب.
</p>

<ul>
	<li>
		عليك زيارة <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://example.com/wp-admin/install.php" ipsnoembed="true" rel="external nofollow">install.php</a> في حال وضعت ملفات ووردبريس ضمن مسار الجذر الرئيسي للنطاق على الخادم  مع استبدال اسم النطاق باسم النطاق الخاص بك.
	</li>
	<li>
		أما في حال وضعت ملفات ووردبريس ضمن مسار فرعي يُدعى على سبيل المثال blog، فعليك زيارة الرابط التالي <a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://example.con/blog/wp-admin/install.php" ipsnoembed="true" rel="external nofollow">http://example.con/blog/wp-admin/install.php</a> مع تغيير اسم النطاق لاسم النطاق الخاص بك.
	</li>
</ul>

<h4>
	إعداد ملف التهيئة
</h4>

<p>
	سيطلب منك ووردبريس بعض المعلومات لإنشاء وتعديل ملف wp-config.php في حال لم يجده. (تستطيع فعل هذا مباشرةً من خلال زيارة config.php عبر المتصفح)، حيث سيسألك ووردبريس عن معلومات قاعدة البيانات ليكتبها ضمن ملف wp-config.php جديد. وفي حال نجحت هذه الخطوة، أكمل بعملية التثبيت، ولكن إن حصل العكس فعليك الرجوع وإنشاء وتعديل ورفع ملف wp-config.php بنفسك (الخطوة الثالثة في مقالتنا).
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="69317" data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/uploads/monthly_2021_06/004_install-step3_v47.jpg.f1b5c7d48d0adc441b6c7a6db30c46b5.jpg" rel="" data-fileext="jpg"><img alt="004_install-step3_v47.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="69317" data-unique="woo2gen45" style="" src="https://academy.hsoub.com/uploads/monthly_2021_06/004_install-step3_v47.thumb.jpg.e9bf544af9babcd0056bfe6d6ce56aeb.jpg"></a>
</p>

<h4>
	إكمال عملية التثبيت
</h4>

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

<p>
	ويُمكنك تغيير كل هذه المعلومات لاحقًا ضمن لوحة تحكم المدير.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="69318" data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/uploads/monthly_2021_06/005_install-step5_v47.jpg.ad250c14e603bb0d6291f388dd6e9392.jpg" rel="" data-fileext="jpg"><img alt="005_install-step5_v47.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="69318" data-unique="f5in8dbpe" style="" src="https://academy.hsoub.com/uploads/monthly_2021_06/005_install-step5_v47.thumb.jpg.212ecdee70ca541401c8b67918e55796.jpg"></a>
</p>

<p>
	وستظهر لك صفحة تسجيل الدخول ضمن ووردبريس عند إنهاء عملية التثبيت بنجاح.
</p>

<h4>
	حل مشاكل سكربت التثبيت
</h4>

<p>
	في حال ظهر لك خطأ يتعلق بقاعدة المعطيات عند تشغيل سكربت التثبيت فعليك باتباع ما يأتي:
</p>

<ul>
	<li>
		ارجع للخطوة الثانية والثالثة وتأكد بأن معلومات قاعدة البيانات التي أدخلتها ضمن ملف wp-config.php صحيحة.
	</li>
	<li>
		تأكد من إعطاء الصلاحيات الصحيحة لمستخدم ووردبريس للوصول لقاعدة البيانات في الخطوة الثالثة.
	</li>
	<li>
		تأكد أن خادم قاعدة المعطيات يعمل.
	</li>
</ul>

<h2 id="-">
	تثبيت ووردبريس محليًا على حاسوبك
</h2>

<p>
	استخدم التعليمات في الاسفل لتثبيت بيئة الخادم على حاسوبك بغرض التجريب والتطوير.
</p>

<p>
	يُثبت ووردبريس عادةً محليًا بغرض التطوير، لذلك يجب أن يتبع المهتمون بتطوير ووردبريس التعليمات التالية وتنزيل ووردبريس محليًا.
</p>

<ul>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://ampps.com/download" rel="external nofollow">AMPPS</a>: يتضمن مجموعة WAMP/MAMP/LAMP المجانية مع مُثبت Softaculous مبني ضمنها. تستطيع بضغطة زر واحد تثبيت وترقية ووردبريس وغيرها.
	</li>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://serverpress.com/products/desktopserver" rel="external nofollow">DesktopServer Limited</a>: خادم مجاني على ويندوز/ماكنتوش يستطيع إنشاء عدة خوادم افتراضية مع نطاقات افتراضية (مثل www.example.dev) للعمل على عدة مشاريع ووردبريس بآن واحد.
	</li>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://itunes.apple.com/us/app/bitnami-stack-for-wordpress/id588981362?mt=12" rel="external nofollow">تطبيق من متجر ماكنتوش لتثبيت ووردبريس بضغطة زر واحدة</a>: تثبيت شامل بضغطة زر واحدة لووردبريس وكل ما يحتاجه للعمل هو MySQL/MariaDB وApache وPHP.
	</li>
	<li>
		تثبيت ووردبريس محليًا على جهاز ماك باستخدام MAMP: سنشرحه في الأسفل.
	</li>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://codex.wordpress.org/User:Beltranrubo/BitNami" rel="external nofollow">User:Beltranrubo/BitNami</a> لتثبيت مجاني لووردبريس على نظام OS X وويندوز ولينكس. يتوفر أيضًا مثبتات لووردبريس متعدد المواقع <a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://codex.wordpress.org/User:Beltranrubo/BitNami_Multisite" rel="external nofollow">User:Beltranrubo/BitNami Mulltistie</a> يستخدم نطاقات مختلفة أو نطاقات فرعية.
	</li>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://www.instantwp.com/" rel="external nofollow">Instant Wordpress</a> بيئة مجانية محمولة لووردبريس يُمكن استخدامها ضمن أنظمة ويندوز التي تعمل من مفتاح USB.
	</li>
</ul>

<h3 id="-">
	تطبيقات برمجية جاهزة للاستخدام
</h3>

<p>
	يُحتمل أن تجد استخدام تطبيقات برمجية طريقةً جيدةً للبدء بتشغيل ووردبريس خصوصًا عند العمل مع برمجية آلة افتراضية مثل VMWare و VirtualBox و Xen HVM و KVM.
</p>

<p>
	يُمكنك استخدام برنامج آخر مثل Parallels لكنه غير مجاني على عكس البرامج السابقة. يسمح لك بتشغيل ماك وويندوز على حاسوبك.
</p>

<p>
	تُساعد هذه البرمجيات المستخدم على تخطي عملية تثبيت ووردبريس اليدوية وما يتبعها من خطوات حيث تستبدله بنظام جاهز يتطلب خطوات قليلةً جدًا للحصول على ووردبريس بزمن لا يتجاوز الدقيقتين.
</p>

<p>
	ننصح <a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://www.turnkeylinux.org/wordpress" rel="external nofollow">ببرمجية TurnKey لووردبريس</a> وهي برمجية مجانية تعمل على Debian تتضمن مجموعةً من إضافات ووردبريس المعروفة، وتدعم تحديثات أمنية وشهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> وواجهة ويب للإدارة. تتوفر كنسخة ISO وصور مختلفة للآلات الافتراضية أو يُمكنك تشغيلها على سحابة.
</p>

<h3 id="-ubuntu">
	التثبيت التلقائي لووردبريس على خادم Ubuntu
</h3>

<p>
	تستطيع اتباع هذا <a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-lamp-%D9%81%D9%8A-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1604-r342/" rel="">المقال</a> من خلال نسخ ولصق الأوامر ضمن واجهة الأوامر لضبط ووردبريس على خادم أوبنتو Ubuntu.
</p>

<p>
	لست بحاجة لإدخال أي تفاصيل أو معلومات سرية مثل الطرق السابقة حيث كل شيء مؤتمت وتستطيع تخطي مرحلة التثبيت.
</p>

<h3 id="-wamp">
	التثبيت على ويندوز عبر حزمة WAMP
</h3>

<p>
	إن كنت لا تملك IIS على حاسوبك أو لا تريد استخدامه تستطيع استخدام WAMP:
</p>

<ul>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://www.wampserver.com/en/download.php" rel="external nofollow">خادم WAMP</a>
	</li>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://ampps.com/download" rel="external nofollow">AMPPS WAMPStack</a> يتضمن مُثبت Softaculous
	</li>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://easyphp.org/" rel="external nofollow">EasyPHP</a> يتضمن إضافة تثبيت ووردبريس
	</li>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://bitnami.org/stack/wampstack" rel="external nofollow">BitNami WAMPStack</a> يتضمن حزمة ووردبريس
	</li>
	<li>
		<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://www.apachefriends.org/" rel="external nofollow">XAMPP WAMPStack</a>
	</li>
</ul>

<p>
	يُمكن تنزيل الحزم السابقة مجانًا وتثبيتها لتعمل على حاسوبك. تستطيع توجيه حاسوبك إلى localhost عند الانتهاء من تثبيت WAMP واستخدام الرابط للوصول إلى phpMyAdmin وإنشاء قاعدة بيانات.
</p>

<p>
	يجب عليك تنزيل ملف ووردبريس المضغوط zip واستخراج محتواه لتثبيت ووردبريس ضمن مسار الويب الخاص بتثبيت WAMP (يُثبت عادة ضمن المسار C:\wamp\www). توجه باستخدام متصفحك للعنوان التالي <a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="http://localhost//wordpress" rel="external nofollow">http://localhost//wordpress</a> لتبدأ خطوات تثبيت ووردبريس. (افترضت أنك استخرجت محتوى ملف ووردبريس المضغوط إلى المسار c:\wamp\www\wordpress).
</p>

<p>
	نصيحة<strong>:</strong> إن كنت بحاجة لاستخدام أي نوع من بنى الروابط الدائمة عدا الافتراضي عليك تفعيل وحدة mod_rewrite ضمن WAMP ولعمل ذلك عليك بالضغط على أيقونة WAMP ضمن شريط المهام ثم تحريك مؤشر الفأرة فوق Apache ضمن القائمة ثم Apache module ثم تفعيل rewrite_module.
</p>

<h2 id="-mamp">
	تثبيت ووردبريس محليًا على جهاز ماك باستخدام MAMP
</h2>

<p>
	يرمز اختصار MAMP إلى (<strong>M</strong>acintosh - <strong>A</strong>pache - <strong>M</strong>ySQL - <strong>P</strong>HP) وهو تطبيق يمكنك تثبيته على جهازك الماك يسمح لك بالوصول إلى خادم PHP محلي وخادم MySQL. يمنحك MAMP بشكلٍ أساسي جميع الأدوات التي تحتاجها لتشغيل ووردبريس على جهازك لأغراض التطوير والإختبار. ويمكنك الحصول على ذلك بطرق مختلفة لكنها ليست بسيطة مثل تطبيق MAMP (انظر <a data-ss1629535627="1" data-ss1629536304="1" href="https://codex.wordpress.org/MacOS_X_Local_Mirror" rel="external nofollow">MacOS_X_Local_Mirror</a> لتثبيت PHP و MySQL يدويًا على جهازك الماك الخاص).
</p>

<h3 id="-1-mamp">
	الخطوة 1: تثبيت MAMP
</h3>

<p>
	قبل تثبيت MAMP تحتاج إلى تنزيله من موقع <a data-ss1629535627="1" data-ss1629536304="1" href="http://www.mamp.info/en/downloads/index.html" rel="external nofollow">MAMP</a> وهو يتطلب أن يعمل جهازك بنظام التشغيل Mac OS X 10.6.6 أو الأحدث منه.
</p>

<p>
	بمجرد اكتمال تنزيل MAMP انقر نقرًا مزدوجًا فوق صورة MAMP وستظهر لك نافذة MAMP منبثقة، اسحب مجلد MAMP (لا نتكلم عن نسخة MAMP PRO وسنشرحها في وقت لاحق) إلى مجلد التطبيقات.
</p>

<h3 id="-2-mamp-">
	الخطوة 2: ضبط إعدادات MAMP الأساسية
</h3>

<p>
	الآن بعد تثبيت MAMP على نظامك افتح MAMP.app (الموجود في ‎/Applications/MAMP/MAMP.app)، وقد يطالبك MAMP أثناء تحرير الإعدادات بكلمة مرور المسؤول وهذا مطلوب لأنه يحتاج إلى تشغيل عمليتين: mysqld (في MySQL) و httpd (في Apache)، واعتمادًا على الإعدادات التي قمت بتعيينها لهذه العمليات قد تحتاج أو لا تحتاج إلى إدخال كلمة مرورك.
</p>

<p>
	بمجرد فتح MAMP انقر فوق التفضيلات Preferences وبعد ذلك انقر فوق "المنافذ" ports، منافذ MAMP الافتراضية هي 8888 لخادم Apache و 8889 لقواعد بيانات MySQL، وإذا كنت تستخدم هذا الإعداد فلن يتم مطالبتك بكلمة مرورك ولكنك ستحتاج إلى تضمين رقم المنفذ في عنوان URL (المضيف المحلي: 8888) وإذا أردت عدم تضمين رقم المنفذ في عنوان URL غير منفذ Apache إلى 80 ولكن بسبب استخدام المنفذ 80 كمنفذ MAMP Apache ستتم مطالبتك دائمًا بكلمة المرور الخاصة بك.
</p>

<p>
	وأخيرًا في تبويب خادم الويب web server ستحتاج إلى تعيين جذر المستند وهذا هو المكان الذي ستكون فيه جميع ملفاتك لخادم الويب المحلي ومثال على جذر المستند هو /Users/USERNAME/Sites/wordpress/.
</p>

<p>
	وبمجرد الانتهاء من ضبط جميع الإعدادات اضغط على موافق لحفظها.
</p>

<h3 id="-3-mamp-">
	الخطوة 3: بدء تشغيل خوادم MAMP وإنشاء قاعدة البيانات
</h3>

<p>
	لبدء تشغيل خوادم MAMP Apache وMySQL انقر فوق "بدء الخوادم start servers" من شاشة MAMP الرئيسية. وبمجرد أن تبدأ خوادم MAMP ستفتح صفحة بدء MAMP في متصفح الويب الافتراضي وإذا لم يحدث ذلك انقر على "فتح صفحة البداية Open start page" في نافذة MAMP وبمجرد فتح الصفحة حدد phpMyAdmin من صفحة الويب.
</p>

<p>
	ضمن "إنشاء قاعدة بيانات جديدة" create new database أدخل اسم قاعدة بيانات وعلى سبيل المثال "ووردبريس" واضغط على إنشاء"create" ولن تحتاج لاختيار الترتيب "collation": سيتم تعيينه تلقائيًا بواسطة MySQL عند إنشاء جداول قاعدة البيانات أثناء تثبيت ووردبريس.
</p>

<h3 id="-4-">
	الخطوة 4: تنزيل وتثبيت ووردبريس
</h3>

<p>
	حان الوقت الآن <a data-ss1629535627="1" data-ss1629536304="1" href="http://wordpress.org/download" rel="external nofollow">لتنزيل ووردبريس</a> وبمجرد تنزيله وفك ضغطه افتح مجلد "ووردبريس" انقر واسحب جميع الملفات منه إلى جذر مستند MAMP (استخدم /Users/USERNAME/Sites/wordpress/).
</p>

<p>
	بالنسبة أولئك الذين لديهم تثبيت MAMP الافتراضي يجب إعادة تسمية المجلد وسحبه إلى مجلد htdocs الموجود ضمن ‎/Applications/MAMP ومن ثم في المتصفح انتقل إلى localhost:port/folder_renamed لتشغيل التثبيت وعلى سبيل المثال إذا تمت إعادة تسمية المجلد wordpresstest فانتقل إلى العنوان localhost:8888/wordpresstest.
</p>

<p>
	أخيرًا علينا تشغيل تثبيت ووردبريس، قم بزيارة موقعك المحلي (localhost:port أو localhost:port/wordpress) وأدخل المعلومات التالية في نموذج إعداد قاعدة البيانات:
</p>

<ul>
	<li>
		Database Name اسم قاعدة البيانات: wordpresstest
	</li>
	<li>
		User Name اسم المستخدم (database): root
	</li>
	<li>
		Password كلمة المرور (database): root
	</li>
	<li>
		Database Host/server خادم/مضيف قاعدة البيانات: localhost
	</li>
	<li>
		Table Prefix سابقة الجداول: wp_‎
	</li>
</ul>

<p>
	لاحظ اسم قاعدة البيانات الافتراضي هو "Wordpress" وأنك ستحتاج إلى تغيير اسم قاعدة البيانات إلى الاسم الذي أدخلته في PHP Admin، (في حالتنا "wordpresstest") وإذا كان لديك العديد من مواقع ووردبريس على جهازك المحلي كل منها يستخدم قاعدة البيانات الخاصة به فستحتاج إلى جعل اسم قاعدة البيانات في ووردبريس متسقًا مع اسم قاعدة بياناتك الثانية أو الثالثة أو الرابعة.
</p>

<p>
	بمجرد اكتمال ذلك أدخل اسم المدونة وعنوان البريد الإلكتروني وستكون جاهزًا لاستخدام ووردبريس على جهازك الماك.
</p>

<h2 id="-">
	تثبيت ووردبريس بلغتك وبالعربية
</h2>

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

<h3 id="-">
	تثبيت ملفات اللغة من لوحة تحكم ووردبريس
</h3>

<p>
	تستطيع جعل ووردبريس بدءًا من الإصدار 4.0 <a href="https://make.wordpress.org/core/2014/09/05/language-chooser-in-4-0/" rel="external nofollow">تثبيت اللغة التي تختارها خلال عملية التثبيت</a> وبالنسبة لإصدار ووردبريس 4.1 وما بعده تستطيع <a href="http://wplang.org/wordpress-4-1-install-language-packs-dashboard/" rel="external nofollow">تثبيت حزم اللغة مباشرةً من لوحة تحكم ووردبريس</a> في أي وقت حيث سوف يعمل ووردبريس على تنزيل هذه الملفات وتبديل لغة لوحة التحكم لتلك اللغة. توجه إلى <strong>لغة الموقع</strong> ضمن تبويب <strong>عام</strong> في قسم <strong>الإعدادات</strong> واختر من قائمة اللغات المتوفرة اللغة التي تريد. بالنسبة لمدراء شبكة متعددة المواقع تستطيع ضبط اللغة الافتراضية باستخدام إعدادات مدير الشبكة.
</p>

<h3 id="-">
	تثبيت ملفات اللغة يدويًا
</h3>

<p>
	نزل ملف اللغة ‎.mo للغتك (انظر <a href="https://translate.wordpress.org/locale/ar/" rel="external nofollow">قسم ترجمة ووردبريس</a> للعربية) حيث تعتمد سياسة ملفات ‎.mo على ترميز اللغة ISO-639 (مثلًا ar للغة العربية) متبوعة بترميز الدولة ISO-3166 (مثلًأ SA للسعودية)، وبالتالي سوف يكون ملف اللغة العربية السعودية ar_SA.mo وملف اللغة العربية غير المُعين ar.mo. تجد القائمة الكاملة للتراميز في <a href="http://www.gnu.org/software/gettext/manual/html_chapter/gettext_16.html#Country-Codes" rel="external nofollow">تراميز الدول</a> و<a href="http://www.gnu.org/software/gettext/manual/html_chapter/gettext_16.html#Language-Codes" rel="external nofollow">تراميز اللغة</a>.
</p>

<p>
	ملاحظة: إن ارتكبت أي خطأ في هذه الخطوات أو لم تُحدد اللغة الصحيحة سوف يستخدم ووردبريس اللغة الافتراضية وهي اللغة الإنجليزية. لمزيد من المساعدة حول تثبيت ووردبريس ألق نظرة على <a href="https://academy.hsoub.com/apps/web/wordpress/%D8%A7%D9%84%D8%A3%D8%B3%D8%A6%D9%84%D8%A9-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D8%B9%D9%86%D8%AF-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r540/" rel="">الأسئلة الشائعة عند تثبيت ووردبريس</a>.
</p>

<h3 id="-">
	ضبط لغة موقعك
</h3>

<p>
	تستطيع تغيير اللغة في إصدار ووردبريس 4.0 وما بعده من خلال <strong>لغة الموقع</strong> في تبويب <strong>عام</strong> ضمن قسم <strong>الإعدادات</strong> داخل لوحة تحكم ووردبريس.
</p>

<p>
	أما في إصدار ووردبريس 3.9.2 وما سبقه، فافعل ذلك عبر فتح ملف wp-config.php ضمن <a href="https://codex.wordpress.org/Glossary#Text_editor" rel="external nofollow">محرر نصي</a> والبحث عن:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6371_9" style=""><span class="pln">define </span><span class="pun">(</span><span class="str">'WPLANG'</span><span class="pun">,</span><span class="pln"> </span><span class="str">''</span><span class="pun">);</span></pre>

<p>
	وهنا عدل هذا السطر بالاعتماد على ملف ‎.mo الذي نزلته فمثلًا للغة العربية المحكية في السعودية عليك إضافة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6371_11" style=""><span class="pln">define </span><span class="pun">(</span><span class="str">'WPLANG'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'ar_SA'</span><span class="pun">);</span></pre>

<p>
	احفظ الملف بعد إضافة ترميز اللغة.
</p>

<p>
	انتبه إلى أنه في حال عدم وجود ملفات ‎.mo و ‎.po لترميز اللغة الذي استدعي في ملف wp-config.php عنها، فلن تظهر لك رسالة خطأ لكن سوف يستمر استخدام الترميز في دالة <code>language_attributes()‎</code>.
</p>

<h3>
	ضبط اللغة في شبكة مواقع متعددة
</h3>

<p>
	إن كنت تُدير <a href="https://academy.hsoub.com/apps/web/wordpress/%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%B4%D8%A8%D9%83%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r641/" rel="">شبكة مواقع ووردبريس</a> فإن ضبط اللغة يكون على مستوى كل مدونة من خلال خيار <strong>لغة الموقع</strong> في تبويب <strong>عام</strong> قسم <strong>الإعدادات</strong>. تستطيع ضبط اللغة الافتراضية للشبكة ككل ضمن <strong>مدير الشبكة</strong> في نافذة الإعدادات واختيار اللغة الافتراضية.
</p>

<h3>
	إضافة ترجمة لعبارات مخصصة
</h3>

<p>
	إن أردت إضافة ترجمات للعبارات التي ما زالت تُعرض باللغة الإنجليزية بعد التثبيت عليك زيارة <a href="https://translate.wordpress.org/" rel="external nofollow">translate.wordpress.org</a> واختيار لغتك. اطلع على <a href="https://make.wordpress.org/polyglots/handbook/tools/glotpress-translate-wordpress-org/" rel="external nofollow">هذه اللغة</a> لتبدأ في <a href="https://make.wordpress.org/polyglots/handbook/" rel="external nofollow">دليل المترجم</a>.
</p>

<h2>
	المشاكل الشائعة أثناء التثبيت
</h2>

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

<h3>
	رؤية قائمة بالمسارات ضمن الخادم بدلا من صفحة ويب
</h3>

<p>
	<strong>الحل:</strong> تُعاد تهيئة خادم الويب ليرى ملف index.php افتراضيًا، وفي خادم أباتشي Apache عليك استخدام التوجيه DirectoryIndex index.php ضمن ملف اسمه <code>‎.htaccess</code>، ضمن المسار الذي تريد تثبيت ووردبريس فيه (عليك إنشاء الملف في حال لم يكن موجودًا).
</p>

<h3>
	رؤية الكثير من أخطاء Headers already sent، وكيفية اصلاحها
</h3>

<p>
	<strong>الحل:</strong> تنتج هذه المُشكلة غالبًا بسبب خطأ في صيغة التعليمات ضمن ملف wp-config.php.
</p>

<ol>
	<li>
		<p>
			حمّل ملف wp-config.php إن كنت لا تملك وصول للخادم عبر shell.
		</p>
	</li>
	<li>
		<p>
			افتح الملف باستخدام محرر نصي.
		</p>
	</li>
	<li>
		<p>
			تحقق من أن السطر لا يحتوي سوى ‎&lt;?php ولا يوجد نص قبلها (يجب ألا تجد حتى مسافة فارغة قبلها).
		</p>
	</li>
	<li>
		<p>
			تحقق من أن السطر الأخير يتضمن فقط ‎?&gt;‎ ولا يوجد نص بعده (يجب ألا تجد مسافة فارغة بعده).
		</p>
	</li>
	<li>
		<p>
			تأكد أن المحرر النصي لا يُضيف علامة ترتيب البايت Byte Order Mark أو اختصارًا BOM في حال كان يحفظ الملفات بصيغة Unicode. لا تُعلِم معظم المحررات النصية بإضافة BOM للملفات، لذلك قد تحتاج لاستخدام محرر نصي آخر.
		</p>
	</li>
	<li>
		<p>
			احفظ الملف وارفعه مجددًا وأعد تحميل الصفحة ضمن متصفحك.
		</p>
	</li>
</ol>

<h3>
	ظهور كلام غير مفهوم ضمن الصفحة وعند النظر إلى مصدر الصفحة نجد العديد من وسوم
</h3>

<p>
	<strong>الحل:</strong> إرسال وسوم ‎‎ إلى المتصفح يُشير إلى عدم عمل بي اتش بي بطريقة صحيحة. يجب أن تُنفّذ كل اكواد بي اتش بي قبل إرسال الخادم وسوم HTML الناتجة للمتصفح. (لذلك يدعونها بالمعالج المُسبق). وتحقق أن خادمك يحقق الشروط الدنيا لعمل ووردبريس وأن بي اتش بي مُثبت ومُعَد بطريقة صحيحة أو اتصل بمزود الاستضافة أو مدير النظام لديك لطلب المساعدة.
</p>

<h3>
	أتلقى باستمرار رسالة الخطأ Error connecting to database رغم التأكد من صحة الإعدادات
</h3>

<p>
	<strong>الحل:</strong> جرب تهيئة كلمة مرور MySQL يدويًا وإن كنت تملك اتصال Shell بـ MySQL جرب التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_2476_23" style=""><span class="pln">SET PASSWORD FOR </span><span class="str">'wordpressusername'</span><span class="pun">@</span><span class="str">'hostname'</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> OLD_PASSWORD</span><span class="pun">(</span><span class="str">'password'</span><span class="pun">);</span></pre>

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

<h3>
	تلقي رسالة فقدان تمديد MySQL باستمرار رغم سلامة الإعدادات
</h3>

<p>
	<strong>الحل:</strong> تحقق من إعدادات الخادم وعملها إضافةً إلى التحقق من MySQL وعمله وتحميله من قبل الخادم بطريقة صحيحة.
</p>

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

<h3>
	مشكلة عدم عمل ملفات MP3 أو الصور التي رفعتها
</h3>

<p>
	<strong>الحل:</strong> إن كنت تستخدم محررًا نصيًا مليئَا بالأدوات ضمن مدونة موجودة على مسار فرعي، وبعض الصور التي تسحبها وتُفلتها ضمن حقل المحرر تختفي بعد بضع ثواني، فغالبًا المشكلة متعلقة بـ TinyMCE، حيث لا يتلقى معلومات كافية أثناء عملية سحب الملف لبناء مسار للصورة أو أي ملف أخر بصورة صحيحة. ويكون الحل بعدم سحب الصور المرفوعة إلى المحرر، وبدلًا عن ذلك اضغط باستمرار على الصورة واضغط على Send to Editor.
</p>

<p>
	ترجمة -وبتصرف- للمقالات:
</p>

<ul>
	<li>
		<p>
			<a href="https://wordpress.org/support/article/hosting-wordpress/" rel="external nofollow">Hosting WordPress</a>
		</p>
	</li>
	<li>
		<p>
			<a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/support/article/before-you-install/" rel="external nofollow">Before You Install</a>
		</p>
	</li>
	<li>
		<p>
			<a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/support/article/how-to-install-wordpress/" rel="external nofollow">How to install WordPress</a>
		</p>
	</li>
	<li>
		<p>
			<a data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://wordpress.org/support/article/installing-wordpress-on-your-own-computer/" rel="external nofollow">Installing WordPress on your own Computer</a> 
		</p>
	</li>
	<li>
		<p>
			<a data-ss1629535627="1" data-ss1629536304="1" href="https://codex.wordpress.org/Installing_WordPress_Locally_on_Your_Mac_With_MAMP" rel="external nofollow">Installing WordPress Locally on Your Mac With MAMP</a>
		</p>
	</li>
	<li>
		<p>
			<a href="https://wordpress.org/support/article/installing-wordpress-in-your-language/" rel="external nofollow">Installing WordPress in your language</a>
		</p>
	</li>
</ul>

<p>
	من موقع wordpress.org
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/wordpress/" rel="">تعلم ووردبريس</a>
	</li>
	<li>
		<a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D9%81%D9%8A-%D8%A7%D9%84%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1221/" rel="">إنشاء صفحة البحث في الووردبريس</a>
	</li>
	<li>
		<a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D8%A8%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D9%84%D8%A8-themes-r593/" rel="">تطوير ووردبريس للمبتدئين: بناء القوالب Themes</a>
	</li>
	<li>
		<a data-ss1624693341="1" data-ss1625064231="1" data-ss1628264576="1" data-ss1629535627="1" data-ss1629536304="1" href="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/" rel="">نظرة شاملة على قاعدة بيانات ووردبريس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1248</guid><pubDate>Wed, 16 Jun 2021 15:03:00 +0000</pubDate></item><item><title>&#x625;&#x62F;&#x627;&#x631;&#x629; &#x627;&#x644;&#x625;&#x636;&#x627;&#x641;&#x627;&#x62A; &#x641;&#x64A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1224/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_04/6087f5a28031f_2(1).png.20a4928b5f54f2635451bb20956cf8ca.png" /></p>
<h2>
	ما هي الإضافات؟
</h2>

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

<p>
	تستطيع الاطلاع على الإضافات من خلال <a href="https://wordpress.org/plugins/" rel="external nofollow">مستودع إضافات ووردبريس</a> والتي تم اختبارها بشكل جيد وتُعتبر آمنة للاستخدام ولكن تختلف الجودة من ناحية الكتابة والالتزام بنصائح توثيق مجتمع مطوري ووردبريس من مُطور لآخر، وغالبة هذه الإضافات يتم تحديثها دوريًا لإصلاح المشاكل التي تظهر فيها وسد الثغرات الأمنية المُكتشفة.
</p>

<h3>
	كيف تساهم هذه الإضافات في بنية ووردبريس؟
</h3>

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

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

<h3>
	بعض الأمثلة على الإضافات
</h3>

<p>
	تندرج بعض من أكثر الإضافات شعبية -المتواجدة ضمن مستودع ووردبريس- ضمن التصنيفات التالية:
</p>

<ul>
	<li>
		التحكم بالتعليقات المزعجة
	</li>
	<li>
		تحسين محركات البحث SEO
	</li>
	<li>
		تصدير واستيراد البيانات
	</li>
	<li>
		التجارة الإلكترونية E-commerce
	</li>
	<li>
		الأمن
	</li>
	<li>
		التخزين المؤقت Caching
	</li>
</ul>

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

<h2>
	إيجاد وتثبيت الإضافات
</h2>

<h3>
	إيجاد إضافات
</h3>

<p>
	تستطيع تصفح الإضافات والبحث عما تريده ضمن مستودع ووردبريس حيث جميع الإضافات مجانية ومتوفرة للتنزيل كملف مضغوط zip ليبقى عليك رفعها وتثبيتها على موقع ووردبريس.
</p>

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

<h3>
	تحديث الإضافات
</h3>

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

<ol>
	<li>
		اضغط على "إضافات" ضمن القائمة الجانبية في الجهة اليمنى من لوحة التحكم.
	</li>
	<li>
		ابحث ضمن القائمة التي تعرض الإضافات المثبتة على موقعك وابحث إن كان أي منها يحتوي على السطر "هناك نسخة جديدة متاحة من…".
	</li>
	<li>
		اضغط على رابط "عرض تفاصيل النسخة…" لعرض تفاصيل أوسع عن النسخة الأحدث من الإضافة.
	</li>
	<li>
		اضغط على "التحديث الآن" لتحديث الإضافة.
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65408" href="https://academy.hsoub.com/uploads/monthly_2021_04/update_wordpress_plugin.jpg.f18eb28097a51f4e163972f5c5072d59.jpg" rel="" data-fileext="jpg"><img alt="update_wordpress_plugin.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65408" data-unique="6wrm3gw9y" src="https://academy.hsoub.com/uploads/monthly_2021_04/update_wordpress_plugin.thumb.jpg.a69bc67cfcb15240af758356eb3f0ef2.jpg"></a>
</p>

<h3>
	توافق الإضافة
</h3>

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

<h4>
	توافقية الإضافات الجديدة
</h4>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65409" href="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_compatibility.jpg.63c9f128b72a1c6a6748800708e79136.jpg" rel="" data-fileext="jpg"><img alt="wordpress_compatibility.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65409" data-unique="205h2xbt0" src="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_compatibility.jpg.63c9f128b72a1c6a6748800708e79136.jpg"></a>
</p>

<h4>
	توافقية الإضافات المثبتة
</h4>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65410" href="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_compatibility2.jpg.439311d30f4ee72c5929e68ab259455c.jpg" rel="" data-fileext="jpg"><img alt="wordpress_compatibility2.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65410" data-unique="t3g3o723g" src="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_compatibility2.jpg.439311d30f4ee72c5929e68ab259455c.jpg"></a>
</p>

<h2>
	تثبيت الإضافات
</h2>

<p>
	يوجد ثلاث طرق لتثبيت إضافة ووردبريس.
</p>

<ul>
	<li>
		<strong>التثبيت التلقائي للإضافة،</strong> حيث يمكن تثبيت أي إضافة موجودة ضمن مستودع ووردبريس بشكل تلقائي من خلال المثبت المبني ضمن ووردبريس.
	</li>
	<li>
		<strong>رفع الإضافة من خلال لوحة تحكم المدير،</strong> حيث تستطيع بسهولة تثبيت الإضافة من خلال رفع الملف المضغوط zip الخاص بها من على حاسوبك.
	</li>
	<li>
		<strong>التثبيت اليدوي للإضافة،</strong> ففي بعض الحالات قد تضطر لرفع الملف المضغوط للإضافة من خلال بروتوكول SFTP.
	</li>
</ul>

<h3>
	التثبيت التلقائي للإضافة
</h3>

<p>
	هذه الطريقة هي الأسهل لتثبيت الإضافة، وتتضمن الخطوات التالية:
</p>

<ol>
	<li>
		توجه إلى "إضافات" ثم تبويب "أضف جديد".
	</li>
	<li>
		استخدم مربع البحث الموجود في الزاوية العلوية اليسرى للبحث عن إضافة باستخدام كلمة مفتاحية أو اسم المؤلف أو وسم.
	</li>
	<li>
		سوف تظهر لك صفحة نتائج البحث التي تتضمن مجموعة من الإضافات، اختر الإضافة التي تريد واضغط على عنوانها لتقرأ المزيد عن مواصفاتها. قد تتضمن هذه الصفحة ملاحظات للتثبيت أو توثيق الإضافة أو معلومات أخرى مفيدة.
	</li>
	<li>
		اضغط على "التنصيب الآن" لتثبيت الإضافة.
	</li>
	<li>
		اضغط على "تفعيل" لتفعيل الإضافة.
	</li>
</ol>

<h3>
	رفع الإضافة بشكل يدوي من لوحة تحكم المدير في ووردبريس
</h3>

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

<ol>
	<li>
		توجه إلى "إضافات" ثم تبويب "أضف جديد"
	</li>
	<li>
		اضغط على خيار "رفع إضافة" الموجود في الزاوية العلوية اليمنى.
	</li>
	<li>
		اختر الملف المضغوط zip من حاسوبك.
	</li>
	<li>
		اضغط على "التنصيب الآن"
	</li>
	<li>
		عند اكتمال التثبيت سوف تظهر عبارة "تم تنصيب الإضافة بنجاح". اضغط على "تفعيل الإضافة" في أسفل الصفحة.
	</li>
</ol>

<h3>
	التثبيت اليدوي للإضافة
</h3>

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

<p>
	تتطلب منك هذه الطريقة الإلمام بكيفية نقل الملفات باستخدام بروتوكول SFTP.
</p>

<ol>
	<li>
		عليك فك ضغط ملف الإضافة في حال كانت بصيغة zip. يجب أن تجد بعد فك الضغط مجلدًا وحيدًا بنفس اسم الإضافة.
	</li>
	<li>
		ابحث ضمن مجلد الإضافة عن ملف readme.txt واقرأ محتوياته للتأكد من أن هذه هي الإضافة الصحيحة والاطلاع على التعليمات الخاصة بالتثبيت إن وجدت.
	</li>
	<li>
		الآن اتصل بالمخدم الخاص بك والذي يحتوي على موقعك من خلال بروتوكول SFTP.
	</li>
	<li>
		انسخ مجلد الإضافة إلى المسار wp-content/plugins/ ضمن مسار ووردبريس. بهذا تكون قد ثبتت الإضافة ضمن موقعك.
	</li>
	<li>
		توجه إلى صفحة الإضافات المنصبة في موقعك وحدد مكان وجود الإضافة الجديدة التي قمت برفعها.
	</li>
	<li>
		اضغط على خيار "تفعيل".
	</li>
	<li>
		في حال وجود خيار "تفاصيل أكثر"، اضغط عليه لمعرفة المزيد من المعلومات عن الإضافة.
	</li>
</ol>

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

<h2>
	الإضافات المفضلة
</h2>

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

<h3>
	تفضيل إضافة
</h3>

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

<h3>
	مشاهدة الإضافات المفضلة لمستخدم
</h3>

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

<ol>
	<li>
		توجه لصفحة "أضف جديد" للإضافات ضمن موقعك.
	</li>
	<li>
		اضغط على لسان المفضلة
	</li>
	<li>
		اكتب اسم المستخدم ضمن الحقل المخصص.
	</li>
	<li>
		اضغط على "احصل على المفضلة".
	</li>
</ol>

<p>
	تتضمن كل الإضافات الظاهرة هنا خيار "التنصيب الآن" لتتمكن من إضافتها لموقعك بسهولة.
</p>

<h2>
	حذف إضافة
</h2>

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

<h3>
	الحذف التلقائي للإضافة
</h3>

<p>
	الطريقة الآمنة والسهلة لحذف إضافة هي عبر لوحة تحكم مدير ووردبريس.
</p>

<ol>
	<li>
		توجه إلى صفحة "إضافات"، ثم حدد الإضافة التي تريد إلغاء تثبيتها.
	</li>
	<li>
		اضغط على خيار "تعطيل".
	</li>
	<li>
		اضغط الآن على خيار "حذف".
	</li>
</ol>

<h3>
	الحذف اليدوي لإضافة
</h3>

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

<ol>
	<li>
		توجه إلى صفحة "إضافات"، وحدد الإضافة التي تريد حذفها.
	</li>
	<li>
		اضغط على خيار "تعطيل".
	</li>
	<li>
		في حال عدّلتً على ملفات القالب لكي تتمكن من تثبيت الإضافة عليك إزالة هذه التعديلات قبل حذفها.
	</li>
	<li>
		اتصل بالمخدم الخاص بموقعك باستخدام بروتوكول SFTP.
	</li>
	<li>
		توجه إلى مسار ووردبريس، ثم wp-content/plugins/ وحدد المجلد الخاص بالإضافة التي تريد حذفها.
	</li>
	<li>
		الآن احذف المجلد ومحتوياته.
	</li>
	<li>
		توجه من جديد لصفحة "إضافات" ضمن لوحة تحكم مدير ووردبريس، وتأكد من أن عملية حذف الإضافة المطلوبة تمت بنجاح.
	</li>
</ol>

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

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

<h2>
	حل المشاكل
</h2>

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

<h3>
	المصادر
</h3>

<ul>
	<li>
		راجع التوثيق الخاص بالإضافة لتتأكد من أنك اتبعت التعليمات الصحيحة. انظر:
	</li>
	<li>
		صفحة "إضافات" ثم "تفاصيل أكثر".
	</li>
	<li>
		صفحة "إضافات" ثم اضغط على "استكشاف الأخطاء"
	</li>
	<li>
		ابحث ضمن <a href="https://wordpress.org/support/forums/" rel="external nofollow">منتديات دعم ووردبريس</a> عن اسم الإضافة والكلمات المفتاحية المرتبطة بالمشكلة التي تواجهها.
	</li>
	<li>
		ابحث ضمن مستودع ووردبريس عن ملاحظات للإضافة وروابط لمشاكل تم الإبلاغ عنها ضمن المنتدى.
	</li>
	<li>
		توجه للموقع الالكتروني التابع لمطور الإضافة وتحقق من مدونته أو صفحة الإضافة عن أي مشاكل شائعة أو نصائح.
	</li>
	<li>
		ابحث ضمن شبكة الويب عن اسم الإضافة وكلمات مفتاحية مرتبطة بالمشكلة.
	</li>
	<li>
		انشر سؤالًا ضمن منتدى دعم ووردبريس يتضمن اسم الإضافة والمشكلة التي تواجهها ضمن العنوان. للحصول على نصائح لكيفية تحسين حظوظك في الحصول على مساعدة، ألق نظرة على الحصول على <a href="https://codex.wordpress.org/Finding_WordPress_Help" rel="external nofollow">مساعدة ووردبريس</a>.
	</li>
</ul>

<h3>
	حلول ممكنة
</h3>

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

<h3>
	حل مشاكل متقدم
</h3>

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

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

<ul>
	<li>
		في حال ثُبتت الإضافة يدويًا:
	</li>
	<li>
		تحقق من موقع مجلد الإضافة، يجب أن تجده ضمن المسار /wp-content/plugins
	</li>
	<li>
		عند رفعك نسخة جديدة من الإضافة عليك التحقق من أن النسخ القديمة تم حذفها أو إعادة تسمية المجلد الخاص بها.
	</li>
	<li>
		استخدم بروتوكول SFTP لحذف مجلد الإضافة ثم أعد تثبيتها من جديد.
	</li>
	<li>
		في حال قمت بتعديل على ملفات القالب ليتوافق مع الإضافة عليك مراجعة التعديلات. تأكد أن الشيفرة صحيحة وخالية من الأخطاء الكتابية وفي مكانها الصحيح (مثلا: ضمن حلقة ووردبريس وليس خارجها).
	</li>
	<li>
		في حال عدم ظهور الإضافة ضمن قائمة الإضافات، عليك إلقاء نظرة على الملف الرئيسي للإضافة باستخدام محرر الإضافات للتأكد من أن شيفرة الترويسة للإضافة موجودة ومكتوبة بشكل صحيح.
	</li>
	<li>
		في حال استخدامك لقالب ووردبريس مخصص عليك تفعيل القالب الافتراضي بدلًا منه وتأكد هل ما زالت المشكلة موجودة أم لا؟ في حال توقفت المشكلة عن الظهور يجب عليك التواصل مع مطور هذا القالب للمساعدتك على حل المشكلة.
	</li>
	<li>
		ألغ تفعيل جميع الإضافات ثم أعد تفعيل الإضافة التي تسبب المشكلة، وإن عملت الإضافة بدون مشاكل فهذا يعني وجود تعارض مع أحد الإضافات المُفعلة لديك. الآن عليك تفعيل الإضافات الأخرى واحدة تلو الأخرى ولاحظ إن عادت المشاكل لتكتشف عندها الإضافة التي تسبب هذا التعارض.
	</li>
</ul>

<h2>
	نصائح حول إضافات ووردبريس
</h2>

<p>
	ما يلي هي نصائح وتقنيات للمستخدمين المتقدمين والمطورين.
</p>

<h3>
	إدارة الإضافة
</h3>

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

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1877_7" style=""><span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">/**
* Plugin Name: Magic Plugin
* Description: Magic Plugin performs magic.
* Plugin URI: http://example.com/magic-plugin
* Version: 2.3
* Author: Mr. Magic
* Author URI: http://example.com/
* Text Domain: magic-plugin
*
* @package Magic Plugin
*/</span><span class="pln">

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

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

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

<h3>
	إضافات مفعلة على الشبكة
</h3>

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

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

<p>
	المعلومات ضمن هذا القسم تنطبق فقط على شبكة مواقع ووردبريس لأنك تستطيع إضافة وحذف الإضافات كما تريد ضمن موقع ووردبريس وحيد. ألق نظرة على <a href="https://wordpress.org/support/article/must-use-plugins/" rel="external nofollow">تفعيل الإضافات على الشبكة</a> و<a href="https://wordpress.org/support/article/create-a-network/" rel="external nofollow">إنشاء شبكة</a> لمزيد من التفاصيل.
</p>

<h3>
	إخفاء الإضافات عند تعطيلها
</h3>

<p>
	تضيف بعض الإضافات عند تفعيلها شيفرة إلى ملفات قالب ووردبريس ويمكن أن يبقى هذا الكود الإضافي في مكانه حتى بعد تعطيل الإضافة وهذا قد يؤثر على شكل القالب أو وظائفه لينتج بعض الأخطاء. لذلك من المهم منع إضافة معطلة من أن يتم اكتشافها أو استخدامها ولفعل ذلك يجب أن تضيف شيفرة بي اتش بي إلى القالب لتنفيذ عملية تحقق بسيطة من وجود الإضافة ()function_exists. (انظر إلى المثال في الأسفل) ثم ارفع القالب المعدل إلى مجلد wp-content.
</p>

<p>
	تقوم الدالة البرمجية <code>if(function_exists())‎</code> بالتحقق من الإضافة لتقوم باستدعاء بقية الدوال المرتبطة بهذه الإضافة إن كانت مثبتة ونشطة أما في حال أعادت الدالة FALSE فهذا يعني أن الإضافة غير مثبتة أو غير مُفعلة ويجب تجاهل الدوال المرتبطة بالإضافة ومتابعة تحميل الصفحة.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1877_9" style=""><span class="pun">&lt;?</span><span class="pln">php
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> function_exists</span><span class="pun">(</span><span class="pln"> </span><span class="str">'FUNCTION NAME'</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">
 FUNCTION_NAME</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

<p>
	تستخدم الإضافة في المثال دالة تدعى ()alex<em>get</em>shoutbox لطباعة محتواها.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1877_11" style=""><span class="pun">&lt;?</span><span class="pln">php
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> function_exists</span><span class="pun">(</span><span class="pln"> </span><span class="str">'alex_get_shoutbox'</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">
 alex_get_shoutbox</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

<h2>
	تطوير الإضافات
</h2>

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

<p>
	إن كنت جديدًا في مضمار تطوير الإضافات عليك الإطلاع على <a href="https://codex.wordpress.org/Plugin_Resources" rel="external nofollow">هذه المصادر</a> التي يمكن أن تكون مفيدة لك كنقطة انطلاق.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://wordpress.org/support/article/managing-plugins/" rel="external nofollow">Managing Plugins</a> من موقع <a href="https://wordpress.org" rel="external nofollow">ووردبريس</a>
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/wordpress/" rel="">تعلم ووردبريس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1224</guid><pubDate>Sat, 08 May 2021 09:03:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x642;&#x648;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%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-r1223/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_04/6087f28b6c66d_3(1).png.6336fc5bc3078763da75581416466e39.png" /></p>

<h2>
	ما هو القالب؟
</h2>

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

<p>
	قالب ووردبريس عبارة عن مجموعة من الملفات تعمل معًا لإنتاج واجهة مرئية ذات طابع موحد للموقع الالكتروني تُدعى هذه الملفات <a href="https://developer.wordpress.org/themes/basics/template-files/" rel="external nofollow">بملفات القالب</a>. يُعدل القالب الطريقة التي يُعرض بها الموقع من دون التعديل على البرمجية القائم عليها أي ووردبريس. تضمن ملفات القالب صور<em> ‏</em>(jpg, *.png, *.gif.*)‏<em> </em>وملفات تصميم (css.*) و<a href="https://wordpress.org/support/article/pages/" rel="external nofollow">صفحات</a> مخصصة إضافة إلى أي ملفات برمجية مطلوبة (php.*). ألق نظرة على ملفات القالب لمعلومات أكثر.
</p>

<p>
	لنقل أنك تكتب كثيرًا عن الجبنة و الخضار، تستطيع من خلال <a href="https://developer.wordpress.org/themes/basics/the-loop/" rel="external nofollow">حلقة ووردبريس</a> وملفات القالب تخصيص مقالات تصنيف الجبنة لتظهر بشكل مختلف عن مقالات تصنيف الخضار. أنت تمتلك تحكمًا كاملًا بكيفية ظهور صفحاتك وتصنيفاتك وحدودك الوحيدة ترتبط بحدود قدرتك على الإبداع والتخيل. لمزيد من المعلومات عن كيفية إنشاء شكل مخصص لعدة قوالب ضمن قالبك، ألق نظرة على <a href="https://developer.wordpress.org/themes/basics/template-hierarchy/" rel="external nofollow">هرمية ملفات القالب</a>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65404" href="https://academy.hsoub.com/uploads/monthly_2021_04/template-hierarchy.png.840fbed86ad0d976ea77917f924bf501.png" rel=""><img alt="template-hierarchy.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65404" data-unique="tbw5ufqaa" src="https://academy.hsoub.com/uploads/monthly_2021_04/template-hierarchy.thumb.png.d0d2e24671e22e9a0ad722dba897dbe9.png"></a>
</p>

<p>
	لتفهم المخطط السابق بشكل أفضل تستطيع <a href="https://wphierarchy.com/" rel="external nofollow">التفاعل معه</a>.
</p>

<h2>
	القوالب الافتراضية
</h2>

<p>
	يمتلك ووردبريس الآن ثلاث قوالب مجانية: القالب الافتراضي <a href="https://wordpress.org/support/article/twenty-nineteen/" rel="external nofollow">Twenty Nineteen theme</a> (<a href="https://2019.wordpress.net/" rel="external nofollow">العرض التجريبي</a>) والقوالب الافتراضية السابقة بالعرض التجريبي <a href="https://wordpress.org/support/article/twenty-seventeen/" rel="external nofollow">Twenty Seventeen</a>، و<a href="https://wordpress.org/support/article/twenty-sixteen/" rel="external nofollow">Twenty Sixteen</a>.
</p>

<p>
	تستطيع التبديل بين هذه القوالب باستخدام تبويب "<a href="https://wordpress.org/support/article/administration-screens/#appearance-change-the-look-of-your-blog" rel="external nofollow">مظهر</a>" ضمن القائمة الرئيسية في <a href="https://wordpress.org/support/article/administration-screens/" rel="external nofollow">لوحة تحكم</a> ووردبريس. سوف تظهر القوالب التي أضفتها ضمن مسار القالب في صفحة المدير ضمن تبويب "مظهر"، ثم "<a href="https://wordpress.org/support/article/administration-screens/#themes" rel="external nofollow">قوالب</a>".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65405" href="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_installed_themes.jpg.87beb17fe1061c31945f6ff9fbdb1fec.jpg" rel=""><img alt="wordpress_installed_themes.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65405" data-unique="nmzwqguvi" src="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_installed_themes.thumb.jpg.4f70c724a0e032d65d305065d7a17b94.jpg"></a>
</p>

<h2>
	احصل على قوالب جديدة
</h2>

<p>
	<a href="https://wordpress.org/themes/" rel="external nofollow">مستودع قوالب ووردبريس</a> هو الموقع الرسمي لقوالب ووردبريس، حيث تمت مراجعة جميع القوالب المعروضة ضمنه من قبل فريق مختص والتأكد من التزامها بمجموعة كبيرة من القواعد لضمان تجربة آمنة ومرضية لمستخدم القالب.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65403" href="https://academy.hsoub.com/uploads/monthly_2021_04/search_wordpress_theme_filter.jpg.8e932e848edc3bf34c417a822d34f808.jpg" rel=""><img alt="search_wordpress_theme_filter.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65403" data-unique="g51metynl" src="https://academy.hsoub.com/uploads/monthly_2021_04/search_wordpress_theme_filter.thumb.jpg.46b195c1035058b1af2a0dfb725db11e.jpg"></a>
</p>

<p>
	يُمكنك الإطلاع على العرض التجريبي للقالب مع معاينة الميزات ضمن <a href="https://wordpress.org/themes/twentyseventeen/" rel="external nofollow">صفحة معلومات القالب</a> في حال لم تكن الصور وقائمة المميزات كافية لك لتقرر هل القالب مناسب لاحتياجاتك أم لا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65407" href="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_twenty_seventeen_theme.jpg.a8a9d378ad841f99736a41ab2ca2b5ec.jpg" rel=""><img alt="wordpress_twenty_seventeen_theme.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65407" data-unique="ellfkai4w" src="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_twenty_seventeen_theme.thumb.jpg.2616b82a927a9ac938b4e9b2547dc59b.jpg"></a>
</p>

<h2>
	إضافة قوالب جديدة
</h2>

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

<h3>
	إضافة قوالب جديدة باستخدام صفحة المدير
</h3>

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

<ol>
<li>
		تسجيل الدخول <a href="https://wordpress.org/support/article/administration-screens/" rel="external nofollow">لصفحة المدير</a> في ووردبريس.
	</li>
	<li>
		اختر "<a href="https://wordpress.org/support/article/administration-screens/#appearance-change-the-look-of-your-blog" rel="external nofollow">المظهر</a>" ثم "قوالب".
	</li>
	<li>
		اختر "أضف جديد".
	</li>
	<li>
		استخدم إما مربع البحث أو خيارات الترشيح للبحث عن القالب الذي تريد استخدامه.
	</li>
	<li>
		اضغط على "معاينة" لمعاينة القالب أو اضغط "تنصيب" لرفع القالب إلى موقعك الإلكتروني.
	</li>
	<li>
		أو استخدم خيار "رفع قالب" في أعلى الصفحة لرفع نسخة مضغوطة عن القالب الذي سبق لك تنزيله لحسابك.
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65406" href="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_theme_install.gif.310356c37223f9289ab18ee1bc444189.gif" rel=""><img alt="wordpress_theme_install.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="65406" data-unique="mrbcsb7n3" src="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_theme_install.thumb.gif.f65f9fbc40a274e6c4e4616871148312.gif"></a>
</p>

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

<h3>
	إضافة قوالب جديدة من خلال لوحة cPanel
</h3>

<p>
	في حال تمتلك استضافة تقدم لوحة تحكم <a href="https://wordpress.org/support/article/glossary/#cpanel" rel="external nofollow">cPanel</a> فإنك تستطيع استخدامها لرفع ملفات القالب لموقعك الالكتروني ولاتباع هذه الطريقة يجب أن تمتلك ملفات القالب بالشكل المضغوط بامتداد zip أو gz.
</p>

<ol>
<li>
		نزل ملف zip للقالب إلى حاسوبك.
	</li>
	<li>
		ضمن مدير ملفات cPanel، توجه إلى مجلد Themes. قد يختلف المسار لهذا المجلد تبعًا للاستضافة التي لديك ولكنك ستجده عمومًا ضمن مجلد public_html ثم المسار /wp-content/themes/.
	</li>
	<li>
		حالما تصبح داخل مجلد themes ضمن مدير ملفات cPanel، اضغط على خيار Upload وارفع الملف المضغوط zip للقالب الذي قمت بحفظه في الخطوة الأولى.
	</li>
	<li>
		حالما يتم رفع الملف المضغوط zip، اضغط عليه بالزر اليميني للفأرة واختر Extract من القائمة.
	</li>
	<li>
		بعد أن يتم استخراج ملفات القالب بنجاح، اتبع التعليمات في الأسفل لتفعيل القالب الجديد.
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65398" href="https://academy.hsoub.com/uploads/monthly_2021_04/cpanel-file-manager.jpg.dc96f8a2265360b4dab21b01d4c764af.jpg" rel=""><img alt="cpanel-file-manager.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65398" data-unique="es15ve3r7" src="https://academy.hsoub.com/uploads/monthly_2021_04/cpanel-file-manager.thumb.jpg.8878dc3c0219852272bb9fd2a4d1daed.jpg"></a>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65400" href="https://academy.hsoub.com/uploads/monthly_2021_04/cpanel-wpcontent-themes.jpg.fe06bb2692116a7ff6b5ff5c9a045472.jpg" rel=""><img alt="cpanel-wpcontent-themes.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65400" data-unique="myz4w0yj3" src="https://academy.hsoub.com/uploads/monthly_2021_04/cpanel-wpcontent-themes.thumb.jpg.62c07d125e676d66a9f0b5e6f8cbd314.jpg"></a>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65399" href="https://academy.hsoub.com/uploads/monthly_2021_04/cpanel-upload.jpg.5ec98e94db9f7c29cfcf4c1bbb8ce7c2.jpg" rel=""><img alt="cpanel-upload.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65399" data-unique="nx9bwx8yh" src="https://academy.hsoub.com/uploads/monthly_2021_04/cpanel-upload.thumb.jpg.6139672b608cde52a36209a7b79fcf7b.jpg"></a>
</p>

<h3>
	إضافة قوالب جديدة FTP
</h3>

<p>
	لإضافة قالب جديد لموقع ووردبريس خاصتك عبر بروتوكول FTP سوف تحتاج إلى برنامج <a href="https://wordpress.org/support/article/ftp-clients/" rel="external nofollow">FTP client</a> وملفات القالب بعد فك ضغطها.
</p>

<ol>
<li>
		حمل ملفات القالب المضغوطة zip ثم استخرج هذه الملفات. يجب أن تحصل على مجلد له نفس اسم القالب يتضمن ملفات القالب.
	</li>
	<li>
		استخدم برنامج FTP Client للدخول إلى استضافتك وتوجه إلى المسار /wp-content/themes/.
	</li>
	<li>
		ارفع مجلد القالب إلى المسار السابق ضمن استضافتك.
	</li>
	<li>
		اتبع التعليمات في الأسفل لتفعيل القالب الجديد.
	</li>
</ol>
<h2>
	تفعيل القالب
</h2>

<p>
	الآن وبعد أن أصبح القالب الجديد ضمن المسار /wp-content/themes/ (سواءً استخدمت صفحة المدير، أو cPanel، أو FTP) أصبح جاهز للتفعيل. جميع القوالب الموجودة ضمن المسار /wp-content/themes/ متوفرة للتفعيل والتحديث (عندما يتم توفير التحديث من قبل مؤلف القالب) ولكن فقط قالب واحد يمكن أن يكون نشط.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65402" href="https://academy.hsoub.com/uploads/monthly_2021_04/new_theme_activated.jpg.5327a857f7e9bdff7571723d4f6cefa6.jpg" rel=""><img alt="new_theme_activated.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65402" data-unique="ppd7zaj3p" src="https://academy.hsoub.com/uploads/monthly_2021_04/new_theme_activated.jpg.5327a857f7e9bdff7571723d4f6cefa6.jpg"></a>
</p>

<p>
	لتفعيل قالب على موقعك الإلكتروني:
</p>

<ol>
<li>
		يجب تسجيل الدخول <a href="https://wordpress.org/support/article/administration-screens/" rel="external nofollow">لصفحة المدير</a> في ووردبريس.
	</li>
	<li>
		اختر "<a href="https://wordpress.org/support/article/administration-screens/#appearance-change-the-look-of-your-blog" rel="external nofollow">المظهر</a>"، ثم "<a href="https://wordpress.org/support/article/administration-screens/#themes" rel="external nofollow">قوالب</a>".
	</li>
	<li>
		يجب أن يظهر لك هنا كل القوالب الموجود ضمن المسار /wp-content/themes/ ومن هنا تستطيع تفاصيل كل قالب من خلال الضغط على <strong>تفاصيل القالب</strong> (حرك مؤشر الفأرة فوق صورة القالب).
	</li>
	<li>
		يسمح لك خيار <strong>معاينة حية</strong> بمعاينة القالب على موقعك مباشرة بما يوجد عليه من محتوى.
	</li>
	<li>
		اضغط على <strong>تفعيل</strong> لتفعيل القالب.
	</li>
</ol>
<p>
	سوف يتم تفعيل خيارك فورًا.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="65401" href="https://academy.hsoub.com/uploads/monthly_2021_04/invalid_theme_wordpress.jpg.6cbdf27b630644e7f62df52c29396a60.jpg" rel=""><img alt="invalid_theme_wordpress.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="65401" data-unique="oaw1zc5b0" src="https://academy.hsoub.com/uploads/monthly_2021_04/invalid_theme_wordpress.jpg.6cbdf27b630644e7f62df52c29396a60.jpg"></a>
</p>

<h2>
	إنشاء قوالب
</h2>

<p>
	إن كنت مهتمًا بإنشاء قالب خاص لك أو مهتم بتعلم المزيد عن هرمية القوالب، من فضلك راجع التوثيق المتعلق <a href="https://developer.wordpress.org/themes/" rel="external nofollow">بتطوير القوالب</a>.
</p>

<p>
	إن كنت تريد فقط تخصيص محتوى قالبك لاستخدامك الخاص فعليك التفكير في إنشاء <a href="https://developer.wordpress.org/themes/advanced-topics/child-themes/" rel="external nofollow">قالب ابن</a>.
</p>

<p>
	مهما كان ما تريد أنت مرحب بك لتنضم <a href="https://make.wordpress.org/themes/" rel="external nofollow">لفريق مراجعة القالب</a> وقناتهم المخصصة على تطبيق سلاك <a href="https://wordpress.slack.com/messages/themereview" rel="external nofollow">themereview</a>. تستطيع هنا طلب المساعدة عند تطوير القوالب لمستودع قوالب ووردبريس أو حتى البدء <a href="https://make.wordpress.org/themes/handbook/get-involved/become-a-reviewer/" rel="external nofollow">بمراجعة القوالب</a> بنفسك.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://wordpress.org/support/article/using-themes/" rel="external nofollow">Using Themes</a> من موقع <a href="https://wordpress.org/" rel="external nofollow">ووردبريس</a>.
</p>
]]></description><guid isPermaLink="false">1223</guid><pubDate>Wed, 05 May 2021 10:07:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x648;&#x62C;&#x648;&#x647; &#x627;&#x644;&#x62A;&#x639;&#x628;&#x64A;&#x631;&#x64A;&#x629; &#x648;&#x627;&#x62E;&#x62A;&#x635;&#x627;&#x631;&#x627;&#x62A; &#x644;&#x648;&#x62D;&#x629; &#x627;&#x644;&#x645;&#x641;&#x627;&#x62A;&#x64A;&#x62D; &#x641;&#x64A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%88%D8%AC%D9%88%D9%87-%D8%A7%D9%84%D8%AA%D8%B9%D8%A8%D9%8A%D8%B1%D9%8A%D8%A9-%D9%88%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B1%D8%A7%D8%AA-%D9%84%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D8%AA%D9%8A%D8%AD-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1222/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_04/342.png.e0f1e320983ab000c82b1c9ea4e0b360.png" /></p>

<h2 id="-">
	استخدام الوجوه التعبيرية
</h2>

<h3 id="-">
	ما هي الوجوه التعبيرية؟
</h3>

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

<p>
	تُستخدم علامتا ترقيم أو أكثر لإنشاء وجه تعبيري. بعض الأمثلة:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table border="1">
<thead><tr>
<th style="text-align: center;">
				علامات الترقيم
			</th>
			<th style="text-align: center;">
				الوجه التعبيري المُوافق لها
			</th>
		</tr></thead>
<tbody>
<tr>
<td style="text-align: center;">
				;-)
			</td>
			<td style="text-align: center;">
				<img alt="1f609.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65381" data-unique="hxeug2mk7" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f609.png.7bb2ec695a4f65dcf8c9bc176b019624.png" style="">
</td>
		</tr>
<tr>
<td style="text-align: center;">
				:-)
			</td>
			<td style="text-align: center;">
				<img alt="1f642.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65392" data-unique="th0iscjf0" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f642.png.f234266278ecd21105f14b0b95b64756.png" style="">
</td>
		</tr>
<tr>
<td style="text-align: center;">
				:-(
			</td>
			<td style="text-align: center;">
				<img alt="1f641.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65390" data-unique="n3lv68u5r" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f641.png.bc256e8d33faa31a8b2354ebd550fb30.png" style="">
</td>
		</tr>
<tr>
<td style="text-align: center;">
				:-?
			</td>
			<td style="text-align: center;">
				<img alt="1f615.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65383" data-unique="5tl7ta22n" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f615.png.1b2bd6ee35eed03b011ddb1d22af4e72.png" style="">
</td>
		</tr>
</tbody>
</table>
<p>
	لتتعرف أكثر على أيقونات المشاعر وقصتها ألق نظرة على <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://ar.wikipedia.org/wiki/%D8%A7%D9%86%D9%81%D8%B9%D8%A7%D9%84%D8%A9_(%D8%AB%D9%82%D8%A7%D9%81%D8%A9_%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA" rel="external nofollow">مقال ويكيبيديا</a>.
</p>

<h3 id="-">
	الوجوه التعبيرية ليست إيموجي
</h3>

<p>
	يمكن لكل من الوجوه التعبيرية Smilies والإيموجي Emoji عرض وجوه ضاحكة إلا أن الإيموجي هي تطوير لهذه الوظيفة وتمتلك مجالًا أوسع من الصور التي يمكن عرضها. (كما أن كل منها يتم إنشاؤه بشكل مختلف) لمزيد من المعلومات عن الإيموجي وكيفية استخدامها ألق نظرة على صفحة <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://codex.wordpress.org/Emoji" rel="external nofollow">الإيموجي</a>.
</p>

<h3 id="-">
	كيف يتعامل ووردبريس مع الوجوه التعبيرية؟
</h3>

<p>
	يُحول ووردبريس بشكل افتراضي نص الوجوه التعبيرية إلى صور جرافيكية فعندما تكتب ;-) ضمن مقالك سوف تتحول إلى <img alt="1f609.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65381" data-unique="9xbd6b8ws" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f609.png.7bb2ec695a4f65dcf8c9bc176b019624.png"> عند معاينة المقال أو نشره.
</p>

<h3 id="-">
	إلغاء ميزة صور الوجوه التعبيرية
</h3>

<p>
	أُزيل خيار تعطيل الوجوه التعبيرية بدءا من نسخة ووردبريس 4.3. يوجد <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/plugins/keep-emoticons-as-text/" rel="external nofollow">إضافة</a> إن أردت استعادة هذا الخيار.
</p>

<h3 id="-">
	ما النص الذي يجب عليه طباعته كي تظهر الوجوه التعبيرية
</h3>

<p>
	صور الوجوه التعبيرية والنصوص المُستخدمة لتوليدها:
</p>

<table border="1">
<thead><tr>
<th style="text-align: center;">
				الأيقونة
			</th>
			<th style="text-align: center;">
				النص
			</th>
			<th style="text-align: center;">
				النص
			</th>
			<th style="text-align: center;">
				النص الكامل
			</th>
			<th style="text-align: center;">
				الأيقونة
			</th>
			<th style="text-align: center;">
				النص الكامل
			</th>
		</tr></thead>
<tbody>
<tr>
<td style="text-align: center;">
				<img alt="1f642.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65392" data-unique="bjsf7ahcn" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f642.png.f234266278ecd21105f14b0b95b64756.png" style="">
</td>
			<td style="text-align: center;">
				<span>:</span><span>)</span>
			</td>
			<td style="text-align: center;">
				:-)
			</td>
			<td style="text-align: center;">
				:smile:
			</td>
			<td style="text-align: center;">
				<img alt="1f606.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65379" data-unique="whqepm2hn" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f606.png.d6de0c6597305ca0bee408d1fae8df3f.png" style="">
</td>
			<td style="text-align: center;">
				:lol:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f600.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65378" data-unique="yb6r6x628" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f600.png.6a3ce9cbbad6bab18c414464e409c045.png" style="">
</td>
			<td style="text-align: center;">
				<span>:</span>D
			</td>
			<td style="text-align: center;">
				:-D
			</td>
			<td style="text-align: center;">
				:grin:
			</td>
			<td style="text-align: center;">
				<img alt="1f633.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65389" data-unique="h9m4of31k" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f633.png.4bf133971dd24bddd13a0baad0db6355.png" style="">
</td>
			<td style="text-align: center;">
				:oops:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f641.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65390" data-unique="zqliqzfj3" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f641.png.bc256e8d33faa31a8b2354ebd550fb30.png" style="">
</td>
			<td style="text-align: center;">
				<span>:</span>(
			</td>
			<td style="text-align: center;">
				:-(
			</td>
			<td style="text-align: center;">
				:sad:
			</td>
			<td style="text-align: center;">
				<img alt="1f625.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65386" data-unique="4k4yniwis" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f625.png.e0de8bcffe032d48f9b4f90a29a4a993.png" style="">
</td>
			<td style="text-align: center;">
				:cry:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f62e.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65387" data-unique="xo1gwv3dj" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f62e.png.5c2bea58ba93d3c85fe52c16f15b8530.png" style="">
</td>
			<td style="text-align: center;">
				<span>:</span>o
			</td>
			<td style="text-align: center;">
				:-o
			</td>
			<td style="text-align: center;">
				:eek:
			</td>
			<td style="text-align: center;">
				<img alt="1f47f.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65376" data-unique="jd10bju2a" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f47f.png.59e21397d2180cf3c0b217265892bfd8.png" style="">
</td>
			<td style="text-align: center;">
				:evil:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f62f.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65388" data-unique="gzkslcqi6" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f62f.png.cba31be68a166f451769cb9ee8ed5c94.png" style="">
</td>
			<td style="text-align: center;">
				8o
			</td>
			<td style="text-align: center;">
				8-o
			</td>
			<td style="text-align: center;">
				:shock:
			</td>
			<td style="text-align: center;">
				<img alt="1f608.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65380" data-unique="ugjkeb6go" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f608.png.18977ee0d98336acd9846360a4add461.png" style="">
</td>
			<td style="text-align: center;">
				:twisted:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f615.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65383" data-unique="29l7mqcl7" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f615.png.1b2bd6ee35eed03b011ddb1d22af4e72.png" style="">
</td>
			<td style="text-align: center;">
				<span>:</span>?
			</td>
			<td style="text-align: center;">
				:-?
			</td>
			<td style="text-align: center;">
				:???:
			</td>
			<td style="text-align: center;">
				<img alt="1f644.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65393" data-unique="owndvdoz2" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f644.png.729a042e71144371b34b7c8f62277808.png" style="">
</td>
			<td style="text-align: center;">
				:roll:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img class="ipsImage ipsImage_thumbnailed" data-fileid="68044" data-unique="1l68y23nw" src="https://academy.hsoub.com/uploads/monthly_2021_05/1f60e.png.a8804be926e0aa2ff53f3489708d1773.png" alt="1f60e.png">
</td>
			<td style="text-align: center;">
				8)
			</td>
			<td style="text-align: center;">
				8-)
			</td>
			<td style="text-align: center;">
				:cool:
			</td>
			<td style="text-align: center;">
				<img alt="2757.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65396" data-unique="68lltc34o" src="https://academy.hsoub.com/uploads/monthly_2021_04/2757.png.e892e7231bf6aaff1c8b3efbe6eef473.png" style="">
</td>
			<td style="text-align: center;">
				:!:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f621.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65385" data-unique="akqo16nor" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f621.png.660754f0f3dbd7f5fb01134d1aaf5a94.png" style="">
</td>
			<td style="text-align: center;">
				:×
			</td>
			<td style="text-align: center;">
				:-×
			</td>
			<td style="text-align: center;">
				:mad:
			</td>
			<td style="text-align: center;">
				<img alt="2753.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65394" data-unique="1v0hu7c0u" src="https://academy.hsoub.com/uploads/monthly_2021_04/2753.png.c352f7e400615f4aa517207b0723be73.png" style="">
</td>
			<td style="text-align: center;">
				:?:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f61b.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65384" data-unique="zj5jbkc0y" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f61b.png.1a11e1cac6aec0a4d0cd2d868b50aae0.png" style="">
</td>
			<td style="text-align: center;">
				<span>:</span>P
			</td>
			<td style="text-align: center;">
				:-p
			</td>
			<td style="text-align: center;">
				:razz:
			</td>
			<td style="text-align: center;">
				<img alt="1f4a1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65377" data-unique="uly0lkh3a" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f4a1.png.cc8ac0778f40f1964230ddb966102b12.png">
</td>
			<td style="text-align: center;">
				:idea:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f610.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65382" data-unique="4a523k9ff" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f610.png.f97205b9d825c8e4809d6fbd47bcb8e2.png" style="">
</td>
			<td style="text-align: center;">
				<span>:</span>|
			</td>
			<td style="text-align: center;">
				:-|
			</td>
			<td style="text-align: center;">
				:neutral:
			</td>
			<td style="text-align: center;">
				<img alt="27a1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65395" data-unique="p3078wrpm" src="https://academy.hsoub.com/uploads/monthly_2021_04/27a1.png.0e6d8ed83e994c144e002f8d79ce7d4d.png" style="">
</td>
			<td style="text-align: center;">
				:arrow:
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				<img alt="1f609.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65381" data-unique="tm673az07" src="https://academy.hsoub.com/uploads/monthly_2021_04/1f609.png.7bb2ec695a4f65dcf8c9bc176b019624.png" style="">
</td>
			<td style="text-align: center;">
				<span>;</span>)
			</td>
			<td style="text-align: center;">
				;-)
			</td>
			<td style="text-align: center;">
				:wink:
			</td>
			<td style="text-align: center;">
				<img alt="mrgreen.png" class="ipsImage ipsImage_thumbnailed" data-fileid="65373" data-unique="63nfzsd8c" src="https://academy.hsoub.com/uploads/monthly_2021_04/mrgreen.png.f58046328826f1792e53d9315f4e46fb.png" style="">
</td>
			<td style="text-align: center;">
				:mrgreen:
			</td>
		</tr>
</tbody>
</table>
<p>
	في بعض الحالات توجد عدة نصوص لعرض نفس الوجه التعبيري.
</p>

<h3 id="-">
	حل مشاكل الوجوه التعبيرية
</h3>

<h4 id="-">
	لماذا لا تعمل؟
</h4>

<p>
	من المُحتمل أن تكون ميزة الوجوه التعبيرية مُعطلة من قبل مدير الموقع أو أن ملفات الصور التعبيرية قد حُذفت من المسار /wp-content/images/smilies.
</p>

<h4 id="-">
	لماذا لا تعمل الوجوه التعبيرية لدي؟
</h4>

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

<h4 id="-">
	أين تخزن صور الوجوه التعبيرية؟
</h4>

<p>
	تستطيع إيجاد الصور التابعة لها أو صور أيقونات المشاعر ضمن المسار /wp-content/images/smilies.
</p>

<h4 id="-">
	كيف يمكنني جعل صور وجوه تعبيرية مختلفة تظهر؟
</h4>

<p>
	أسهل طريقة للقيام بذلك هي ترشيح الوجوه التعبيرية.
</p>

<p>
	ارفع الصور التي تريدها أن تظهر بنفس الاسم إلى خادمك ضمن المسار /wp-content/images/smilies ) وأضف هذه الشيفرة ضمن ملف functions.php التابع لقالبك:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5742_11" style="">
<span class="pln">add_filter( </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"hljs-string"</span><span class="tag">&gt;</span><span class="pln">'smilies_src'</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">"hljs-string"</span><span class="tag">&gt;</span><span class="pln">'my_custom_smilies_src'</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">"hljs-number"</span><span class="tag">&gt;</span><span class="pln">10</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">"hljs-number"</span><span class="tag">&gt;</span><span class="pln">3</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">"hljs-function"</span><span class="tag">&gt;&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"hljs-keyword"</span><span class="tag">&gt;</span><span class="pln">function</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">"hljs-title"</span><span class="tag">&gt;</span><span class="pln">my_custom_smilies_src</span><span class="tag">&lt;/span&gt;&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"hljs-params"</span><span class="tag">&gt;</span><span class="pln">( $img_src, $img, $siteurl )</span><span class="tag">&lt;/span&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">"hljs-keyword"</span><span class="tag">&gt;</span><span class="pln">return</span><span class="tag">&lt;/span&gt;</span><span class="pln"> $siteurl.</span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"hljs-string"</span><span class="tag">&gt;</span><span class="pln">'/wp-content/images/smilies/'</span><span class="tag">&lt;/span&gt;</span><span class="pln">.$img;
}</span></pre>

<p>
	تعمل الشيفرة السابقة على استبدال <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://example.com/wp-includes/images/smilies/icon_question.gif" rel="external nofollow">https://example.com/wp-includes/images/smilies/icon_question.gif</a> بالرابط التالي <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://example.com/wp-content/images/smilies/icon_question.gif" rel="external nofollow">https://example.com/wp-content/images/smilies/icon_question.gif</a>.
</p>

<h4 id="-">
	لماذا تظهر صور الوجوه التعبيرية فارغة؟
</h4>

<p>
	إن رفعت الصور مؤخرًا فقد يكون السبب أن الصور المرفوعة رُفعت بصيغة ASCII عبر تطبيق FTP ولحل المشكلة عليك رفع الصور من جديد مع التأكد أنها سوف تُرفع بصيغة BINARY.
</p>

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

<h3 id="css-">
	CSS خاص بالوجوه التعبيرية
</h3>

<p>
	يُضاف صنف خاص بشكل تلقائي لصور الوجوه التعبيرية في ووردبريس هو wp-smiley عندما يتم عرضها في مقال. تستطيع استخدام هذا الصنف لتغيير شكل أو طريقة ظهور الوجوه التعبيرية بحيث تكون مميزة عن باقي صور المقال.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5742_7" style="">
<span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"hljs-selector-class"</span><span class="tag">&gt;</span><span class="pln">.post</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">"hljs-selector-tag"</span><span class="tag">&gt;</span><span class="pln">img</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">"hljs-attribute"</span><span class="tag">&gt;</span><span class="pln">float</span><span class="tag">&lt;/span&gt;</span><span class="pln">: left;
}</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5742_9" style="">
<span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"hljs-selector-tag"</span><span class="tag">&gt;</span><span class="pln">img</span><span class="tag">&lt;/span&gt;&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"hljs-selector-class"</span><span class="tag">&gt;</span><span class="pln">.wp-smiley</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">"hljs-attribute"</span><span class="tag">&gt;</span><span class="pln">float</span><span class="tag">&lt;/span&gt;</span><span class="pln">: none;
}</span></pre>

<p>
	للاطلاع على المزيد من المعلومات عن CSS في ووردبريس تستطيع <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://codex.wordpress.org/CSS" rel="external nofollow">البدء هنا</a>.
</p>

<p id="-">
	لمزيد من المعلومات عن الوجوه التعبيرية، يمكن العودة إلى صفحة <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://ar.wikipedia.org/wiki/%D8%A7%D9%86%D9%81%D8%B9%D8%A7%D9%84%D8%A9_(%D8%AB%D9%82%D8%A7%D9%81%D8%A9_%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA" rel="external nofollow">ويكيبيديا - أيقونات المشاعر</a>.
</p>

<h2 id="-">
	اختصارات لوحة المفاتيح في ووردبريس
</h2>

<h3 id="-">
	اختصارات المحرر
</h3>

<p>
	تستطيع ضمن محرر ووردبريس المرئي استخدام مجموعة من المفاتيح للقيام بأشياء تتطلب عادة استخدام الفأرة أو أجهزة دخل أخرى. توفر عليك الاختصارات التالية الوقت والجهد المُتمثل في مد يدك للوصول للفأرة والضغط على شريط الأدوات: استخدم زر (CTRL + مفتاح) في أنظمة ويندوز ولينكس وزر Command + مفتاح في نظام ماك.
</p>

<h4 id="ctrl-">
	CTRL+ مفتاح
</h4>

<p>
	يظهر في الجدول التالي المفاتيح التي يجب ضغطها مع زر CTRL والوظيفة التي يُقدمها الاختصار.
</p>

<table border="1">
<thead><tr>
<th style="text-align: center;">
				المفتاح الواجب ضغطع مع زر CTRL
			</th>
			<th style="text-align: center;">
				وظيفة الاختصار
			</th>
		</tr></thead>
<tbody>
<tr>
<td style="text-align: center;">
				C
			</td>
			<td style="text-align: center;">
				نسخ
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				V
			</td>
			<td style="text-align: center;">
				لصق
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				A
			</td>
			<td style="text-align: center;">
				تحديد الكل
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				X
			</td>
			<td style="text-align: center;">
				قص
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				Y
			</td>
			<td style="text-align: center;">
				عدم تراجع
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				Z
			</td>
			<td style="text-align: center;">
				تراجع
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				B
			</td>
			<td style="text-align: center;">
				خط سميك
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				I
			</td>
			<td style="text-align: center;">
				خط مائل
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				U
			</td>
			<td style="text-align: center;">
				خط أسفل الكلام
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				K
			</td>
			<td style="text-align: center;">
				إدخال أو تعديل رابط
			</td>
		</tr>
</tbody>
</table>
<h4 id="alt-shift-">
	Alt + Shift + مفتاح
</h4>

<p>
	تستخدم الاختصارات التالية مجموعة مختلفة من الأزرار: Alt + Shift + مفتاح في نظامي ويندوز ولينكس وCTRL + Option + مفتاح في ماك. (أنظمة ماك التي تعمل على نسخ ووردبريس 4.2 ما دون تستخدم Alt + Shift + مفتاح).
</p>

<p>
	يظهر في الجدول التالي المفاتيح التي يجب ضغطها مع Alt + Shift ووظيفة الاختصار
</p>

<table border="1">
<thead><tr>
<th style="text-align:center">
				المفتاح التي يجب ضغطه مع Alt + Shift
			</th>
			<th style="text-align:center">
				وظيفة الاختصار
			</th>
		</tr></thead>
<tbody>
<tr>
<td style="text-align:center">
				n
			</td>
			<td style="text-align:center">
				التحقق من الإملاء (يتطلب هذا إضافة)
			</td>
		</tr>
<tr>
<td style="text-align:center">
				l
			</td>
			<td style="text-align:center">
				محاذاة لليسار
			</td>
		</tr>
<tr>
<td style="text-align:center">
				j
			</td>
			<td style="text-align:center">
				محاذاة النص من الجانبين
			</td>
		</tr>
<tr>
<td style="text-align:center">
				c
			</td>
			<td style="text-align:center">
				محاذاة للمنتصف
			</td>
		</tr>
<tr>
<td style="text-align:center">
				d
			</td>
			<td style="text-align:center">
				تحديد النص كنص محذوف بوضع خط ضمنه
			</td>
		</tr>
<tr>
<td style="text-align:center">
				r
			</td>
			<td style="text-align:center">
				محاذاة لليمين
			</td>
		</tr>
<tr>
<td style="text-align:center">
				u
			</td>
			<td style="text-align:center">
				قائمة غير مرقمة
			</td>
		</tr>
<tr>
<td style="text-align:center">
				a
			</td>
			<td style="text-align:center">
				تضمين رابط
			</td>
		</tr>
<tr>
<td style="text-align:center">
				o
			</td>
			<td style="text-align:center">
				قائمة مرقمة
			</td>
		</tr>
<tr>
<td style="text-align:center">
				s
			</td>
			<td style="text-align:center">
				إزالة رابط
			</td>
		</tr>
<tr>
<td style="text-align:center">
				q
			</td>
			<td style="text-align:center">
				اقتباس
			</td>
		</tr>
<tr>
<td style="text-align:center">
				m
			</td>
			<td style="text-align:center">
				إضافة صورة
			</td>
		</tr>
<tr>
<td style="text-align:center">
				w
			</td>
			<td style="text-align:center">
				نمط الكتابة الحر بدون إلهاء
			</td>
		</tr>
<tr>
<td style="text-align:center">
				t
			</td>
			<td style="text-align:center">
				إدخال وسم المزيد
			</td>
		</tr>
<tr>
<td style="text-align:center">
				p
			</td>
			<td style="text-align:center">
				إدخال وسم فصل الصفحة
			</td>
		</tr>
<tr>
<td style="text-align:center">
				h
			</td>
			<td style="text-align:center">
				مساعدة
			</td>
		</tr>
<tr>
<td style="text-align:center">
				x
			</td>
			<td style="text-align:center">
				إضافة أو إزالة وسم كود
			</td>
		</tr>
<tr>
<td style="text-align:center">
				1
			</td>
			<td style="text-align:center">
				ترويسة 1
			</td>
		</tr>
<tr>
<td style="text-align:center">
				2
			</td>
			<td style="text-align:center">
				ترويسة 2
			</td>
		</tr>
<tr>
<td style="text-align:center">
				3
			</td>
			<td style="text-align:center">
				ترويسة 3
			</td>
		</tr>
<tr>
<td style="text-align:center">
				4
			</td>
			<td style="text-align:center">
				ترويسة 4
			</td>
		</tr>
<tr>
<td style="text-align:center">
				5
			</td>
			<td style="text-align:center">
				ترويسة 5
			</td>
		</tr>
<tr>
<td style="text-align:center">
				6
			</td>
			<td style="text-align:center">
				ترويسة 6
			</td>
		</tr>
<tr>
<td style="text-align:center">
				9
			</td>
			<td style="text-align:center">
				عنوان
			</td>
		</tr>
</tbody>
</table>
<h4 id="-">
	اختصارات تهيئة النص
</h4>

<p>
	اختصارات تهيئة النص أثناء استخدام المحرر المرئي (منذ نسخة 4.3)
</p>

<table border="1">
<thead><tr>
<th style="text-align: center;">
				المفتاح الواجب استخدامه كاختصار
			</th>
			<th style="text-align: center;">
				وظيفة الاختصار
			</th>
		</tr></thead>
<tbody>
<tr>
<td style="text-align: center;">
				*
			</td>
			<td style="text-align: center;">
				ابدأ قائمة غير مرتبة
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				-
			</td>
			<td style="text-align: center;">
				ابدأ قائمة غير مرتبة
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				1.
			</td>
			<td style="text-align: center;">
				ابدأ قائمة مرتبة
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				1)
			</td>
			<td style="text-align: center;">
				ابدأ قائمة مرتبة
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				#
			</td>
			<td style="text-align: center;">
				H1
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				##
			</td>
			<td style="text-align: center;">
				H2
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				###
			</td>
			<td style="text-align: center;">
				H3
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				####
			</td>
			<td style="text-align: center;">
				H4
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				#####
			</td>
			<td style="text-align: center;">
				H5
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				######
			</td>
			<td style="text-align: center;">
				H6
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				&gt;
			</td>
			<td style="text-align: center;">
				تحول النص إلى اقتباس
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				---
			</td>
			<td style="text-align: center;">
				خط أفقي
			</td>
		</tr>
<tr>
<td style="text-align: center;">
				'..'
			</td>
			<td style="text-align: center;">
				تحول النص إلى كتلة كود
			</td>
		</tr>
</tbody>
</table>
<h3 id="-">
	اختصارات لوحة المفاتيح للتعليقات
</h3>

<p>
	أُضيفت ميزة تصفح التعليقات ومراجعتها من خلال اختصارات لوحة المفاتيح في <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://codex.wordpress.org/Version%202.7" rel="external nofollow">نسخة ووردبريس 2.7</a> حيث صُممت هذه الاختصارات لتوفير الوقت مما يسمح لك بالتنقل بسرعة واتخاذ إجراءات بحق التعليقات. سوف تجد هذه الاختصارات مفيدة في حال كانت مدونتك تتلقى كمًا كبيرًا من التعليقات.
</p>

<h4 id="-">
	تفعيل اختصارات لوحة المفاتيح
</h4>

<p>
	يتم تفعيل اختصارات لوحة المفاتيح لكل مستخدم على حدى ويمكنك تفعيلها من خلال زيارة <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/support/article/users-your-profile-screen/" rel="external nofollow">حسابك الشخصي</a> ضمن <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/support/article/administration-screens/#your-profile" rel="external nofollow">الأعضاء</a> في <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/support/article/administration-screens/" rel="external nofollow">صفحة المدير</a>. فعل خيار <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/support/article/users-your-profile-screen/#your-profile-and-personal-options" rel="external nofollow">اختصارات لوحة المفاتيح</a> لإدارة التعليقات باستخدامها.
</p>

<p>
	صُمَّمَت اختصارات لوحة المفاتيح لتستخدم كلتا يديك بشكل متزامن على لوحة مفاتيح تعمل بنمط QWERTY.
</p>

<h4 id="-">
	أهمية تحديد التعليق
</h4>

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

<h4 id="-">
	استخدام لوحة المفاتيح للتنقل بين التعليقات
</h4>

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

<ul>
<li>
		الضغط على j ينقل التحديد (الخلفية ذات اللون الأزرق الفاتح) للأسفل
	</li>
	<li>
		الضغط على k ينقل التحديد (الخلفية ذات اللون الأزرق الفاتح) للأعلى
	</li>
</ul>
<p>
	عند وصولك لأسفل الصفحة وضغطك على الحرف j سوف يتم نقلك إلى الصفحة التالية وسيتم تحديد التعليق الأول من هذه الصفحة. بالمثل فإن الضغط على حرف k عندما تكون في أعلى الصفحة سوف ينقلك إلى الصفحة السابقة مع تحديد آخر تعليق في هذه الصفحة. تجعل هذه الاختصارات من عملية التنقل بين قائمة طويلة من التعليقات أمرًا سهلًا.
</p>

<h4 id="-">
	استخدام اختصارات لوحة المفاتيح لتطبيق إجراءات على التعليقات
</h4>

<p>
	لتكون هذه الإجراءات ذات مفعول على التعليقات يجب عليك أولًا التأكد من تحديد تعليق (انظر في الأعلى) ثم اضغط على:
</p>

<ul>
<li>
		a: قبول التعليق المحدد وإظهاره.
	</li>
	<li>
		s: اعتبار التعليق المحدد على أنه تعليق مزعج.
	</li>
	<li>
		d: نقل التعليق إلى سلة المهملات (ووردبريس 2.9) أو حذف التعليق الحالي.
	</li>
	<li>
		u: عدم الموافقة على ظهور التعليق المحدد مما يعيده إلى حالة قيد المراجعة.
	</li>
	<li>
		r: بدء عملية الرد على التعليق الحالي (يمكنك الضغط على Esc لإلغاء الرد)
	</li>
	<li>
		q: تنشيط التحرير السريع مما يسمح لك بتعديل سريع على التعليق الحالي.
	</li>
	<li>
		e: النقل إلى صفحة التعديل للتعديل على التعليق الحالي.
	</li>
</ul>
<h4 id="-">
	إجراء جماعي
</h4>

<p>
	تستطيع أيضًا تطبيق إجراء على عدة تعليقات بنفس الوقت ولكن أولًا عليك تحديد هذه التعليقات باستخدام مفتاح x لتفعيل مربع الاختيار بجانب كل تعليق. يمكن استخدام Shift + x لعكس حالة المربع. حالما تقوم باختيار عدة تعليقات اضغط على:
</p>

<ul>
<li>
		Shift + a للموافقة على التعليقات المحددة
	</li>
	<li>
		Shift + s لتعيين التعليقات المحددة أنها تعليقات مزعجة
	</li>
	<li>
		Shift + d لحذف التعليقات المحددة
	</li>
	<li>
		Shift + u لإلغاء الموافقة على التعليقات المحددة
	</li>
	<li>
		Shift + t لنقل التعليقات المحددة إلى سلة المهملات
	</li>
	<li>
		Shift + z لاستعادة التعليقات المحددة من سلة المهملات
	</li>
</ul>
<p>
	ترجمة -وبتصرف- للمقالين:
</p>

<ul>
<li>
		المقال <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/support/article/using-smilies/" rel="external nofollow">Using ٍSmilies</a> من موقع <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/" rel="external nofollow">ووردبريس</a>.
	</li>
	<li>
		المقال <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/support/article/keyboard-shortcuts/" rel="external nofollow">Keyboard Shortcuts</a> من موقع <a data-ss1621338466="1" data-ss1621339298="1" data-ss1621339635="1" href="https://wordpress.org/" rel="external nofollow">ووردبريس</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">1222</guid><pubDate>Thu, 29 Apr 2021 10:00:00 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x635;&#x641;&#x62D;&#x629; &#x627;&#x644;&#x628;&#x62D;&#x62B; &#x641;&#x64A; &#x627;&#x644;&#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%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D9%81%D9%8A-%D8%A7%D9%84%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1221/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_04/5.5.png.34f47843ee9d4cce7df3fc2ce7f38c22.png" /></p>

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

<p>
	صفحة البحث هي <a data-ss1621338261="1" href="https://codex.wordpress.org/Pages" rel="external nofollow">صفحة</a> ووردبريس تستخدم <a data-ss1621338261="1" href="https://codex.wordpress.org/Pages#Page_Templates" rel="external nofollow">قالب صفحة مخصص</a> وذلك لإتاحة ميزة البحث للمستخدمين ضمن موقعك الإلكتروني.
</p>

<h2>
	أشياء عليك معرفتها
</h2>

<p>
	تمتلك قوالب ووردبريس المختلفة <a data-ss1621338261="1" href="https://codex.wordpress.org/Templates" rel="external nofollow">ملفات قالب</a> (ملفات القالب هنا يُقصد بها ملفات تتضمن شيفرة مرتبطة بنوع صفحة معين مثل صفحة البحث أو صفحة عرض المقالات وهي تُعطي للصفحة هيكليتها ووظيفتها) مختلفة فالبعض يستخدم ملف قالب <a data-ss1621338261="1" href="https://codex.wordpress.org/Template_Hierarchy##search-result" rel="external nofollow">search.php</a> وهي ليست صفحة بحث بل قالب لعرض نتائج البحث. يوجد أيضا ملف قالب يُدعى searchform.php والذي يُضمن عادة في العمود الجانبي للعديد من القوالب كي يولد مربع بحث. قد لا يمتلك القالب الذي تستخدمه مثل هذا الملف، لذلك تستطيع نسخه بسهولة من القالب الافتراضي لووردبريس.
</p>

<p>
	سوف تحتاج إلى <a data-ss1621338261="1" href="https://codex.wordpress.org/Pages#Page_Templates" rel="external nofollow">قالب للصفحة</a> لإنشاء صفحة بحث مخصصة لك، يتضمن هذا القالب مربع البحث والمعلومات التي تريد للمستخدمين أن يروها قبل بدء عملية البحث ضمن موقعك.
</p>

<p>
	تحقق من ملفات قالبك على ووردبريس إن كان يتضمن ملف قالب page.php حيث أن القالب الافتراضي لووردبريس يتضمن هذا الملف ولكن ليس بالضرورة أن تجده في قوالب أخرى. في حال وجدت الملف، اتبع <a data-ss1621338261="1" href="https://codex.wordpress.org/#Using%20the%20page.php" rel="external nofollow">هذه التعليمات</a> أما إن لم تجده فإليك المعلومات اللازمة لك <a data-ss1621338261="1" href="https://codex.wordpress.org/#Creating%20a%20Search%20Page%20Template" rel="external nofollow">لإنشاء صفحة البحث الخاصة بك</a>.
</p>

<h2>
	إنشاء قالب صفحة بحث
</h2>

<ol>
<li>
		افتح ملف page.php باستخدام <a data-ss1621338261="1" href="https://codex.wordpress.org/Glossary#Text%20editor" rel="external nofollow">محرر نصوص</a> واحفظه باسم searchpage.php. تستطيع إنشاء ملف page.php في حال لم تجده بالاعتماد على قالب الملف index.php للقالب الذي تستخدمه. ملاحظة: اسم الملف search.php محجوز بشكل مًسبق كاسم خاص لقالب ملف البحث لذلك عليك تجنب استخدامه بينما الاسم المًستخدم في الخطوة الأولى searchpage.php غير محجوز ويُسهل عملية التعرف على عمل الملف عند النظر إليه ضمن مجموعة كبيرة من الملفات.
	</li>
	<li>
		اتبع الخطوات التالية بعد حفظ الملف السابق:
	</li>
</ol>
<ul>
<li>
		احذف <a data-ss1621338261="1" href="https://codex.wordpress.org/The%20Loop" rel="external nofollow">الحلقة</a> (عمليا كل ما هو موجود ضمن وسم div الخاص بالمحتوى) مع الإبقاء على وسوم div دون أي تعديل.
	</li>
	<li>
		أضف <a data-ss1621338261="1" href="https://codex.wordpress.org/Designing%20Headings" rel="external nofollow">الترويسة</a> مثل "Search Posts" أو أي بديل مماثل. تستطيع استخدام أصناف من ملفات CSS الخاصة بك أو إنشاء أصناف جديدة.
	</li>
	<li>
		انسخ ما يلي ضمن محتوى وسم div أو أي وسم div آخر يتضمن المحتوى الخاص بصفحتك:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_7" style="">
<span class="pun">&lt;?</span><span class="pln">php get_search_form</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln"> </span></pre>

<ul>
<li>
		توجه لبداية ملف searchpage.php وأضف ما يلي قبل أي شيفرة لإعطاء ترويسة لصفحة البحث الخاصة بك. سوف يتعرف عليها ووردبريس ضمن صفحة الإدارة:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_9" style="">
<span class="pln"> </span><span class="pun">&lt;?</span><span class="pln">php
 </span><span class="com">/**
 * Template Name: Search Page
 */</span><span class="pln">
 </span><span class="pun">?&gt;</span></pre>

<ol start="3">
<li>
		احفظ الملف.
	</li>
	<li>
		ارفع الملف إلى مسار القالب (في حال قمت بتغييرات على ملف style.css عليك برفعه أيضا).
	</li>
</ol>
<p>
	يجب أن يظهر محتوى ملف search.php كالتالي في حال استعنت بملف page.php من قالب Twenty Seventeen لإنشائه:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_11" style="">
<span class="pln"> </span><span class="pun">&lt;?</span><span class="pln">php
 </span><span class="com">/**
 * Template Name: Search Page
 */</span><span class="pln">

 </span><span class="pun">?&gt;</span><span class="pln">
 </span><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">"wrap"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"primary"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"content-area"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;main</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"main"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"site-main"</span><span class="pln"> </span><span class="atn">role</span><span class="pun">=</span><span class="atv">"main"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="pun">&lt;?</span><span class="pln">php get_search_form</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
        </span><span class="tag">&lt;/main&gt;</span><span class="com">&lt;!-- #main --&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="com">&lt;!-- #primary --&gt;</span><span class="pln">
 </span><span class="tag">&lt;/div&gt;</span><span class="com">&lt;!-- .wrap --&gt;</span><span class="pln">

 </span><span class="pun">&lt;?</span><span class="pln">php get_footer</span><span class="pun">();</span></pre>

<h2>
	إنشاء صفحة بحث
</h2>

<p>
	تستطيع الآن إنشاء صفحة البحث بالاعتماد على قالب الصفحة.
</p>

<ol>
<li>
		توجه ضمن <a data-ss1621338261="1" href="https://codex.wordpress.org/Administration%20Screens" rel="external nofollow">صفحة المدير</a> إلى "صفحات" ثم "أضف جديدًا".
	</li>
	<li>
		أدخل "بحث" ضمن حقل العنوان (هذا هو عنوان صفحة البحث الخاصة بك) <strong>لا تكتب أي شي ضمن محتوى الصفحة</strong>.
	</li>
	<li>
		ابحث عن "خصائص الصفحة" على الجانب الأيسر ضمن نفس الصفحة.
	</li>
	<li>
		اضغط على القائمة المنسدلة في "القالب" واختر Search Page.
	</li>
	<li>
		اضغط على زر "نشر".
	</li>
</ol>
<p>
	سوف يظهر مربع بحث بسيط مثل التالي
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="64688" data-ss1621338261="1" href="https://academy.hsoub.com/uploads/monthly_2021_04/custom_search_page_1.jpg.3d6ae4be02cf0fece9a7ec1defc2c675.jpg" rel=""><img alt="custom_search_page_1.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="64688" data-unique="j4gt2gcoo" src="https://academy.hsoub.com/uploads/monthly_2021_04/custom_search_page_1.jpg.3d6ae4be02cf0fece9a7ec1defc2c675.jpg"></a>
</p>

<h2>
	الربط مع صفحة البحث الخاصة بك
</h2>

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

<h3>
	باستخدام معرف الصفحة Page ID
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_13" style="">
<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">"index.php?page_id=17"</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"Search Page"</span><span class="tag">&gt;</span><span class="pln">Search Page</span><span class="tag">&lt;/a&gt;</span></pre>

<p>
	أو تستطيع استخدام السطر التالي ضمن ملف القالب
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_15" style="">
<span class="pln"> &lt;a href="</span><span class="pun">&lt;?</span><span class="pln">php echo home_url</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">/?page_id=17"&gt;Search Page</span><span class="tag">&lt;/a&gt;</span></pre>

<h3>
	باستخدام الاسم اللطيف slug
</h3>

<p>
	يتم اختيار رابط الصفحة ضمن <a data-ss1621338261="1" href="https://codex.wordpress.org/Write_Page_SubPanel" rel="external nofollow">تحرير الصفحة</a> وهو عادة اسم الصفحة في حال كنت تستخدم <a data-ss1621338261="1" href="https://codex.wordpress.org/Using%20Permalinks" rel="external nofollow">الروابط الدائمة</a>، كما تستطيع تغييره بشكل يدوي. مثال على رابط الصفحة قد يكون كالتالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_17" style="">
<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">"/wordpress/search-page/"</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"Search Page"</span><span class="tag">&gt;</span><span class="pln">Search Page</span><span class="tag">&lt;/a&gt;</span></pre>

<p>
	لأي منشور أو صفحة أو قالب عندما يكون الاسم اللطيف هو "search-page" أو يمكنك إضافة السطر التالي لملف القالب
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_25" style="">
<span class="pln"> &lt;a href="</span><span class="pun">&lt;?</span><span class="pln">php echo home_url</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">/wordpress/search-page/" title="Search Page"&gt;Search Page</span><span class="tag">&lt;/a&gt;</span></pre>

<h3>
	باستخدام ()wp_listpages
</h3>

<p>
	إن كنت تستخدم وسم القالب <a data-ss1621338261="1" href="https://codex.wordpress.org/Template%20Tags/wp_list_pages" rel="external nofollow">()wp_listpages</a> سوف يتم توليد اسم الصفحة بشكل آلي ضمن قائمة الصفحات الخاصة بك.
</p>

<h2>
	تخصيص صفحة البحث الخاصة بك
</h2>

<p>
	الآن وبعد إنشاء صفحة البحث الخاصة بك، تستطيع تخصيص طريقة عرضها وللبدء بذلك افتح ملف searchpage.php ضمن محرر النصوص وأضف ما تريد من تعديلات. تستطيع إضافة نص يساعد الزوار على البحث ضمن موقعك وذلك ضمن ملف searchpage.php قبل الدالة <code>get_search_form()‎</code>.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_27" style="">
<span class="pln"> </span><span class="tag">&lt;p&gt;</span><span class="pln">My Site features articles about 
 </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"WordPress Articles"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"/category/wordpress/"</span><span class="tag">&gt;</span><span class="pln">WordPress</span><span class="tag">&lt;/a&gt;</span><span class="pln">, 
 </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"Web Design Articles"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"/category/web-design/"</span><span class="tag">&gt;</span><span class="pln">web page design</span><span class="tag">&lt;/a&gt;</span><span class="pln">, 
 </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"Development Articles"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"/category/website-development/"</span><span class="tag">&gt;</span><span class="pln">website development</span><span class="tag">&lt;/a&gt;</span><span class="pln"> 
and </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"CSS Articles"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"/category/css/"</span><span class="tag">&gt;</span><span class="pln">CSS</span><span class="tag">&lt;/a&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">To search my website, please use the form below.</span><span class="tag">&lt;/p&gt;</span></pre>

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

<h2>
	حفظ نتائح صفحة البحث والتصفيح
</h2>

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

<p>
	يمكنك استخدام متغيرات إضافية للمصفوفة search_<em>query</em>$ للتعديل على الاستعلام. نفِّذ search_query$ من خلال كائن جديد wp_query$<em>. يمكن إيجاد مزيد من المعلومات عن الغرض <a data-ss1621338261="1" href="https://codex.wordpress.org/Class_Reference/WP_Query" rel="external nofollow">WP</a></em>_<a data-ss1621338261="1" href="https://codex.wordpress.org/Class_Reference/WP_Query" rel="external nofollow">Query</a>.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_29" style="">
<span class="pln"> </span><span class="tag">&lt;br&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="str">&lt;br&gt;</span><span class="pln"> </span><span class="kwd">global</span><span class="pln"> $query_string</span><span class="pun">;&lt;</span><span class="str">/p&gt; &lt;p&gt;$query_args = explode("&amp;", $query_string);&lt;br&gt; $search_query = array();&lt;/</span><span class="pln">p</span><span class="pun">&gt;</span><span class="pln"> </span><span class="str">&lt;p&gt;</span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> strlen</span><span class="pun">(</span><span class="pln">$query_string</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{&lt;</span><span class="pln">br</span><span class="pun">&gt;</span><span class="pln"> </span><span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$query_args </span><span class="kwd">as</span><span class="pln"> $key </span><span class="pun">=&gt;</span><span class="pln"> $string</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{&lt;</span><span class="pln">br</span><span class="pun">&gt;</span><span class="pln"> $query_split </span><span class="pun">=</span><span class="pln"> explode</span><span class="pun">(</span><span class="str">"="</span><span class="pun">,</span><span class="pln"> $string</span><span class="pun">);&lt;</span><span class="pln">br</span><span class="pun">&gt;</span><span class="pln"> $search_query</span><span class="pun">[</span><span class="pln">$query_split</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> urldecode</span><span class="pun">(</span><span class="pln">$query_split</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]);&lt;</span><span class="pln">br</span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="com">// foreach&lt;br&gt; } //if&lt;/p&gt; &lt;p&gt;$search = new WP_Query($search_query);&lt;br&gt; </span><span class="pun">?&gt;</span><span class="pln"> </span><span class="tag">&lt;br&gt;</span></pre>

<p>
	يمكنك التعرف على المتغيرات الإضافية التي يمكنك استخدامها لتخصيص الطلب في <a data-ss1621338261="1" href="https://codex.wordpress.org/Class_Reference/WP_Query" rel="external nofollow">WP_Query</a>.
</p>

<h3>
	عرض النتائج الكاملة
</h3>

<p>
	لعرض نتائج البحث كاملة في صفحة البحث search.php يجب استعادة كامل المنشورات التي عُثر عليها باستخدام الكائن wp_query.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6814_33" style="">
<span class="pln"> </span><span class="pun">&lt;?</span><span class="pln">php
 </span><span class="kwd">global</span><span class="pln"> $wp_query</span><span class="pun">;</span><span class="pln">
 $total_results </span><span class="pun">=</span><span class="pln"> $wp_query</span><span class="pun">-&gt;</span><span class="pln">found_posts</span><span class="pun">;</span><span class="pln">
 </span><span class="pun">?&gt;</span></pre>

<p>
	يمكنك التعرف على المتغيرات الإضافية التي يمكنك استخدامها لتخصيص الطلب في <a data-ss1621338261="1" href="https://codex.wordpress.org/Class_Reference/WP_Query" rel="external nofollow">WP_Query</a>.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a data-ss1621338261="1" href="https://wordpress.org/support/article/creating-a-search-page/" rel="external nofollow">Creating a Search Page</a> من موقع <a data-ss1621338261="1" href="https://wordpress.org/" rel="external nofollow">ووردبريس</a>.
</p>
]]></description><guid isPermaLink="false">1221</guid><pubDate>Mon, 26 Apr 2021 15:07:00 +0000</pubDate></item><item><title>&#x635;&#x641;&#x62D;&#x629; &#x625;&#x639;&#x62F;&#x627;&#x62F;&#x627;&#x62A; &#x627;&#x644;&#x645;&#x646;&#x627;&#x642;&#x634;&#x629; &#x641;&#x64A; &#x627;&#x644;&#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%B5%D9%81%D8%AD%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%86%D8%A7%D9%82%D8%B4%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1220/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_04/6083d5172520f_6(2).png.c94e65f9abcc7c37b26057e05cc1a114.png" /></p>

<p>
	تسمح صفحة إعدادات المناقشة بالتحكم بالخيارات المرتبطة بالتعليقات (تُدعى أيضا بالمناقشة). حيث يُقرر من خلالها المدير تفعيل <a href="https://wordpress.org/support/article/glossary/#comments" rel="external nofollow">التعليقات</a> ضمن الموقع أم لا وإن كانت التنبيهات <a href="https://wordpress.org/support/article/glossary/#pingback" rel="external nofollow">pingbacks</a> والتعقيبات <a href="https://wordpress.org/support/article/glossary/#trackback" rel="external nofollow">trackbacks</a> مقبولة أم لا وما هي التعليقات التي تُعتبر <a href="https://codex.wordpress.org/Combating_Comment_Spam" rel="external nofollow">مزعجة</a> كما يمكنه في الصفحة ذاتها اختيار الحالات التي تُرسل فيها المدونة تنبيهات بريد إلكتروني للمدير لأحداث معينة على الموقع.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="64687" href="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_discussion.jpg.1de79e390d80828f078988ef6d7a8a7d.jpg" rel=""><img alt="wordpress_discussion.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="64687" data-unique="yiyu7v5xq" src="https://academy.hsoub.com/uploads/monthly_2021_04/wordpress_discussion.thumb.jpg.f40213e532d8069635bd78616c5c5f8b.jpg"></a>
</p>

<h2>
	الإعدادات الافتراضية للمقال
</h2>

<p>
	يمكن تجاوز هذه الإعدادات فرديًا لكل مقال.
</p>

<ul>
<li>
		محاولة تنبيه المدونات المشار إليها في المقالة:  يقوم ووردبريس بإرسال تنبيه ping للموقع أو المقال الذي أُشير له ضمن المقال عند تفعيل هذا الخيار. سوف تظهر هذه الإشارة ضمن قسم التعليقات لموقعهم إن كان الموقع المُشار إليه يسمح بالتنبيهات <a href="https://wordpress.org/support/article/glossary/#pingback" rel="external nofollow">pingbacks</a>. تتم عملية التنبيه خلال نشر المقال على شبكة الانترنت لذلك وجود العديد من الروابط التشعبية ضمن المقال سوف يُبطئ عملية النشر لأن ووردبريس يقوم بتنبيه جميع المواقع الإلكترونية قبل نشر المقال.
	</li>
	<li>
		السماح بإشعارات الربط من المدونات الأخرى (التنبيهات PingBacks والتعقيبات TrackBack) في المقالات الجديدة: تفعيل هذا الخيار يعني قبول ووردبريس التنبيهات Pings من مواقع أخرى التي يُحتمل أن تشير إلى مقالات ضمنه وكما ذُكر سابقًا فإن التنبيهات <a href="https://wordpress.org/support/article/glossary/#pingback" rel="external nofollow">PingBacks</a> والتعقيبات <a href="https://wordpress.org/support/article/glossary/#trackback" rel="external nofollow">Trackbacks</a> سوف تظهر في قسم التعليقات للمقال عند تفعيل هذا الخيار.
	</li>
	<li>
		السماح للناس بإرسال التعليقات على المقالات الجديدة (يُمكن تغيير وتجاوز هذه الإعدادات في كل مقال بطريقة منفصلة) يجب تفعيل هذا الخيار للسماح بالتعليق على المقالات ومن الممكن التحكم بالتعليقات من خلال تحويل المقال لمقال خاص يتطلب كلمة مرور صحيحة قبل السماح بالتعليق أما لمنع الزوار من التعليق يجب عدم تفعيل هذا الخيار.
	</li>
</ul>
<h3>
	إعدادات التعليقات
</h3>

<ul>
<li>
		يجب على المعلق كتابة الاسم والبريد الإلكتروني - يفرض هذا الخيار على أصحاب التعليقات المزعجة بذل جهد إضافي من خلال كتابة الاسم والبريد الإلكتروني قبل نشر التعليق وبالرغم من بساطة الموضوع إلا أنه يُخفض من عدد التعليقات المزعجة.
	</li>
	<li>
		يجب على الزوار التسجيل ليتمكنوا من التعليق - تفعيل هذا الخيار يسمح فقط للزوار المسجلين ضمن الموقع التعليق على المقالات.
	</li>
	<li>
		إيقاف التعليقات تلقائيًا في المقالات التي مرّ على نشرها x يوم. - يُحدد هذا الخيار عدد الأيام اللازمة بعد نشر المقال لإيقاف ميزة التعليقات ضمنه بشكل تلقائي.
	</li>
	<li>
		إتاحة التعليقات التشعبية بحيث يكون العمق x مستويات - يسمح هذا الخيار بكتابة تعليقات متشعبة وتحديد مستوى عمق التعليقات المتداخلة (10 هو الحد الأقصى) المسموح بها. يجب على القالب المُستخدم أن يكون مُجهز بشكل جيد لعرض التعليقات المتداخلة.
	</li>
	<li>
		حدّد عدد التعليقات في كل صفحة بحيث يظهر x تعليق في كل صفحة واعرض صفحة التعليقات [الأولى/الأخيرة] افتراضياً، ويجب أن تظهر التعليقات [الأحدث/الأقدم] في أعلى الصفحة - يسمح هذا الخيار بعرض التعليقات ضمن صفحات وتحديد عدد التعليقات الأعظمي لعرضه ضمنها إضافة إلى اختيار ترتيب الصفحات من الأولى للأخيرة أو العكس وعرض التعليقات ضمن هذه الصفحات من الأقدم أو من الأحدث.
	</li>
</ul>
<h3>
	أرسل لي بريد إلكتروني في حال
</h3>

<p>
	يتيح الخياران التاليان التحكم بالأحداث التي يتلقى فيها المؤلفون والمدير تنبيهات عن التعليقات التي تنتظر المراجعة واستخدام "لي" هنا يشير إما إلى مؤلف المقال أو المدير (الشخص الذي يُستخدم بريده الإلكتروني لأغراض إدارية).
</p>

<ul>
<li>
		نشر تعليق، حيث سيتم إرسال تنبيه للمؤلف عند تفعيل هذا الخيار عند كتابة أي تعليق على الموقع ولكن في حال تلقى مقال الكثير من التعليقات سوف يمتلئ صندوق بريد المؤلف بالإشعارات.
	</li>
	<li>
		إضافة تعليق ينتظر المراجعة، إذ سيرسل ووردبريس عند تفعيل هذا الخيار تنبيه بأن التعليق قيد المراجعة، حيث يُرسل التنبيه إلى البريد الإلكتروني المدرج في تبويب "<a href="https://wordpress.org/support/article/settings-general-screen/" rel="external nofollow">عام</a>" من قسم "<a href="https://wordpress.org/support/article/administration-screens/#general" rel="external nofollow">إعدادات</a>" ضمن <a href="https://wordpress.org/support/article/administration-screens/" rel="external nofollow">حساب المدير</a>. هذا الخيار مفيد عندما يكون لمدونتك عدة مؤلفين وكل مؤلف مخول لرفض أو قبول التعليقات.
	</li>
</ul>
<p>
	يمكن لمدير الموقع باستخدام هذه الطريقة مراجعة التعليقات المقبولة أو المرفوضة من قبل المؤلفين.
</p>

<h3>
	قبل ظهور التعليق
</h3>

<p>
	توفر هذه الإعدادات تحكم أوسع بما يتعلق بالتعليقات التي يتم نشرها.
</p>

<ul>
<li>
		يجب الموافقة على التعليق يدويًا - يفرض هذا الخيار الموافقة على التعليقات من قبل المستخدم ذي <a href="https://wordpress.org/support/article/roles-and-capabilities/" rel="external nofollow">الرتبة</a> المناسبة حتى في حال تبين أن التعليقات هي تعليقات مزعجة. ألق نظرة على خيارات إدارة التعليقات في الأسفل المتعلقة بالتعليقات المزعجة.
	</li>
	<li>
		صاحب التعليق يجب أن يملك تعليقات سابقة - يضمن تفعيل هذا الخيار أن التعليقات المنشورة هي فقط من قبل زوار يمتلكون بريد إلكتروني تم الموافقة له سابقًا على تعليق وإلا سوف يتم وضع التعليق قيد المراجعة. بالنسبة للتعليقات المكتوبة من قبل صاحب بريد إلكتروني محظور (عناوين البريد الإلكتروني الموجودة ضمن صندوق كلمات التعليقات المزعجة المحلي) سوف يتم وضعها ضمن المراجعة بغض النظر عن حالة قائمة المسموح لهم.
	</li>
</ul>
<h3>
	إدارة التعليقات
</h3>

<p>
	يمكن تحديد هذه الخيارات ضمن قسم <a href="https://codex.wordpress.org/Comment_Moderation" rel="external nofollow">إدارة التعليقات</a> للتعامل مع <a href="https://codex.wordpress.org/Comment_Spam" rel="external nofollow">التعليقات المزعجة</a>.
</p>

<ul>
<li>
		لا تنشر التعليقات التي تحتوي على x رابط أو أكثر. إذ تتميز التعليقات المزعجة Spam باحتوائها على الكثير من الروابط.
	</li>
	<li>
		كان أصحاب التعليقات المزعجة يُضمّنون 5 أو 10 روابط ضمن تعليقاتهم المزعجة منذ زمن ليس ببعيد وهذا سهّل على المدونيين التعرف على هذه التعليقات ولكن سرعان ما تنبه أصحاب التعليقات المزعجة لهذا الأمر واعتمدوا استخدام رابط أو اثنين ضمن تعليقاتهم. يُمكن تحديد عدد ضمن المربع لإعلام ووردبريس بعدد الروابط التي يُسمح للمُعلق تضمينها قبل تحويل تعليقه للمراجعة.
	</li>
	<li>
		عندما يحتوي التعليق على أي كلمة من الكلمات التالية في نص التعليق، اسم المعلّق، الرابط، عنوان البريد الإلكتروني أو في عنوان IP، أو سلسلة وكيل مستخدم المتصفح، سيتم حينها نقل التعليق إلى طابور المراجعة. أضف في كل سطر كلمة واحدة أو عنوان IP، وخذ بالحسبان أنه يتم البحث داخل الكلمات فإذا أضفت الكلمة "بريس" سيتم إرسال كل تعليق يحتوي على الكلمة "ووردبريس" إلى قائمة الانتظار.
	</li>
	<li>
		 يُمكن إضافة الكلمات المزعجة الخاصة بمالك الموقع ضمن هذا المربع ليتم ترشيح التعليقات التي يتم نشرها بالاعتماد على محتواه.
	</li>
</ul>
<h3>
	مفاتيح التعليقات غير المسموح بها
</h3>

<ul>
<li>
		عندما يحتوي التعليق على أي كلمة من الكلمات التالية في نص التعليق، اسم المعلّق، الرابط، عنوان البريد الإلكتروني أو في عنوان IP، أو سلسلة وكيل مستخدم المتصفح، سيتم حينها نقل التعليق إلى سلة المهملات. أضف في كل سطر كلمة واحدة أو عنوان IP.
	</li>
	<li>
		خذ بالحسبان أنه يتم البحث داخل الكلمات فإذا أضفت الكلمة "بريس" سيتم إرسال كل تعليق يحتوي على الكلمة "ووردبريس" إلى سلة المهملات. يُشابه عمل هذا المربع المربع السابق ولكن بدلا من تحويل التعليقات إلى المراجعة يتم تحويل التعليقات إلى سلة المهملات بدون أي تنبيه.
	</li>
	<li>
		يُنصح باستخدام هذا الخيار كملاذ أخير فمن الممكن أن تُحذف تعليقات غير مزعجة.
	</li>
</ul>
<h3>
	الصور الرمزية
</h3>

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

<h4>
	عرض الصورة الرمزية
</h4>

<ul>
<li>
		<strong>السماح بعرض الصور الرمزية</strong> - تظهر الصور الرمزية بجانب التعليقات عند تفعيل هذا الخيار.
	</li>
</ul>
<h4>
	نوع الصور الرمزية المسموح عرضها
</h4>

<p>
	يسمح هذا الخيار بتحديد مستوى الصور التي يُسمح بعرضها على المدونة.
</p>

<ul>
<li>
		G — ملائمة للجميع.
	</li>
	<li>
		PG — ممكن أن تكون مسيئة، عادة لمن أعمارهم 13 سنة أو أكثر.
	</li>
	<li>
		R — موجهة للمراهقين الذين تزيد أعمارهم عن 17 سنة.
	</li>
	<li>
		X — للبالغين فقط.
	</li>
</ul>
<h4>
	الصورة الرمزية الافتراضية
</h4>

<p>
	يُمكن عرض الشعار أو توليد صورة بالاعتماد على عنوان بريدهم الإلكتروني للمستخدم الذي لا يمتلك صورة رمزية خاصة به.
</p>

<ul>
<li>
		شخصية غامضة
	</li>
	<li>
		فارغ
	</li>
	<li>
		شعار موقع Gravatar
	</li>
	<li>
		أيقونة (عشوائي)
	</li>
	<li>
		وجوه (عشوائي)
	</li>
	<li>
		وحوش (عشوائي)
	</li>
	<li>
		ريترو (عشوائي)
	</li>
</ul>
<h2>
	حفظ التغييرات
</h2>

<p>
	لحفظ التغييرات يجب الضغط على خيار <strong>حفظ التغييرات</strong> حيث يظهر بعدها في أعلى الصفحة نص يؤكد عملية الحفظ مباشرة بعد الضغط عليه.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://wordpress.org/support/article/settings-discussion-screen/" rel="external nofollow">Settings Discussion Screen</a> من موقع <a href="https://wordpress.org/" rel="external nofollow">ووردبريس</a>.
</p>
]]></description><guid isPermaLink="false">1220</guid><pubDate>Sat, 24 Apr 2021 08:36:49 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x627;&#x631;&#x636; &#x625;&#x636;&#x627;&#x641;&#x627;&#x62A; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633;: &#x643;&#x64A;&#x641; &#x62A;&#x643;&#x62A;&#x634;&#x641;&#x647;&#x627; &#x648;&#x645;&#x627;&#x630;&#x627; &#x62A;&#x641;&#x639;&#x644; &#x62D;&#x64A;&#x627;&#x644;&#x647;&#x627;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B9%D8%A7%D8%B1%D8%B6-%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%83%D9%8A%D9%81-%D8%AA%D9%83%D8%AA%D8%B4%D9%81%D9%87%D8%A7-%D9%88%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D9%81%D8%B9%D9%84-%D8%AD%D9%8A%D8%A7%D9%84%D9%87%D8%A7-r727/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d4a8c998bef4_.jpg.ab8e2558adbe0d59f36f9e77447e43b0.jpg" /></p>

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

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

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

<ul>
<li>
		تعارض بين إضافتين
	</li>
	<li>
		تعارض بين القالب الخاص بك وبين إضافة جديدة أو إضافة محدثّة
	</li>
	<li>
		تعارض بين إضافة ونسخة إصدار ووردبريس الحالية للموقع
	</li>
</ul>
<p>
	تظهر أعراض تعارض الإضافات عادةً في إحدى صورتين: إما أن يبدأ موقعك في التصرف بغرابة، تحديدًا حين تتوقف الإضافة عن العمل بالطريقة التي يجب أن تعمل بها – أو حين تطل "شاشة الموت البيضاء" برأسها البغيض بعد آخر تحديثٍ أو أحدث تثبيتٍ لإضافةٍ جديدةٍ.
</p>

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

<h2 id="-">
	كيف تشخص مشكلة تعارض إضافات ووردبريس وتحلَّها
</h2>

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

<figure style="text-align: center;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="31097" data-unique="0l9lzhnye" src="https://academy.hsoub.com/uploads/monthly_2019_08/Plugin-Conflicts-Plugin-Specs-Example.png.d2664ba7eaa8a4440a22fcc28c620cc4.png" alt="Plugin-Conflicts-Plugin-Specs-Example.png"><figcaption>
		انتبه جيدًا للتفاصيل المهمة عند مراجعة إضافة جديدة أو قالب جديد في ووردبريس
	</figcaption></figure><p>
	في المثال السابق، يمكنك أن ترى أن كل صفحة إضافة تعطي المستخدم فرصةً كافيةً للتأكد من أن المطور يتابع تحديث الإضافة مع تحديثات ووردبريس. كما يتمكن المستخدم أيضًا أن يرى ما يقوله الآخرون عن الإضافة في قسم "التقييمات والمراجعات"، بالإضافة إلى التعرف على نوعية المشكلات التي واجهتهم في قسم "الدعم".
</p>

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

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

<h3 id="-">
	السيناريو الأول: الموقع يعمل لكن الإضافة لا تعمل
</h3>

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

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

<h3 id="-">
	السيناريو الثاني: بعد تحديث إضافةٍ أو تثبيت إضافةٍ جديدةٍ حدثت مشكلة ما
</h3>

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

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

<h3 id="-">
	السيناريو الثالث: بعد التحديثات التلقائية أو الدفعية حدثت الكارثة
</h3>

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

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

<h4 id="-">
	حين يصيب القالب أو الإضافة عطلٌ ما، أو تظهر رسالة خطأ
</h4>

<p>
	موقعك لا يزال يعمل، (الحمد لله)، وتستطيع الدخول إلى ووردبريس. هذا جيدٌ. إليك ما عليك فعله إذا ما أصاب موقعك عطلٌ كهذا:
</p>

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

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

<figure style="text-align: center;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="31095" data-unique="onch2keo7" src="https://academy.hsoub.com/uploads/monthly_2019_08/Plugin-Conflicts-Deactivate-All-Plugins.png.555366eaf81707f9cbf072cd07a26c28.png" alt="Plugin-Conflicts-Deactivate-All-Plugins.png"><figcaption>
		تحت قائمة "إضافات"، قم بتعطيل الإضافات كلها عن طريق خيار "التعطيل" الجماعي
	</figcaption></figure><p>
	3- تفقد موقعك لترى ما إذا كانت المشكلة قد حُلَّت. في تلك الحالة، اعلم أن المشكلة في الإضافة.
</p>

<p>
	4- انتقل من القالب الحالي إلى قالب ووردبريس المبدئي.
</p>

<figure style="text-align: center;"><img class="ipsImage ipsImage_thumbnailed" data-fileid="31096" data-unique="63quhj520" src="https://academy.hsoub.com/uploads/monthly_2019_08/Plugin-Conflicts-Default-WordPress-Theme.png.5833be3525db78881610fa511648afde.png" alt="Plugin-Conflicts-Default-WordPress-Theme.png"><figcaption>
		لستَ مضطرًا للبحث عن قالب ووردبريس المبدئي. اذهب إلى قائمة القوالب (Themes)&gt; أضف قالب جديد (Add New)– ستجده على رأس القائمة
	</figcaption></figure><p>
	أحيانًا يحدث عطل في تحديث القالب إذا ما أضاف المطور وظيفة جديدة تتطابق مع وظيفة في إضافة أنت تستخدمها بالفعل. لذلك، من المهم أن تتأكد من ذلك. تفقّد موقعك مرة أخرى للتأكد من انتهاء المشكلة. إذا وجدت المشكلة مستمرة، اعلم أن هناك عطب ما في القالب، وعليك التواصل مع المطور بشأنه وإيجاد بديل عن ذلك القالب حتى تجد حلًّا للمشكلة.
</p>

<p>
	5- إذا حُلَّت المشكلة عن طريق تبديل القالب، عليك اختبار كل إضافة على حدة.
</p>

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

<p>
	7- فعّل الإضافة التي تظن أنها تُسبّ المشكلة. إذا ظهرت رسالة خطا، فهذا يؤكد أنها بالفعل سبب المشكلة. إذا لم يحدث ذلك، جرب إضافة أخرى.
</p>

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

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

<figure style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2019_08/Plugin-Conflicts-Submit-Support-Ticket.png.776d6abf10656610d9ac7a46ac2ecebe.png" data-fileid="31098" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="31098" data-unique="jbecqht6c" src="https://academy.hsoub.com/uploads/monthly_2019_08/Plugin-Conflicts-Submit-Support-Ticket.thumb.png.e61b69bca478f8d8439868bf618c1f7b.png" alt="Plugin-Conflicts-Submit-Support-Ticket.png"></a>

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

<h4 id="-">
	حين ترى شاشة الموت البيضاء
</h4>

<p>
	شاشة الموت البيضاء مخيفة لكل مستخدمي ووردبريس. رغم ذلك، إذا كان سببها تحديث دُفَعِي (batch update) قمت به مؤخرًا، سيكون الحل سهلًا:
</p>

<ol>
<li>
		<p>
			إذا رأيت شاشة الموت البيضاء، لن تكون قادرًا على الوصول إلى ووردبريس، مما يعني أنك لن تستطيع الدخول إلى الإضافات. في تلك الحالة، اذهب لوحة التحكم واستخدم بروتوكول نقل الملفات <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%90%D9%85-sftp-%D9%84%D9%86%D9%82%D9%84-%D8%A7%D9%84%D9%85%D9%84%D9%81%D9%91%D8%A7%D8%AA-%D8%A8%D8%A3%D9%85%D8%A7%D9%86-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A8%D8%B9%D9%8A%D8%AF-r30/" rel="">SFTP</a> للوصول إلى ملفات موقعك.
		</p>
	</li>
	<li>
		<p>
			عطل كل الإضافات. يمكنك فعل ذلك عن طريق تغيير اسم مجلد الإضافات إلى اسم آخر.
		</p>
	</li>
	<li>
		<p>
			إذا كنت تفضل حذف جميع الملفات (مما سيعطّلها أيضًا)، احتفظ بنسخة احتياطية منهم في مكان آخر أولًا. فور حذفها من المجلد، تستطيع إعادة رفع الإضافات المخزنّة إلى نفس المجلد. لن يعيد ذلك تفعيلها، لكن سيضعها فقط على الخادم الخاص بك.
		</p>
	</li>
	<li>
		<p>
			بتعطيل الإضافات، من المفترض أن تكون قادرًا على الدخول إلى ووردبريس مرة أخرى واتباع التعليمات المذكورة أعلاه، كما لو كان لديك صلاحية الوصول منذ البداية. إذا كنت لا تزال ترى شاشة الموت البيضاء بعد إفراغ الذاكرة المؤقتة، فالقالب هو سبب المشكلة.
		</p>
	</li>
	<li>
		<p>
			لتعطيل القالب، افعل نفس ما فعلته مع الإضافات: غير اسم مجلد القوالب أو احذف ملف القالب وأعد رفعه إلى المجلد. هكذا، ستستطيع العودة إلى ووردبريس وتبديل القالب.
		</p>
	</li>
</ol>
<h2 id="-">
	كيف تتجنب تعارضات الإضافات في المستقبل
</h2>

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

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

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

<ul>
<li>
		يجب ألا تثبت إضافات ووردبريس دون دراسة وافية. كلما قل عدد الإضافات التي تستخدمها، قل احتمال حدوث المشكلات. اختر إضافاتك بعناية.
	</li>
	<li>
		اقرأ مراجعات الإضافات وتذاكر الدعم وآراء من استخدمها بعناية قبل تثبيت الإضافة الجديدة وتفعيلها. إذا لم يكن لديك الكثير من الوقت، استفد من ترشيحات طرف ثالث موثوق، أو مدوّنة، لكي تختار اختيارًا صحيحًا.
	</li>
	<li>
		حدّث الإضافات أولًا بأول.
	</li>
	<li>
		حدّث الإضافات واحدةً تلو الأخرى، حتى تسهّل على نفسك تحديد سبب المشكلة. (حتى وإن لم تكن تلك الطريقة على الأكثر كفاءة في تحديث الإضافات)
	</li>
	<li>
		إذا كنت تستخدم أداة تحديث أوتوماتيكية، تأكد من أنها تحتفظ بنسخة احتياطية وتستخدم تكنولوجيا ترقية آمنة مثل Automate.
	</li>
	<li>
		تفقّد مجموعة إضافاتك كل عدة أشهر. إذا وجدت أن أيًا منها خسر دعم وتحديثات المطور لأكثر من ستة أشهر، ابحث عن واحدة جديدة.
	</li>
	<li>
		احتفظ بنسخة احتياطية من كل شيء قبل أن تجري أي تحديثات أو تثبّت أي إضافاتٍ جديدةٍ
	</li>
	<li>
		استخدم بيئة اختبار محلية لاستنساخ موقعك الحي هكذا تستطيع اختبار الإضافات الجديدة والتحديثات لاكتشاف أي تعارضات قبل وضعها على موقعك
	</li>
</ul>
<p>
	راجع إرشادات معايير الترميز الخاصة بـ<a href="https://codex.wordpress.org/WordPress_Coding_Standards" rel="external nofollow">كوديكس ووردبريس</a>. حتى إذا كنت لا تطور إضافات أو قوالب لمواقعك، لا يزال من المفيد معرفة ما الذي يجعل ممارسات الترميز جيدة إذا كنت تريد فحص الإضافات قبل استخدامها.
</p>

<ul>
<li>
		استثمر بعض الوقت في التعرف على <a href="https://codex.wordpress.org/Plugin_API" rel="external nofollow">الخطافات</a>. غالبًا ما تحدث تعارضات الإضافات والقوالب عندما لا يعطي المطوّرون الخطافات التي يطورونها اسماءً فريدة. باستخدام الإعداد الافتراضي، ينشأ خطر استخدام خطاف تستخدمه إضافة أخرى أو قالب آخر، الأمر الذي يؤدي بدوره إلى إرباك الخادم وإنشاء خطأ التعارض.
	</li>
	<li>
		ارفع مهاراتك في <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/PHP" rel="external">PHP</a> و <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>. إذا شعرت بالإحباط من عدد الإضافات المتعارضة، يمكنك برمجة هذه الوظيفة في موقعك وتجنب هذه المشكلة في المستقبل.
	</li>
</ul>
<h2 id="-">
	الختام
</h2>

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

<p>
	مترجم وبتصرف عن مقال <a href="https://premium.wpmudev.org/blog/wordpress-plugin-conflicts-how-to-check-for-them-and-what-to-do/" rel="external nofollow">WordPress Plugin Conflicts: How to Check for Them and What to Do</a> بقلم Suzanne Scacca
</p>
]]></description><guid isPermaLink="false">727</guid><pubDate>Wed, 07 Aug 2019 08:43:18 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62F;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x634;&#x627;&#x645;&#x644; &#x641;&#x64A; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x633;&#x62A;&#x639;&#x644;&#x627;&#x645;&#x627;&#x62A; WP_Query</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%81%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-wp_query-r655/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_01/wp-query.png.de829a1594ddd7a4627b7523d8e58080.png" /></p>

<p>
	إن الحصول على المواضيع من قاعدة بيانات الوورد بريس هي إحدى المواضيع المفضلة لدي، وذلك بسبب المرونة الرائعة التي يتيحها صنف WP_Query التي تسمح لنا بالحصول على مانريده، وتُعتبر هذه الطريقة هي إحدى الميزات الأساسية في أنظمة إدارة المحتوى CMS التي نراها عند العمل في الواجهات الأمامية front-end.
</p>

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

<h2>
	ماهو استعلام الوورد بريس؟
</h2>

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

<p>
	كما ننوّه إلى أن ذكرنا لكلمة استعلام query، أو استعلام وورد بريس wordpress query نقصد بها الاستعلام الذي يقوم باسترجاع بعض المواضيع posts من قاعدة البيانات الخاصة بالوورد بريس.
</p>

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

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

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

<h2>
	الحلقة: كيفية استخدام الاستعلامات
</h2>

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

<p>
	يمكن شرح هذه الآلية من خلال الأسطر البرمجية:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">if</span><span class="pln"> </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"> </span><span class="pun">:</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
	</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">while</span><span class="pln"> </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"> </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">
	&lt;div </span><span class="pun">&lt;?</span><span class="pln">php post_class</span><span class="pun">()</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">&gt;
		</span><span class="tag">&lt;h2&gt;</span><span class="pun">&lt;?</span><span class="pln">php the_title</span><span class="pun">()</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
		</span><span class="pun">&lt;?</span><span class="pln">php the_content</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="pun">&lt;?</span><span class="pln">php endwhile </span><span class="pun">?&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">else</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;h2&gt;</span><span class="pln">Ooops, no posts here!</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php endif </span><span class="pun">?&gt;</span></pre>

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

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

<p>
	أما تابع ()the_post فإنه هو المسؤول عن معالجة حالة "هل يوجد مواضيع أخرى بعد الموضوع الحال أم لا".
</p>

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

<p>
	الآن قبل المتابعة في هذه المقالة، أود توضيح بعض المصطلحات التي مرت معنا، أولا مصطلح الحلقة "the loop" والذي يستخدم لوصف حلقة تمر على قائمة مو المواضيع الموجودة في الصفحة والمنشورة على الوورد بريس، لنستعرض مثالًا توضيحيًا، في حال كان لدينا قسم في المدونة نستعرض فيه المواضيع المتعلقة بمدونتنا والتي نستعرضها في قسم "Related articles on our blog"
</p>

<p>
	<img alt="001.JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="28778" data-unique="8cb24kwxz" src="https://academy.hsoub.com/uploads/monthly_2019_01/001.JPG.7fde53442cfe626808cc0ebcec5dcce8.JPG"></p>

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

<h2>
	بناء استعلام مخصص
</h2>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'author_name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'danielpataki'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'category_name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'wordpress'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">
$author_posts </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> WP_Query</span><span class="pun">(</span><span class="pln"> $args </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"> $author_posts</span><span class="pun">-&gt;</span><span class="pln">have_posts</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="pun">&lt;?</span><span class="pln">php </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> $author_posts</span><span class="pun">-&gt;</span><span class="pln">have_posts</span><span class="pun">()</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> $author_posts</span><span class="pun">-&gt;</span><span class="pln">the_post</span><span class="pun">()</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
	&lt;div </span><span class="pun">&lt;?</span><span class="pln">php post_class</span><span class="pun">()</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">&gt;
		</span><span class="tag">&lt;h2&gt;</span><span class="pun">&lt;?</span><span class="pln">php the_title</span><span class="pun">()</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
		</span><span class="pun">&lt;?</span><span class="pln">php the_content</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="pun">&lt;?</span><span class="pln">php endwhile </span><span class="pun">?&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">else</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;h2&gt;</span><span class="pln">Ooops, no posts here!</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php endif </span><span class="pun">?&gt;</span></pre>

<p>
	يتعامل القسم الأول من التعليمات مع الاستعلام في قاعدة البيانات حيث ترى أنني قمت ببناء غرض WP_Query من خلال تمرير مجموعة من المعاملات arguments، ولكن لاتقلق في حال لست من المهتمين بالبرمجة غرضية التوجه لأننا سنستخدمها بطريقة بسيطة جدًا، حيث مررنا اسم المؤلف من خلال المعامل author_name والفئة المختارة من خلال المعامل category_name.
</p>

<p>
	الآن لترتيب هذه المواضيع ضمن قائمة واحدة نحتاج إلى تعديل الحلقة قليلًا وذلك من خلال استخدام التوابع الخاصة بالغرض WP_Query بدلًا من استخدام التوابع ()have_post و ()the_post وذلك يعني أن نسبق اسم التابع باسم المتغير بالشكل ()variable_name-&gt;function$.
</p>

<p>
	مع العلم أنني لن أعرض الحلقة في الأمثلة التالية وذلك لأن الفكرة نفسها ستتكرر دومًا، والآن اسم متغيرنا هو $custom_post  لذلك سنستخدم التوابع ()custom_posts-&gt;have_post$ و ()custom_posts-&gt;the_post$.
</p>

<h2>
	معاملات WP_Query
</h2>

<p>
	إن بناء استعلام مخصص يعتمد بالأساس على تغيير المعاملات parameters، ومن الأمثلة على الاستعلامات المخصصة استعلام الحصول على المواضيع من تاريخ محدد، المؤلفين، نمط نشر معين، تصنيفات مخصصة، وحالات وأمور أخرى.
</p>

<p>
	الآن لنلق نظرة على جميع المعاملات من خلال بعض الأمثلة الأساسية البسيطة.
</p>

<h3>
	معامل المؤلف Author Parameters
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Posts from the author with the ID of 42</span><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">'author'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">42</span><span class="pln"> 
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// All posts except the ones from author 42</span><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">'author'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">-</span><span class="lit">42</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from author 42, 38 and 55</span><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">'author'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'42,38,55'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from everyone except author 42 and 38</span><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">'author'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'-42,-38'</span><span class="pln">
</span><span class="pun">);</span></pre>

<p>
	يمكن استخدام المعامل author_name في حال كنا نريد تمرير اسم المؤلف بدلًا من رقمه التعريفي، ولكن من المهم الانتباه إلى استخدام اسم المستخدم username الصحيح.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'author_name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'danielpataki'</span><span class="pln">
</span><span class="pun">);</span></pre>

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

<pre class="ipsCode">
// Posts from author 42, 38 and 55
$args = array(
	'author__in' =&gt; array( 42, 38, 55 ) 
);

// Posts from everyone except author 42 and 38
$args = array(
	'author__not_in' =&gt; array( 42, 38 ) 
);</pre>

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

<h4>
	حالة استخدام: إعداد قائمة بمقالات المؤلفين الأعلى تصنيفًا
</h4>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'meta_key'</span><span class="pln">     </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'rating'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'meta_value'</span><span class="pln">   </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">4</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'meta_compare'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'&gt;'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'fields'</span><span class="pln">       </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'id'</span><span class="pun">,</span><span class="pln">
</span><span class="pun">);</span><span class="pln"> 
$top_users </span><span class="pun">=</span><span class="pln"> get_users</span><span class="pun">(</span><span class="pln"> $args </span><span class="pun">);</span><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">'author__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $top_users</span><span class="pun">;</span><span class="pln">
</span><span class="pun">);</span><span class="pln"> 
$top_author_posts </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> WP_Query</span><span class="pun">(</span><span class="pln"> $args </span><span class="pun">);</span><span class="pln">
 
</span><span class="pun">?&gt;</span></pre>

<h3>
	معامل الفئة Category Parameters
</h3>

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

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Posts from the category with the ID of 42</span><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">'cat'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">42</span><span class="pln"> 
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// All posts except the ones from category 42</span><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">'cat'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">-</span><span class="lit">42</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from categories 42, 38 and 55</span><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">'cat'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'42,38,55'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from all categories except 42 and 38</span><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">'cat'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'-42,-38'</span><span class="pln">
</span><span class="pun">);</span></pre>

<p>
	من الأفضل عدم استخدام category_name وذلك لأن اسم الفئة غالبًا يستخدم في توليد رابط URL الخاص بالمقالة، من خلال استخدام اسم الفئة وعنوان المقالة مع بعض التعديلات الخاصة مثل تحويل جميع الأحرف إلى أحرف صغيرة، وحذف جميع الكلمات الخاصة، واستبدال الفراغات بـ (-)، فمثلًا الفئة المخصصة لمراجعات الكتب والمسماة "Book Reviews" غالبًا ستجد قسم من رابط المقالة يحوي على "book-reviews".
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'category_name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'book-reviews'</span><span class="pln">
</span><span class="pun">);</span></pre>

<p>
	كما يمكننا استخدام مصفوفة من الفئات تحوي ثلاثة معاملات هي category_in، و category_not_in والتي تماثل في طريقة عملها مماثلاتها في معامل author، حيث يمكن من خلالها التأكد من أن المواضيع التي تم تحديدها من خلال الفئات المدخلة فقط هي التي استُرجِعت بواسطة الاستعلام.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'s'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'awesome+wordpress+plugins'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'posts_per_page'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">8</span><span class="pln">
</span><span class="pun">);</span><span class="pln">
$results </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> WP_Query</span><span class="pun">(</span><span class="pln"> $args </span><span class="pun">);</span><span class="pln">

echo </span><span class="str">"A total of "</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $results</span><span class="pun">-&gt;</span><span class="pln">found_posts </span><span class="pun">.</span><span class="pln"> </span><span class="str">" posts were found.&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
echo </span><span class="str">"We will be displaying "</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $results</span><span class="pun">-&gt;</span><span class="pln">query_vars</span><span class="pun">[</span><span class="str">'posts_per_page'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">" posts per page if possible.&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
echo </span><span class="str">"We need a total of "</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $results</span><span class="pun">-&gt;</span><span class="pln">max_num_pages </span><span class="pun">.</span><span class="pln"> </span><span class="str">" pages to display the results"</span><span class="pun">.</span></pre>

<h4>
	حالة استخدام: الحصول على مقالات الفئات الأكثر استخدمًا
</h4>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'number'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'orderby'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'count'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'order'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'DESC'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'fields'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'ids'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">
$top_categories </span><span class="pun">=</span><span class="pln"> get_terms</span><span class="pun">(</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'category'</span><span class="pln"> </span><span class="pun">),</span><span class="pln"> $args </span><span class="pun">);</span><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">'category__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $top_categories</span><span class="pun">;</span><span class="pln">
</span><span class="pun">);</span><span class="pln"> 
$top_category_posts </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> WP_Query</span><span class="pun">(</span><span class="pln"> $args </span><span class="pun">);</span></pre>

<h3>
	معامل الوسم Tag Parameters
</h3>

<p>
	يمرر لمعامل الوسم خمس متغيرات هي tag، tag_id، tag_and، tag_in، tag_not_in نلاحظ وجود ثلاث منها ذُكرت مع المعاملات السابقة، وسنشرحها من خلال المثال:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Posts from the tag named "Awesome Colors"</span><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">'tag'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'awesome-colors'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from the tag named "Awesome Colors" or "Awesome People"</span><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">'tag'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'awesome-colors,awesome-people'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from the contain both "Awesome Colors" and "Awesome People"</span><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">'tag'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'awesome-colors+awesome-people'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from the tag with the ID of 23</span><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">'tag_id'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">23</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from tag 42, 38 and 55</span><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">'tag__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">42</span><span class="pun">,</span><span class="pln"> </span><span class="lit">38</span><span class="pun">,</span><span class="pln"> </span><span class="lit">55</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from all tags except 42 and 38</span><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">'tag__not_in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">42</span><span class="pun">,</span><span class="pln"> </span><span class="lit">38</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts that are assigned both tag 42 and 38</span><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">'tag__and'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">42</span><span class="pun">,</span><span class="pln"> </span><span class="lit">38</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">);</span></pre>

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

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

<p>
	ولتسهيل الأمور أكثر في التعامل مع الوسوم يوجد أيضًا معاملين آخرين هما tag_slug_and و tag_slug_in ويكون التعامل معها بالشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Posts from the tag named "Awesome Colors" or "Awesome People"</span><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">'tag_slug__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'awesome-colors'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'awesome-people'</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Posts from the contain both "Awesome Colors" and "Awesome People"</span><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">'tag_slug__and'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'awesome-colors'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'awesome-people'</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span></pre>

<h4>
	حالة استخدام: الدمج بين معاملات الوسم، الفئة، المؤلف
</h4>

<p>
	بما أننا تعرفنا على بعض المعاملات يمكننا الدمج فيما بينها ضمن استعلام واحد، على سبيل المثال لنجمع المقالات المتميزة (التي أُضيف لها وسم "featured") لمؤلفين محددين وذلك في فئتي الكتب والأفلام.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'tag'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'featured'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'category__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">43</span><span class="pun">,</span><span class="pln"> </span><span class="lit">52</span><span class="pln"> </span><span class="pun">),</span><span class="pln">
	</span><span class="str">'author__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">930</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span><span class="pln">
$author_featured_posts </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> WP_Query</span><span class="pun">(</span><span class="pln"> $args </span><span class="pun">);</span></pre>

<h3>
	أنواع المواضيع Post Type
</h3>

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

<p>
	يسمى المعامل المخصص للتعامل مع أنواع المواضيع الجديدة post_type والذي يساعدنا في تحديد النوع الذي ينتمي له الموضوع المُراد نشره.
</p>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Return posts with the 'page' post type</span><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">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'page'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Return posts from two custom post types</span><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">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'product'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'post'</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Returns posts from all post types</span><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">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'any'</span><span class="pln">
</span><span class="pun">);</span></pre>

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

<p>
	في حال استخدام المعامل tax_query (سنتكلم عنه لاحقًا) ستصبح القيمة الافتراضية هي any.
</p>

<h3>
	حالة المنشور Post Status
</h3>

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

<p>
	تحوي الوورد بريس على ثماني حالات مبنية في النواة هي:
</p>

<ul>
<li>
		publish الموضوع Post أو الصفحة page منشورة
	</li>
	<li>
		pending الموضوع قيد الانتظار للمراجعة
	</li>
	<li>
		draft الموضوع حُفظ كمسودة
	</li>
	<li>
		auto-draft الموضوع المُنشأ حديثًا ولكن بدون محتوى
	</li>
	<li>
		future موضوع سينشر في المستقبل
	</li>
	<li>
		private ليس معروضًا أمام المستخدمين غير المسجلين الدخول
	</li>
	<li>
		inherit مراجعة (له علاقة بـ get_children)
	</li>
	<li>
		trash الموضوع في سلة المهملات (هذه الحالة متاحة في النسخة رقم 2.9)
	</li>
</ul>
<p>
	يمكننا أيضًا استخدام القيمة any لنقول بأننا نريد تضمين جميع حالات الموضوع، أما القيمة الافتراضية فهي Publish لذلك من الأفضل أن تتأكد بأنك حددت الحالة في حال كنت ترغب بحالة مختلفة.
</p>

<h4>
	حالة استخدام: الإعلان عن المنتجات القادمة
</h4>

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

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'post_status'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'future'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'product'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'category_name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'books'</span><span class="pln">
</span><span class="pun">);</span></pre>

<h3>
	معامل البحث The Search Parameter
</h3>

<p>
	يسمى المعامل الخاص بعملية البحث s، ويأخذ قيمة نصية string هي نفسها المُستخدمة في عملية البحث داخل الموضوع. ولكن يجب تأكد من ترميز العبارة النصية المُستخدمة في البحث، حيث يمكنك القيام بذلك من خلال استخدام التابع urlencode الموجود في PHP والذي يساعدك في تحديد عدد الفراغات والمحارف الخاصة الأخرى وتحويل العبارة إلى كلمات يمكن البحث عنها.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'s'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'awesome+wordpress+plugins'</span><span class="pln">
</span><span class="pun">);</span></pre>

<h4>
	حالة استخدام: البحث في موضوع فرعي
</h4>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Show posts about ACF (Advanced Custom Fields) from the news category</span><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">'s'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'ACF'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'category_name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'news'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Search an author's posts</span><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">'s'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'custom post types'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'author_name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'danielpataki'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Search an array of custom post types</span><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">'s'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'wordpress'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'project'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'portfolio'</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span>
</pre>

<h3>
	المواضيع المحمية بكلمة مرور
</h3>

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

<p>
	في جميع الحالات التي تجعلك ترغب بإضافة كلمة مرور للموضوع الخاص بك، يمكنك استخدام المعامل has_password لتحديد فيما إذا كنت ترغب بإدراج الموضوع إلى قائمة المواضيع المحمية بكلمة المرور.
</p>

<p>
	يمكن أن يُمرَّر للمعامل has_password قيمة true عندها سيقوم الاستعلام بجمع المواضيع التي تم إعطاؤها كلمة مرور، أو قيمة false وبذلك يختار الاستعلام المواضيع التي لم تُزود بكلمة مرور، ولكن في حال كانت قيمة المعامل محذوفة أو تم إسناد null لها عندها ستُنشر جميع المواضيع.
</p>

<p>
	كما يمكن استخدام المعامل post_password من أجل إعداد قائمة بالمواضيع المحمية بكلمة مرور محددة.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Return only password protected posts</span><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">'has_password'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">true</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Return posts protected with the password: qweasd</span><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">'post_password'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'qweasd'</span><span class="pln">
</span><span class="pun">);</span></pre>

<h4>
	حالة استخدام: لعبة صيد الكنز أونلاين
</h4>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'post_type'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'clue'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'post_password'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'treasurehunt2015'</span><span class="pln">
</span><span class="pun">);</span></pre>

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

<h3>
	تضمين، استبعاد، واستهداف مواضيع محددة
</h3>

<p>
	يوجد تسعة معاملات مختلفة تُستخدم للحصول على مواضيع معينة في الاستعلام:
</p>

<ul>
<li>
		المعامل p: يُستخدم في تجميع المواضيع بالاعتماد على معرف الموضوع ID.
	</li>
	<li>
		المعامل name: يُستخدم في تجميع تجميع المواضيع من خلال تمرير slug كقيمة نصية له.
	</li>
	<li>
		المعاملين page_id و page_name: الأول يشبه معامل p والثاني يشبه name ولكنها تعمل بالنسبة للصفحات، مع بعض الاختلاف بينهما.
	</li>
	<li>
		حيث سيعملان بشكل متشابه تمامًا في حال تم تحديد قيمة للمعامل post_type أما في حال عدم تحديد هذه القيمة فإن معامل page_id سيعمل كما هو مُتوقع منه على عكس معامل p
	</li>
	<li>
		المعاملين post_in و post_not_in: تعمل بنفس الطريقة التي تعمل بها شبيهاتها مع الفئات والوسوم حيث تقبل تمرير مصفوفة من مُعرِّفات المواضيع.
	</li>
	<li>
		المعامل post_parent: يأخد معِّرف وحيد عندها يقوم الاستعلام بإعداد قائمة بالمواضيع التي تكون أبناء تابعة للموضوع المُحدد بالمعرف المذكور.
	</li>
	<li>
		المعاملين post_parent_int و post_parent_not_int: كما في شبيهاتها يُمرَّر لها مصفوفة من معرِّفات المواضيع.
	</li>
</ul>
<p>
	من المهم الأخذ بالحسبان نوع المنشور post_type عند التعامل مع هذه المعامل، ففي حال قمت بتضمين المُعرِّفات لمجموعة من أنواع المواضيع عندها ستحتاج لتمرير القيمة any للمعامل post_type، أو تدخل النوع المحدد الذي تبحث عنه.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Grab post 532 only</span><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">'p'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">532</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Grab the post with the given slug</span><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"> </span><span class="str">'guide-to-wp-query'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Retrieve page 55</span><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">'page_id'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">55</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Retrieve the about page</span><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">'pagename'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'about'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Get the specified 5 posts</span><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">'post__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">31</span><span class="pun">,</span><span class="pln"> </span><span class="lit">36</span><span class="pun">,</span><span class="pln"> </span><span class="lit">39</span><span class="pun">,</span><span class="pln"> </span><span class="lit">91</span><span class="pun">,</span><span class="pln"> </span><span class="lit">119</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Get all posts except the specified 5 </span><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">'post__not_in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">31</span><span class="pun">,</span><span class="pln"> </span><span class="lit">36</span><span class="pun">,</span><span class="pln"> </span><span class="lit">39</span><span class="pun">,</span><span class="pln"> </span><span class="lit">91</span><span class="pun">,</span><span class="pln"> </span><span class="lit">119</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Get all child posts of post 6</span><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">'post_parent'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">6</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Get posts which are the children of the listed posts</span><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">'post_parent__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">23</span><span class="pun">,</span><span class="pln"> </span><span class="lit">55</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Get posts which do not have the listed parents</span><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">'post_parent__not_in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">23</span><span class="pun">,</span><span class="pln"> </span><span class="lit">55</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span></pre>

<h3>
	حالة استخدام:  الوصول إلى جميع المرفقات في الموضوع
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="kwd">global</span><span class="pln"> $post</span><span class="pun">;</span><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">'post_parent'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $post</span><span class="pun">-&gt;</span><span class="pln">ID</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'attachment'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'post_status'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'any'</span><span class="pln">
</span><span class="pun">);</span></pre>

<h2>
	استعلامات التصنيف
</h2>

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

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

<p>
	سنأخذ نظرة عامة في المثال المقتبس من <a href="https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters" rel="external nofollow">WordPressCodex</a>:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'post'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'tax_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'taxonomy'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'movie_genre'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'field'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'slug'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'terms'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'action'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'comedy'</span><span class="pln"> </span><span class="pun">),</span><span class="pln">
		</span><span class="pun">),</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'taxonomy'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'actor'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'field'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'id'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'terms'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">103</span><span class="pun">,</span><span class="pln"> </span><span class="lit">115</span><span class="pun">,</span><span class="pln"> </span><span class="lit">206</span><span class="pln"> </span><span class="pun">),</span><span class="pln">
			</span><span class="str">'operator'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'NOT IN'</span><span class="pun">,</span><span class="pln">
		</span><span class="pun">),</span><span class="pln">
		</span><span class="str">'relation'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'AND'</span><span class="pun">,</span><span class="pln">
	</span><span class="pun">),</span><span class="pln">
</span><span class="pun">);</span></pre>

<p>
	يحوي استعلام التصنيف على شرطين condition وعلاقة relation، وهذه العلاقة هي التي تحدد إما أنه يجب أن يتحقق شرط واحد على الأقل (OR) أو يجب تحقيق كلا الشرطين (AND)، أما بالنسبة للشرطين نفسهما فإنهما عبارة عن مصفوفات تحدد فيها قيود التصنيف.
</p>

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

<p>
	يحوي كل شرط في استعلام التصنيف على ثلاثة معاملات خاصة به هي:
</p>

<ul>
<li>
		taxonomy : يُحدَّد من خلاله المقطع slug الخاص بالتصنيف.
	</li>
	<li>
		field : يمكن من خلاله الاختيار فيه بين المعاملات الثلاثة وهي term_id، أو name أو slug.
	</li>
	<li>
		operator : يستخدم لتحديد كيفية التعامل مع المصطلحات المتواجدة في الشرط، حيث IN سيسمح لأي من المواضيع التي تنتمي لأي من الشروط المدرجة بالتواجد في القائمة النهائية، أما NOT IN سيسمح لأي من المواضيع التي لاتتضمن أيًا من الشروط المدرجة، أما AND فسيسمح للمواضيع التي تحقق جميع الشروط المدرجة.
	</li>
	<li>
		Include_children : يحدد فيما إذا كان بالإمكان السماح  أو عدم السماح بتضمين المواضيع التي تنتمي للتصنيف الابن في التصنيفات الهرمية
	</li>
</ul>
<h3>
	حالة استخدام: تصفية محتوى متقدمة
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'book'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'tax_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'taxonomy'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'mood'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'field'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'slug'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'terms'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'negative'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'bad'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'sad'</span><span class="pln"> </span><span class="pun">),</span><span class="pln">
			</span><span class="str">'operator'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'NOT IN'</span><span class="pln">
		</span><span class="pun">),</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'taxonomy'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'genre'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'field'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'slug'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'terms'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'comedy'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'romance'</span><span class="pln"> </span><span class="pun">),</span><span class="pln">
			</span><span class="str">'operator'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'NOT IN'</span><span class="pun">,</span><span class="pln">
		</span><span class="pun">),</span><span class="pln">
		</span><span class="str">'relation'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'AND'</span><span class="pun">,</span><span class="pln">
	</span><span class="pun">),</span><span class="pln">
</span><span class="pun">);</span></pre>

<p>
	في هذه الحالة بالتحديد يريد المستخدم النظر إلى جميع الكتب التي تحوي أفكار إيجابية(التي لاتحوي على وسوم سلبية تم إعطاؤها إياها) ولكن لايمكن أن تكون مُصنفة ككتب كوميدية أو رومانسية.
</p>

<h2>
	الاستعلامات من نمط Meta Query
</h2>

<p>
	تشبه بنية الاستعلام من نمط Meta query استعلام التصنيف. حيث يُسمح للاستعلام عن المواضيع بالاعتماد على القيم الخاصة بها من الجداول التعريفية الأساسية الخاصة بالوورد بريس meta table. يقدم الوورد بريس أربع معاملات يمكن استخدامها هي meta_key، meta_value، meta_value_num، و meta_compare ولكن يمكن استبدالها بالمعامل meta_query وهو الأفضل. لنلق نظرة على المثال:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'post_type'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'book'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'meta_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'key'</span><span class="pln">     </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'pages'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'value'</span><span class="pln">   </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">500</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'compare'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'&gt;'</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">'NUMERIC'</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></pre>

<p>
	في هذا المثال يقوم استعلام meta query باسترجاع الكتب التي عدد صفحاتها أكثر من 500 صفحة. يُعتبر هذه الطريقة أسهل بكثير من استخدام استعلام التصنيف.
</p>

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

<ul>
<li>
		key: مفتاح الحقل المُدخل
	</li>
	<li>
		value: القيمة التي نبحث عنها
	</li>
	<li>
		compare: نوع عملية المقارنة ويمكن أن تكون أحد قيم المساواة(=)، اللامساواة (!=) أكبر (&gt;)، أكبر أو يساوي (&gt;=)، أصغر (&lt;)، أصغر أو يساوي (&lt;=)، يشابه (LIKE)، لايشبه(NOT LIKE)، داخل(IN)، ليس ضمن (NOT IN)، بين (BETWEEN)، ليس بين (NOT BETWEEN)، موجود (EXISTS)، وليس موجود (NOT EXISTS).
	</li>
	<li>
		type: نوع البيانات الموجودة في الحقل. ومن الممكن نوع القيمة ‘NUMERIC‘, ‘BINARY‘، ‘CHAR‘، ‘DATE‘، ‘DATETIME‘، ‘DECIMAL‘، ‘SIGNED‘، ‘TIME‘، ‘UNSIGNED‘.
	</li>
</ul>
<p>
	ومن المهم الانتباه دومًا إلى العلاقة بين المعاملات التي تشير إلى العلاقة بين جمل الاستعلام المنفصلة، حيث أنها تعمل تمامًا مثل استعلامات التصنيف الذي شرحناه بالأعلى.
</p>

<h3>
	حالة استخدام: المواضيع المُرفقة بصور مميَّزة
</h3>

<p>
	يوجد الكثير من الطرق لاستخدام استعلام meta queries. من أهم الأمثلة عليه هي جمع المواضيع التي تحوي صور مميزة. كل معرف ID للصور المميزة يخزّن في أحد الجداول التعريفية الأساسية للوورد بريس باسم _thumbnail_id ويمكن من خلال استعلام meta query للبحث عن المواضيع التي تكون فيها قيمة هذا المفتاح المعرف meta key الذي لايكون فارغًا.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'meta_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'key'</span><span class="pln">     </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'_thumbnail_id'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'value'</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">'compare'</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><span class="pln">
</span><span class="pun">);</span></pre>

<h2>
	استعلامات التاريخ
</h2>

<p>
	تشبه طريقة عمل استعلامات التاريخ استعلامات meta queries، حيث تقدم WP_Query ثمانية معاملات لتضيق قائمة المواضيع بالاعتماد على التاريخ ويمكن تعويضها جميعًا بمعامل date_query وسنشرحه بتفصيل بسبب أهميته وكثرة استخدامه.
</p>

<p>
	لنتعرف أولًا على المعاملات الخاصة بالتاريخ، والمقتبسة من WordPressCodex:
</p>

<ul>
<li>
		year - وهي عبارة عن السنة مؤلفة من 4 أرقام مثل 2011.
	</li>
	<li>
		month - رقم الشهر من 1 إلى 12.
	</li>
	<li>
		week - رقم الأسبوع ضمن السنة من 0 إلى 53.
	</li>
	<li>
		day - رقم اليوم ضمن الشهر من 1 إلى 31.
	</li>
	<li>
		hour - الساعة من 0 إلى 23.
	</li>
	<li>
		minute - الدقيقة من 0 إلى 59.
	</li>
	<li>
		second - الثانية من 0 إلى 59.
	</li>
	<li>
		after - التاريخ الذي نريد استرجاع المواضيع بعده. حيث يمرر التاريخ من خلال ()strtotime والذي يمكن أن يأخذ التاريخ كقيمة نصية أو من خلال مصفوفة تحوي القيم السنة ‘year‘، الشهر ‘month‘، واليوم ‘day‘ على النحو التالي:
	</li>
	<li>
		<ul>
<li>
				year – تقبل السنة بصيغة الأربع أرقام ولكن القيمة الافتراضية هي أن تكون فارغة.
			</li>
			<li>
				month - الشهر من السنة ويقبل الأرقام من 1 إلى 12 والقيمة الافتراضية هي 12.
			</li>
			<li>
				day - هو اليوم من السنة وتأخذ قيمة من 1 إلى 31 أما القيمة الافتراضية هي آخر يوم من الشهر.
			</li>
		</ul>
</li>
	<li>
		before - التاريخ الذي نريد استرجاع المواضيع التي قبله. حيث يمرر التاريخ من خلال ()strtotime والذي يمكن أن يأخذ التاريخ كقيمة نصية أو من خلال مصفوفة تحوي القيم السنة ‘year‘، الشهر ‘month‘، واليوم ‘day‘ على النحو التالي:
	</li>
	<li>
		year – تقبل السنة بصيغة الأربع أرقام ولكن القيمة الافتراضية هي أن تكون فارغة.
	</li>
	<li>
		month - الشهر من السنة ويقبل الأرقام من 1 إلى 12 والقيمة الافتراضية هي 1.
	</li>
	<li>
		day - هو اليوم من السنة وتأخذ قيمة من 1 إلى 31 أما القيمة الافتراضية هي 1.
	</li>
	<li>
		inclusive - تستخدم مع before/after من أجل تحديد فيما إذا كانت قيمة التاريخ متضمنة ضمن المجال أو لا.
	</li>
	<li>
		compare -يمكن الإطلاع على ()WP_Date_Query::get_compare.
	</li>
	<li>
		column - القيمة الافتراضية له post_date.
	</li>
	<li>
		relation - وتأخذ إحدى القيمتين OR أو AND والتي تحدد كيف ستتعامل المصفوفات الفرعية فيما بينها لإتمام عملية المقارنة، والقيمة الافتراضية له هي AND.
	</li>
</ul>
<p>
	وهكذا نكون قد شرحنا القليل فقط عن استعلامات التاريخ، ولكنه يساعدنا في التعامل بمرونة كبيرة مع النطاقات الزمنية باستخدام المعاملات السبعة الأولى معًا.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Return all posts from 2014</span><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">'date_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'year'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2014</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">

</span><span class="com">// Return all posts from January 2015</span><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">'date_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'year'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2015</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'month'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</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">

</span><span class="com">// Return all Valentine's Day posts, regardless of year:</span><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">'date_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'month'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
			</span><span class="str">'day'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">14</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></pre>

<p>
	وللتحكم أكثر بالنطاق الزمني يمكن استخدام المعاملين before و after، ولكنك تحتاج لتحديد السنة، الشهر، واليوم كعناصر في المصفوفة الفرعية. كما يمكن استخدام المعامل inclusive لتحديد حدود النطاق الزمني بشكل دقيق أكثر.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'date_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</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">'January 1st, 2013'</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"> array</span><span class="pun">(</span><span class="pln">
				</span><span class="str">'year'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2013</span><span class="pun">,</span><span class="pln">
				</span><span class="str">'month'</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">'day'</span><span class="pln">   </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">28</span><span class="pun">,</span><span class="pln">
			</span><span class="pun">),</span><span class="pln">
			</span><span class="str">'inclusive'</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="pun">),</span><span class="pln">
	</span><span class="pun">),</span><span class="pln">
</span><span class="pun">);</span></pre>

<p>
	سيعيد هذا المثال المأخوذ من Codex كل المواضيع المنشورة بين الأول من كانون الثاني عام 2013 و الثامن والعشرين من شباط عام 2013. وبما أن القيمة الممررة للمعامل inclusive هي true فستكون المواضيع المنشورة في التواريخ الحدودية مُتضمَّنة في النتيجة.
</p>

<p>
	إن وظيفية التاريخ هنا تعتمد على صنف WP_Date_Query، لذلك أقترح الإطلاع أكثر على الموضوع.
</p>

<h3>
	حالة استخدام: المنشورات الموسمية السابقة
</h3>

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

<p>
	المثال القصير التالي سيضيف موضوعا خاصا بخدعة الأول من نيسان:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'date_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'month'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">4</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'day'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</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></pre>

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

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

<p>
	المعامل paged هو أحد المعاملات المستخدمة بكثرة حيث يحدد أي صفحة يمكن عرض نتائجها. ويمكن ربطها مع المعامل posts_per_page. مثلًا إذا تم عرض 10 مواضيع في الصفحة وأُسنِد للمعامل paged القيمة 4 فستعدل قيمة 4 إلى 10.
</p>

<p>
	المعامل nopaging يسمح لك بتجاهل ترقيم الصفحات بشكل كلي إذا عدلت قيمته إلى true.
</p>

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

<p>
	وفي حال وجدت نفسك لاتحتاج للمواضيع الموسومة على أنها ثابتة stick posts، يمكنك استخدام المعامل ignore_sticky_posts لتجاهلها. حيث أن المواضيع الموسومة بأنها ثابتة تتواجد دائما في أعلى القائمة وهو المكان الطبيعي لها ولتجاهل هذا التصرف تسند القيمة false للمعامل المذكور.
</p>

<p>
	يحدد المعامل posts_per_archive_page عدد الصفحات التي توجد في صفحات الأرشيف، والتي ستكون هي الصفحات التي تُعطى القيمة true للتوابع ()is_archive و i()s_search، مع العلم أن هذا المعامل لايُستخدم مع معامل posts_per_page.
</p>

<p>
	أخيرًا، المعامل page يُظهر المواضيع التي عادةً ما تظهر فقط في الصفحة X من الصفحة الأمامية الثابتة.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'posts_per_page'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">20</span><span class="pun">,</span><span class="pln"> 
	</span><span class="str">'offset'</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">'ignore_sticky_posts'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">true</span><span class="pln">
</span><span class="pun">);</span></pre>

<p>
	يعيد المثال في الأعلى المواضيع العشرين الثانية (كانت قيمة الإزاحة 2) من قاعدة البيانات مع تجاهل المواضيع المثبتة.
</p>

<h2>
	ترتيب النتائج
</h2>

<p>
	إن ترتيب النتائج هو بنفس أهمية استرجاع النتائج. ويمكن التحكم في ترتيب النتائج من خلال معاملين هما order و orderby.
</p>

<p>
	إن معامل orderby يحدد ترتيب المواضيع التي ستُستعاد. ويوجد لدينا العديد من الخيارات منها:
</p>

<ul>
<li>
		none - لايوجد ترتيب وهو القيمة الافتراضية في MySQL
	</li>
	<li>
		ID - ترتيب المواضيع من خلال المفتاح المعرف
	</li>
	<li>
		author - ترتيب المواضيع بحسب معرف المؤلف
	</li>
	<li>
		title - ترتيب المواضيع بحسب العنوان
	</li>
	<li>
		name - ترتيب المواضيع بالاعتماد على slug
	</li>
	<li>
		type - ترتيب المواضيع بحسب نوع الموضوع
	</li>
	<li>
		date - ترتيب المواضيع بحسب التاريخ
	</li>
	<li>
		modified - ترتيب المواضيع بالاستناد إلى تاريخ آخرت تعديل
	</li>
	<li>
		parent - ترتيب المواضيع بالاستناد إلى معرف الأب
	</li>
	<li>
		rand - ترتيب عشوائي للمواضيع
	</li>
	<li>
		comment_count - ترتيب المواضيع بحسب عدد التعليقات على الموضوع
	</li>
	<li>
		menue_order - ترتيب المواضيع بحسب ترتيب الصفحات
	</li>
	<li>
		meta_value - ترتيب المواضيع بالاستناد إلى القيمة meta value
	</li>
	<li>
		meta_value_num ترتيب المواضيع بالاستناد إلى القيمة الرقمية ل meta value
	</li>
	<li>
		post_in الحفاظ على الترتيب المدخل في هذا المعامل
	</li>
</ul>
<p>
	تقريبًا جميع هذه المعاملات تشرح نفسها بنفسها، ولكن لنتعمق أكثر في طريقة ترتيب المواضيع باستخدام meta value. للقيام بهذا العمل، علينا أول تحديد معامل meta_key كما يعرّفه الوورد بريس بأنه المفتاح الذي يحوي قيمة meta value، ولكن يجب عليك الاهتمام بتحديد النمط الصحيح عند الترتيب وإلا فإننا سنحصل على نتائج غير مُتوقعة.
</p>

<p>
	مع الملاحظة أنه في في حال كنا نرتب معلومات رقمية عندها سنستخدم المعامل meta_value_num بدلًا من meta_value.
</p>

<p>
	ويمكن أيضًا استخدام المعامل meta_type الذي يسمح لنا بتحديد نوع البيانات.
</p>

<p>
	إن المعامل order يحدد اتجاه الترتيب ففي حال كانت القيمة المُمررة له هي ASC عندها ستكون نتيجة الترتيب تصاعديًا، فيما ستكون نتيجة الترتيب تنازلية في حال كانت قيمة المعامل DESC ، والآن لنلق نظرة على المثال التالي الذي يعطينا نظرة عملية عن طريقة الترتيب:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Reverse order by post title</span><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">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'post'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'orderby'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'title'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'order'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'DESC'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// List specific posts, preserve given order</span><span class="pln">
$custom_posts </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="lit">56</span><span class="pun">,</span><span class="pln"> </span><span class="lit">928</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2271</span><span class="pun">,</span><span class="pln"> </span><span class="lit">22</span><span class="pun">,</span><span class="pln"> </span><span class="lit">491</span><span class="pun">,</span><span class="pln"> </span><span class="lit">883</span><span class="pln"> </span><span class="pun">);</span><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">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'any'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'post__in'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $custom_posts</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'orderby'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'post__in'</span><span class="pun">,</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Order by meta data (grab posts with thumbnails first)</span><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">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'post'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'meta_key'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'_thumbnail_id'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'orderby'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'meta_value'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'order` =&gt; '</span><span class="pln">DESC</span><span class="str">'
);</span></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'orderby'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'title'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'DESC'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'menu_order'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'ASC'</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">);</span></pre>

<h3>
	حالة استخدام: ترتيب المنتجات حسب السعر
</h3>

<p>
	تتطلب نماذج مواقع التجارة الالكترونية طريقة لترتيب المنتجات بحسب السعر. سنبحث في المثال التالي عن المنتجات التي يتجاوز سعرها 20 دولارًا وترتيبها في قائمة حسب السعر من الأدنى إلى الأعلى:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'meta_query'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln">
		array</span><span class="pun">(</span><span class="pln">
			</span><span class="str">'key'</span><span class="pln">     </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'price'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'value'</span><span class="pln">   </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'20'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'compare'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'&gt;='</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="str">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'product'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'meta_key'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'price'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'orderby'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'meta_value_num'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'order` =&gt; '</span><span class="pln">ASC</span><span class="str">'
);</span></pre>

<h2>
	القيم المُسترجعة
</h2>

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

<p>
	في حال حذف المعامل fields فستُسترجع البيانات من الاستعلام بالطريقة المُعتادة، أما في حال ممرنا القيمة ids لهذا المعامل فستكون النتيجة المُرجعة من الاستعلام على شكل مصفوفة تحوي أرقام المعرفات الخاصة بالمواضيع post IDs، وفي حال كانت قيمة المعامل هي id=&gt;parent عندها ستكون النتيجة المُرجعة من الاستعلام هي مصفوفة ولكنها تحوي أرقام المعرفات الخاصة بالآباء المرتبطة بالعلاقة المذكورة في الاستعلام.
</p>

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

<h3>
	حالة استخدام: إضافة معرض صور برمجيًا
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Programmatically placing a gallery shortcode</span><span class="pln">
</span><span class="kwd">global</span><span class="pln"> $post</span><span class="pun">;</span><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">'post_parent'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $post</span><span class="pun">-&gt;</span><span class="pln">ID</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'post_type'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'attachment'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'post_status'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'any'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'fields'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'ids'</span><span class="pln">
</span><span class="pun">);</span><span class="pln">
$images </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> WP_Query</span><span class="pun">(</span><span class="pln"> $args </span><span class="pun">);</span><span class="pln">
$image_id_string </span><span class="pun">=</span><span class="pln"> implode</span><span class="pun">(</span><span class="pln"> </span><span class="str">','</span><span class="pun">,</span><span class="pln"> $images </span><span class="pun">);</span><span class="pln">
echo do_shortcode</span><span class="pun">(</span><span class="pln"> </span><span class="str">'[gallery ids="'</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $image_id_string </span><span class="pun">.</span><span class="pln"> </span><span class="str">'"]'</span><span class="pln"> </span><span class="pun">);</span></pre>

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

<h2>
	الإذن Permission
</h2>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'post_status'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> array</span><span class="pun">(</span><span class="pln"> </span><span class="str">'publish'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'private'</span><span class="pln"> </span><span class="pun">),</span><span class="pln">
	</span><span class="str">'perm'</span><span class="pln">        </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'readable'</span><span class="pun">,</span><span class="pln">
</span><span class="pun">);</span></pre>

<h2>
	التخزين المؤقت Caching
</h2>

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

<p>
	مثلا قائمة بأفضل 10 مواضيع على الأغلب لن تتغير من استعلام إلى آخر وبالتالي يمكن الاستفادة من تخزينها.
</p>

<p>
	يوجد حالتين يمكن فيها التحكم بهذا التخزين المؤقت. إذا قمت بتخزين قائمة ولاتحتاج إلى البيانات الأساسية منها metadata أو إلى تصنيفها يمكن أن تستخدم المعاملين update_post_meta_cache و update_post_term_cache وذلك لإيقاف التخزين المؤقت الخاص به. كما أنه في حال كنت تقوم باستعلام لمرة وحيدة من أجل اختبار ما سريع يمكن استخدام المعامل cache_results لإيقاف تخزين  نتايج الموضوع نفسه.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<span class="com">// Do not cache results</span><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">'posts_per_page'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'cache_results'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">false</span><span class="pln">
</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Don't cache taxonomy data</span><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">'posts_per_page'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'update_post_term_cache'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">false</span><span class="pln">
</span><span class="pun">);</span></pre>

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

<h2>
	خصائص استعلامات الوورد بريس WP_Query
</h2>

<p>
	حتى الآن كنا نتكلم عن المعاملات التي يمكن تمريرها لاستعلام WP_Query، ولكن الآن سنتكلم عنه كصنف Class وسنشرح الخصائص properties و التوابع methods التي يمكن أن نتعامل معها.
</p>

<p>
	يحوي WP_Query Properties Documentation على شرح وافٍ لجميع الخصائص الخاصة بهذا الصنف، ولكن سنتحدث هنا عن أكثر الخصائص فائدة وكيفية الاستفادة منها.
</p>

<p>
	لنبدأ أولًا بالخاصية $found_posts التي تحمل قيمة عدد المواضيع التي تم العثور عليها كإجمالي ناتج الاستعلام المدخل.
</p>

<p>
	أما الخاصية $post_count فإنها تحمل عدد المواضيع التي تظهر حاليًا، وهي قيمة غير ثابتة منذ استخدم ترقيم الصفحات، فمثللًا يمكن أن يكون هناك 52 موضوع أوجده الاستعلام ولكن تعرض 10 فقط في الوقت الحالي. كما أنه يجب الانتباه إلى أن القيمة التي يحملها $post_count ليس من الضروري أن تكون نفسها الموجودة في post_per_page فعلى سبيل المثال إذا وُجد 52 موضوع وكانت كل صفحة تعرض 10 مواضيع في المرة الواحدة ستكون الصفحة الأخيرة تحوي موضوعين فقط .
</p>

<p>
	أخيرًا سنتحدث عن الخاصية $max_num_pages والتي تحمل عدد الصفحات التي نحتاجها لإظهار النتائج، وهي عمليًا ناتج العملية $found_posts\$posts+per_page ويقرّب الناتج إلى أكبر قيمة صحيحة.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" style="">
<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">'s'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'awesome+wordpress+plugins'</span><span class="pun">,</span><span class="pln">
	</span><span class="str">'posts_per_page'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">8</span><span class="pln">
</span><span class="pun">);</span><span class="pln">
$results </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> WP_Query</span><span class="pun">(</span><span class="pln"> $args </span><span class="pun">);</span><span class="pln">

echo </span><span class="str">"A total of "</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $results</span><span class="pun">-&gt;</span><span class="pln">found_posts </span><span class="pun">.</span><span class="pln"> </span><span class="str">" posts were found.&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
echo </span><span class="str">"We will be displaying "</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $results</span><span class="pun">-&gt;</span><span class="pln">query_vars</span><span class="pun">[</span><span class="str">'posts_per_page'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">" posts per page if possible.&lt;br /&gt;"</span><span class="pun">;</span><span class="pln">
echo </span><span class="str">"We need a total of "</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $results</span><span class="pun">-&gt;</span><span class="pln">max_num_pages </span><span class="pun">.</span><span class="pln"> </span><span class="str">" pages to display the results"</span><span class="pun">.</span></pre>

<h2>
	توابع استعلامات الوورد بريس WP_Query Methods
</h2>

<p>
	بما أننا نتكلم عن الأصناف فإن الخصائص تشابه بشكل كبير المتغيرات، والتوابع methods تشبه أيضًا الدوال functions. يمتلك استعلام الوورد بريس العديد من التوابع رغم أنك لاتحتاج إلى استخدامها مباشرة بشكل عام. ولكن أهم تابعين ذكرناهما في الأعلى هما ()have_post و ()the_post.
</p>

<p>
	بعض التوابع الأخرى المفيدة هي ()rewind_posts والذي يعيد ضبط الحلقة ويمكن استخدامها في حال مثلًا كان الخرج عبارة عن قائمتين متماثلتين تمامًا في مكانين مختلفين.
</p>

<p>
	بالنسبة للتوابع ()get و ()set ستسمح لك بالوصول إلى متغيرات الاستعلام ولانستخدمها إلا في حالات قليلة جدًا.
</p>

<p>
	لمزيد من المعلومات حول توابع استعلام الوورد بريس، يمكن الإطلاع على <a href="https://codex.wordpress.org/Class_Reference/WP_Query#Methods" rel="external nofollow">Method Documentation</a>.
</p>

<h2>
	سلامة البيانات: التحقق Validating، التنظيف Sanitizing، والتهريب Escaping
</h2>

<p>
	تقترن بعض الاستعلامات المخصصة مع واجهات المستخدمين. والسيناريو الأمثل لضمان سلامة المعلومات هو إضافة فلتر مخصص يتحكم بصلاحيات الوصول للمستخدم للمواضيع. يمكن الإطلاع على المزيد من المعلومات في المقالة <a href="https://premium.wpmudev.org/blog/add-post-filters/" rel="external nofollow">Adding Post Filters To Your WordPress Site</a>.
</p>

<p>
	وفي حال كنت تملك مكان من الواجهة يستطيع المستخدم فيه إدخال بيانات ما، فيجب دوما التحقق وتهريب البيانات المدخلة لمنع الهجومات التي تحصل على قاعدة البيانات. ويمكن الإطلاع على معلومات أكثر في المقالة   <a href="https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data" rel="external nofollow">Validating, Santitizing And Escaping User Data</a>.
</p>

<h2>
	تعديل استعلامات SQL
</h2>

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

<p>
	تسمح الفلاتر مثل posts_where و posts_join بتعديل شروط معينة في استعلام SQL بينما تكون استعلامات الوورد بريس أكثر مرونة ولكنها لاتسمح بوجود شروط معقدة بعد WHERE بما في ذلك التصنيفات المتعددة أو العلاقات المتعددة. في هذه الحالة يمكن استخدام الفلاتر التي ذكرناها.
</p>

<p>
	يمكن الإطلاع على <a href="https://codex.wordpress.org/Class_Reference/WP_Query#Filters" rel="external nofollow">WP_Query Filters</a> للمزيد من المعلومات.
</p>

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

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

<p>
	إذا كنت مهتمًا ببرمجة الوورد بريس، يوجد مجموعة من الأصناف التي تعمل بشكل مشابه لصنف WP_Query مثل صنف WP_Comment_Query الذي يُستعمل لتجميع التعليقات بنفس الطريقة التي يعمل بها صنف WP_Query. كما أن صنف WP_Meta_Query يتعامل مع الاستعلامات الأساسية meta_queries، بينما يتعامل صنف WP_Date_Query مع كل حدود التواريخ.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://premium.wpmudev.org/blog/mastering-wp-query/" rel="external nofollow">An In-Depth Guide to Conquering WP_Query</a> لصاحبه Daniel Pataki
</p>
]]></description><guid isPermaLink="false">655</guid><pubDate>Sun, 10 Feb 2019 09:09:01 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x646;&#x634;&#x623; &#x635;&#x641;&#x62D;&#x629; &#x62E;&#x637;&#x623; 404 &#x645;&#x62E;&#x635;&#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%A3-%D8%B5%D9%81%D8%AD%D8%A9-%D8%AE%D8%B7%D8%A3-404-%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r626/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_02/5a91282a1e419_26(2).png.034dd88652cc44d60b936c3b0f33c09d.png" /></p>

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

<h2 id="فهم-الخطأ-404">
	فهم الخطأ 404
</h2>

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

<h2 id="الصفحة-الافتراضية-للخطأ-404">
	الصفحة الافتراضية للخطأ 404
</h2>

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

<h3 id="ملف-404.php">
	ملف 404.php
</h3>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_850_7" style="">
<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;h2&gt;</span><span class="pln">Error 404 - Page Not Found.</span><span class="tag">&lt;/h2&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="pun">&lt;?</span><span class="pln">php get_footer</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<p>
	التعليمات البرمجية السابقة ستقوم بإظهار مخرجات بسيطة، ضمن وسم <code>h2</code>. كما تستدعي أيضًا رأس الموقع (<code>header</code>)، الشريط الجانبي (<code>sidebar</code>)، وتذييل الموقع (<code>footer</code>) وكل هذه العناصر افتراضية ويمكنك تعديلها طبعًا لتناسب القالب الذي تقوم بتصميمه.
</p>

<h2 id="العمل-على-قالب-الصفحة">
	العمل على قالب الصفحة
</h2>

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

<h3 id="ملف-404-–-مع-إضافة-مربع-البحث">
	ملف 404 – مع إضافة مربع البحث
</h3>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_850_9" style="">
<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;h2&gt;</span><span class="pln">Error 404 - Page Not Found.</span><span class="tag">&lt;/h2&gt;</span><span class="pln">

Search:

</span><span class="pun">&lt;?</span><span class="pln">php include</span><span class="pun">(</span><span class="pln">TEMPLATEPATH </span><span class="pun">.</span><span class="pln"> </span><span class="str">"/searchform.php"</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&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="pun">&lt;?</span><span class="pln">php get_footer</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<h2 id="جعل-الصفحة-أكثر-ديناميكية">
	جعل الصفحة أكثر ديناميكية
</h2>

<p>
	كي نجعل صفحة 404 أكثر ديناميكية يمكننا استخدام ميزة إعادة التوجيه بحيث تظهر صفحة الخطأ للمستخدم لفترة وجيزة من الزمن ومن ثم يتم إعادة توجيه المستخدم إلى الصفحة الرئيسية للموقع. كما يمكن الاستفادة من هذه الصفحة في ارتفاع ترتيب الموقع في محركات البحث.<br>
	في المثال التالي يمكننا البدء بتعديل ملف <code>header.php</code> من القالب الخاص بك. وإضافة ما يلي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_850_11" style="">
<span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">is_404</span><span class="pun">())</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> $redirectHome </span><span class="pun">=</span><span class="pln"> get_option</span><span class="pun">(</span><span class="str">'home'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php echo $redirectHome</span><span class="pun">;</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<p>
	بعد إضافة هذه التعليمات، سنقوم الآن بتعديل ملف <code>404.php</code> ليصبح بالشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_850_13" style="">
<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;h1&gt;</span><span class="pln">Error 404 - File Not Found.</span><span class="tag">&lt;/h1&gt;</span><span class="pln">

</span><span class="tag">&lt;h3&gt;</span><span class="pln">Please &lt;a href="</span><span class="pun">&lt;?</span><span class="pln">php bloginfo</span><span class="pun">(</span><span class="str">'home'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" Click here</span><span class="tag">&lt;/a&gt;</span><span class="pln"> to return to our home page, or you can wait to be redirected in 15 seconds.</span><span class="tag">&lt;/h3&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>

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

<h2 id="التأكد-من-عمل-الصفحة">
	التأكد من عمل الصفحة
</h2>

<p>
	يمكن التأكد أن صفحة 404 تعمل بكتابة رابط موقعك وإلحاقها بعنوان صفحة أو مقال تعرف أنه غير متواجد في موقعك.<br>
	مثال: <code><a href="http://www.yourwebsitedomain.com/test404page.php" ipsnoembed="false" rel="external nofollow">http://www.yourwebsitedomain.com/test404page.php</a></code>
</p>

<h3 id="إذا-لم-تعمل">
	إذا لم تعمل
</h3>

<p>
	إذا لم يتم توجيهك إلى الصفحة هذا يعني أنه علينا تعديل ملف <code>htaccess.</code> على الخادم (server) كي نجعل صفحة 404 تعمل ابحث عن ملف <code>htaccess.</code> في تنصيب ووردبريس الخاص بك وأضف السطر التالي له:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_850_16" style="">
<span class="typ">ErrorDocument</span><span class="pln"> </span><span class="lit">404</span><span class="pln"> </span><span class="pun">/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">php</span><span class="pun">?</span><span class="pln">error</span><span class="pun">=</span><span class="lit">404</span></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_850_18" style="">
<span class="typ">ErrorDocument</span><span class="pln"> </span><span class="lit">404</span><span class="pln"> </span><span class="pun">/</span><span class="pln">YOURSUBFOLDERNAME</span><span class="pun">/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">php</span><span class="pun">?</span><span class="pln">error</span><span class="pun">=</span><span class="lit">404</span></pre>

<p>
	هذا سيجبر الخادم على استخدام ملف <code>404.php</code>
</p>

<h2 id="مثال-كامل">
	مثال كامل
</h2>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_850_20" style="">
<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;h1&gt;</span><span class="pln">404 Error</span><span class="tag">&lt;/h1&gt;</span><span class="pln">

We cannot seem to find what you were looking for.

Maybe we can still help you.

</span><span class="tag">&lt;ul&gt;</span><span class="pln">

</span><span class="tag">&lt;li&gt;</span><span class="pln">You can search our site using the form provided below.</span><span class="tag">&lt;/li&gt;</span><span class="pln">

</span><span class="tag">&lt;li&gt;</span><span class="pln">You can visit &lt;a href="</span><span class="pun">&lt;?</span><span class="pln">php bloginfo</span><span class="pun">?&gt;</span><span class="pln">"</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">

&lt;a href="</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="pun">(</span><span class="str">'url'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" the homepage.</span><span class="tag">&lt;/a&gt;</span><span class="pln">

</span><span class="tag">&lt;li&gt;</span><span class="pln">Or you can view some of our recent posts.</span><span class="tag">&lt;/li&gt;</span><span class="pln">

</span><span class="tag">&lt;/ul&gt;</span><span class="pln">

Search:

TEMPLATEPATH . "/searchform.php"); </span><span class="pun">?&gt;</span><span class="pln">

</span><span class="tag">&lt;h3&gt;</span><span class="pln">Recent Posts</span><span class="tag">&lt;/h3&gt;</span><span class="pln">

</span><span class="tag">&lt;ul&gt;</span><span class="pln">
	</span><span class="pun">&lt;?</span><span class="pln">php query_posts</span><span class="pun">(</span><span class="str">'posts_per_page=5'</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">have_posts</span><span class="pun">())</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">while</span><span class="pln"> </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;li&gt;</span><span class="pln">&lt;a href="</span><span class="pun">&lt;?</span><span class="pln">php the_permalink</span><span class="pun">()</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" title="Permalink for : </span><span class="pun">&lt;?</span><span class="pln">php the_title</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 the_title</span><span class="pun">();</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/a&gt;</span><span class="pln">
	endwhile; endif; </span><span class="pun">?&gt;</span><span class="pln">
	</span><span class="tag">&lt;/ul&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>

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

<h2 id="جعل-الصفحة-أكثر-ملائمة-وبهجة-للمستخدم">
	جعل الصفحة أكثر ملائمة وبهجة للمستخدم
</h2>

<p>
	لجعل هذه الصفحة أكثر جاذبية للمستخدم، يمكن استخدام العديد من الأفكار كوضع صور خلفية لهذه الصفحة أو كتابة تعليمات html خاصة لجعل هذه الصفحة أكثر قوة وتنوعًا وإليك بعض الأمثلة لصفحات 404 مميزة:
</p>

<ol>
<li>
		<a href="http://Mundofox.com" rel="external nofollow">Mundofox.com</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example1.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27161" data-unique="g11xxe616" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example1.jpeg.3bc456f3f7f3ba542e79cbcf12e76b70.jpeg"></p>

<ol start="2">
<li>
		<a href="http://CSSRemix.com" rel="external nofollow">CSSRemix.com</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example2.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27162" data-unique="3nzkyae5v" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example2.jpeg.a3cf36f7e373fa2b507cad3a99737061.jpeg"></p>

<ol start="3">
<li>
		<a href="http://CSSRemix.com" rel="external nofollow">CSSRemix.com</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example3.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27163" data-unique="p3iyx20gc" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example3.jpeg.a612a5580a3d4b32a7f05d6a94d04ab4.jpeg"></p>

<ol start="4">
<li>
		<a href="http://ChrisJennings.com" rel="external nofollow">ChrisJennings.com</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example4.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27164" data-unique="t3squqytb" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example4.jpeg.79c4b278e8e69831cc7b8e3c6571ded4.jpeg"></p>

<ol start="5">
<li>
		<a href="http://ook.co.uk" rel="external nofollow">ook.co.uk</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example5.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27165" data-unique="rax4a6vuj" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example5.jpeg.f05ef311bc3a8e6b12827a3b62d21b0d.jpeg"></p>

<ol start="6">
<li>
		<a href="http://Youcastr.com" rel="external nofollow">Youcastr.com</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example6.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27166" data-unique="lvrhnuqca" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example6.jpeg.b1f697b07479b1d497d298020653bb90.jpeg"></p>

<ol start="7">
<li>
		<a href="http://Mixx.com" rel="external nofollow">Mixx.com</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example7.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27167" data-unique="kyz1f295i" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example7.jpeg.22084f484891b31b27b193d3c4776aba.jpeg"></p>

<ol start="8">
<li>
		<a href="http://JustCreativeDesign.com" rel="external nofollow">JustCreativeDesign.com</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example8.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27168" data-unique="16k1evxts" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example8.jpeg.322289d9d6fd0ba751b60bcfb8bd85e0.jpeg"></p>

<ol start="9">
<li>
		<a href="http://Agens.no" rel="external nofollow">Agens.no</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example9.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27169" data-unique="g5mkrzvfe" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example9.jpeg.e9b9c8519c6f4aaf9d60237c3970512a.jpeg"></p>

<ol start="10">
<li>
		<a href="http://Mushroomdigital.co.uk" rel="external nofollow">Mushroomdigital.co.uk</a>
	</li>
</ol>
<p style="text-align: center;">
	<img alt="error404_example10.jpeg" class="ipsImage ipsImage_thumbnailed" data-fileid="27170" data-unique="o87lh3vc3" src="https://academy.hsoub.com/uploads/monthly_2018_02/error404_example10.jpeg.dec5f5a8f468c26420a47f21ce3f6380.jpeg"></p>

<h2 id="استخدمها-بحكمة">
	استخدمها بحكمة
</h2>

<p>
	من الجيد دائمًا استخدام صفحة الخطأ 404 سواءً في ووردبريس أو في مواقع html الثابتة (static)، والاستفادة منها بوضع إعلانات مثلًا.<br>
	هناك العديد من الطرق لتصميم صفحة 404 الخاصة بك، والعديد من الطرق أيضًا لمساعدة زوار الموقع في الوصول إلى ما يبحثون عنه، استخدم الأمثلة المذكورة أعلاه كما ترغب واختر ما يناسبك للوصول إلى أفضل نتيجة.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://1stwebdesigner.com/wordpress-404-error-page/" rel="external nofollow">How to Create a Custom WordPress 404 Error Page</a> 
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="https://www.freepik.com/free-vector/isometric-error-404-design_1259828.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">626</guid><pubDate>Mon, 26 Feb 2018 08:07:02 +0000</pubDate></item><item><title>&#x62A;&#x637;&#x648;&#x64A;&#x631; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x644;&#x644;&#x645;&#x628;&#x62A;&#x62F;&#x626;&#x64A;&#x646;: &#x628;&#x631;&#x645;&#x62C;&#x629; &#x625;&#x636;&#x627;&#x641;&#x629; &#x2013; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x62E;&#x635;&#x627;&#x626;&#x635;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%E2%80%93-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%AE%D8%B5%D8%A7%D8%A6%D8%B5-r608/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/5a68d82dcb83c_28-2(1).png.eaa64bcbd74cecb77376c340e3c6ddc5.png" /></p>

<p>
	تعرّفنا في الدرس السابق على <a href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%E2%80%93-%D8%A7%D9%84%D9%85%D8%B9%D9%84%D9%82%D8%A7%D8%AA%D8%8C-%D8%A7%D9%84%D8%A3%D9%81%D8%B9%D8%A7%D9%84-%D9%88%D8%A7%D9%84%D9%85%D8%B1%D8%B4%D8%AD%D8%A7%D8%AA-r602/" rel="">المعلِّقات، الأفعال و المرشِّحات</a> (Hooks, Actions, Filtres ) وسنتعرّف في هذا الدرس على أساسيات إنشاء الإضافة وكيفية إضافة خصائص القالب للإضافات…
</p>

<h2 id="أساسيّات-إنشاء-إضافةٍ">
	أساسيّات إنشاء إضافةٍ:
</h2>

<p>
	الآن وقد صِرنا نعرف كلّ شيءٍ عن المعلِّقات فإن الخطوة التاليّة ستكون معرفة طريقة استخدامها. لنعد خطوة للوراء ولنلق نظرة عامّة على الإضافات.<br>
	يتم وضع الإضافات في المجلّد الرئيسي للإضافات في موقعك ووردبريس، يوجد هذا الملف عادة في هذا المسار "wp-content/plugins". كمثال لنقم بإنشاء إضافة تقوم بإضافة رابط تغريده تحت مقالاتك.<br>
	أوّلا، فلننشئ مجلّدًا في مجلّد الإضافات الرئيسي ولنسمّه مثلا "tweet-plugin-tutorial". الآن أنشئ ملفًّا داخل هذا المجلّد وسمّه "tweet-plugin-tutorial.php". الآن قم بفتح الملف وقم بنسخ البرمجيّة التالية بداخله:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6689_7" style="">
<span class="pun">&lt;?</span><span class="pln">php 
</span><span class="com">/**
 * Plugin Name: Tweet Plugin Tutorial
 * Plugin URI: http://danielpataki.com
 * Description: This plugin adds a simple tweet link below posts.
 * Version: 1.0.0
 * Author: Daniel Pataki
 * Author URI: http://danielpataki.com
 * License: GPL2
*/</span></pre>

<p>
	هذه المعلومات سيتم عرضها في لوحة تحكّم المدير في قسم الإضافات. بمجرّد حفظك للملف ستلاحظ ظهور إضافةٍ جديدةٍ في قائمة الإضافات، تهانينا! لقد أنشأت أوّل إضافة لك بإتقان ولكن لا تفرح كثيرًا فهذه الإضافة لا تقوم بأيّة وظيفة بعد، ولكن يمكنك تفعيلها الآن وهو ما ندعوك للقيام به.<br>
	حاليًّا قمنا بـ 90% من العمل. كلُّ ما علينا القيام به الآن هو إيجاد طريقة لإضافة رابط التغريدة أسفل محتوى المقال. ربّما أنت تفكّر بتعديل محتوى المقال عن طريق إضافة نصٍّ إضافي له. هذا يعني أنّك تفكّر في استخدام معلِّق <code>the_content</code> مثلما قمنا بهذا سابقًا:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6689_7" style="">
<code>&lt;?php 
function tweet_link( $content ) {
  return $content . '&lt;p&gt;&lt;a href="https://twitter.com/intent/tweet?url='.get_permalink().'"&gt;Tweet about this&lt;/a&gt;&lt;/p&gt;';
}
add_action( 'the_content', 'tweet_link' );
</code></pre>

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

<p style="text-align: center;">
	<img alt="img-1 (2).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26713" data-unique="884s8dxvp" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a68d7ab174fc_img-1(2).png.73ae7639e574e0eed8f3fc96a1fec755.png"></p>

<p>
	في الواقع هذا كلّ ما يجب عليك معرفته لإنشاء إضافة ووردبريس. جميع الإضافات هي عبارة عن مزيج من الدّوال والمعلِّقات التي تحدِّد المكان الذي سيتم منه تشغيل هذه الدّوال. لذا من الآن فصاعدًا عليك التركيز على تعلُّم الأنظمة الفرعية مثل <a href="https://codex.wordpress.org/Options_API" rel="external nofollow">Options <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a>, <a href="https://codex.wordpress.org/Metadata_API" rel="external nofollow">Metadata <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a> وغيرها.
</p>

<h2>
	إضافة خصائص القالب للإضافات:
</h2>

<p>
	هناك عدّة طرق لإضافة خصائص لقوالبك. دعنا أولًّا نلقي نظرة على الطريقة القياسية للقيام بهذا الأمر عن طريق <a href="http://codex.wordpress.org/Creating_Options_Pages" rel="external nofollow">دليل ووردبريس</a>.<br>
	سوف نبدأ بإنشاء صفحة مدير ستحتوي على النموذج التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6689_7" style="">
<code>&lt;?php 
add_action('admin_menu', 'tweetlink_settings_menu');

function tweetlink_settings_menu() {
    add_menu_page('Tweet Link Settings', 'Tweet Link', 'manage_options', 'tweetlink-settings', 'tweetlink_settings_page', 'dashicons-twitter');
}

function tweetlink_settings_page() {
  echo '&lt;div class="wrap"&gt;&lt;h2&gt;Tweet Link Options&lt;/h2&gt;&lt;/div&gt;';
}
</code></pre>

<p>
	دالّة <code>()tweetlink_settings_menu</code> تمّ تعليقها بمعلِّق <code>admin_menu</code>. حسب دليل الووردبريس هذه هي الطريقة الصحيحة التّي يجب استخدامها لإنشاء قائمة مدخلات في لوحة التحكّم. العمل سيتّم عن طريق دالّة <code>()add_menu_page</code> التي تأخذ مجموعة مُعامِلات صفحة ذات مستوى أعلى. المعاملات التي تأخذها هذه الدّالة هي:
</p>

<ul>
<li>
		عنوان الصّفحة – يستخدم في وسم العنوان
	</li>
	<li>
		عنوان القائمة – يستخدم في كتابة اسم القائمة في الجهة اليسرى/اليمنى من لوحة تحكم المدير.
	</li>
	<li>
		الإمكانيّة – لتحديد أقل مستوى يمكنه مشاهدة القائمة (مثلا القائمة ستكون ظاهرة فقط للمدير والمحرّرين)
	</li>
	<li>
		الاسم اللطيف للقائمة – يستخدم في الرابط المؤدّي لصفحة القائمة.
	</li>
	<li>
		الدّالة - اسم الدّالة التي تقوم بالتحكّم بالمُخرجات.
	</li>
	<li>
		الأيقونة – رابط صورة او نص لأيقونات ووردبريس.
	</li>
	<li>
		الموقع – تموضع العنصر ضمن القائمة.
	</li>
</ul>
<p>
	إليك كيف تبدو صفحة الخصائص في لوحة التحكم:
</p>

<p style="text-align: center;">
	<img alt="img-2 (2).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26712" data-unique="e4e5fe6i5" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a68d7a8969b7_img-2(2).png.52bbd8fc16d0d33e6ad3f1c1d07978e8.png"></p>

<p>
	قد تبدو لك هذه الصّفحة رائعة ولكن في الحقيقة هي مبالغةٌ كبيرة إنشاء صفحة كاملة من أجل إضافة بسيطة كالتّي نعمل عليها الآن، لذا سيكون من الأفضل وضع هذه الصفحة داخل قائمة الإعدادات الموجودة سلفا بالووردبريس. يمكنك القيام بذلك باستخدام دالّة <code><a href="https://codex.wordpress.org/Function_Reference/add_options_page" rel="external nofollow">()add_options_page</a></code>.<br>
	الخطوة التّالية ستكون جعل الووردبريس يعلم حول إعدادات تغريدتنا. هذا الأمر سيتطلب استخدام دالّة <code>()register_settings</code> داخل دالّة معلّقة إلى <code>()to admin_init</code>.<br>
	إليك كيف سيكون شكل البرمجيّة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6689_7" style="">
<code>&lt;?php 
add_action( 'admin_init', 'tweetlink_settings' );

function tweetlink_settings() {
    register_setting( 'tweetlink_settings', 'twitter_account' );
}
</code></pre>

<p>
	كلّ شيءٍ تمام. الخطوة الأخيرة ستكون إضافة استمارة تستخدم خصائصنا. استخدم البرمجيّة التاليّة كنموذج لإنشاء إعداداتك الخاصّة، لا تنسَ استخدام دوال <code>()settings_fields</code> و <code>()do_settings_sections</code> لضمان قيام الووردبريس بحفظ البيانات لك.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6689_7" style="">
<code>&lt;?php 
function tweetlink_settings_page() {
?&gt;
&lt;div class="wrap"&gt;
&lt;h2&gt;Tweet Link Settings&lt;/h2&gt;

&lt;form method="post" action="options.php"&gt;
    &lt;?php settings_fields( 'tweetlink_settings' ); ?&gt;
    &lt;?php do_settings_sections( 'tweetlink_settings' ); ?&gt;
    &lt;table class="form-table"&gt;        
        &lt;tr valign="top"&gt;
        &lt;th scope="row"&gt;Twitter Account&lt;/th&gt;
        &lt;td&gt;&lt;input type="text" name="twitter_account" value="&lt;?php echo esc_attr( get_option('twitter_account') ); ?&gt;" /&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
    
    &lt;?php submit_button(); ?&gt;

&lt;/form&gt;
&lt;/div&gt;

&lt;?php
}
</code></pre>

<p>
	عند نهاية العمليّة يجب أن ترى ظهور حقل جديد يُمكّنك من إدخال حسابك على تويتر ثم الضغط على حفظ. بعد ذلك يمكنك استخدام دالّة  <code>'get_option( 'twitter_account (</code> لاسترجاع القيمة المُدخلة واستخدامها بأي مكان داخل إضافتك.
</p>

<p style="text-align: center;">
	<img alt="img-3 (1).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26711" data-unique="2d2kncxza" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a68d7a71b0d6_img-3(1).png.ccb454b13f8233d9766a9f8947c06bf0.png"></p>

<p>
	يمكننا الآن التعديل على رابط التغريدة لإضافة "via @username" إذا قام المستخدمون بإضافة حسابهم على تويتر في صفحة الخصائص.<br>
	إليك كيف عدّلت دالّة <code>()tweet_link</code>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6689_7" style="">
<code>&lt;?php 
function tweet_link( $content ) {
    $url = 'https://twitter.com/intent/tweet';
    $url .= '?url=' . get_permalink();

    $account = get_option( 'twitter_account' );
    if( !empty( $account ) ) {
        $url .= '&amp;via=' . $account;
    }

    return $content . '&lt;p&gt;&lt;a href="' . $url . '"&gt;Tweet about this&lt;/a&gt;&lt;/p&gt;';
}
</code></pre>

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

<p>
	هكذا نختم سلسلتنا حول <a href="https://academy.hsoub.com/tags/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1%20%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3%20%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86/" rel="">تطوير ووردبريس للمبتدئين</a>. في هذه المقالة تعلّمنا طريقة إنشاء إضافة بسيطة نتمنّى أنها خلقت داخلك شعورًا بالرّضى كونك تمكّنت من برمجة أوّل إضافة لك.<br>
	فقط التجربة والإصرار من سيجعلان تطوير الووردبريس أسهل بالنسبة إليك وسترتقي من مجرّد مبتدئ غير خبير إلى مستوى مطوّر.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://premium.wpmudev.org/blog/wordpress-development-beginners-building-plugins/" rel="external nofollow">WordPress Development for Beginners: Building Plugins</a> لصاحبه Daniel Pataki
</p>
]]></description><guid isPermaLink="false">608</guid><pubDate>Sun, 28 Jan 2018 14:02:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x646;&#x634;&#x623; &#x642;&#x627;&#x626;&#x645;&#x629; &#x62A;&#x646;&#x642;&#x644; &#x645;&#x62A;&#x62C;&#x627;&#x648;&#x628;&#x629; &#x645;&#x639; &#x62A;&#x623;&#x62B;&#x64A;&#x631;&#x627;&#x62A; &#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%A3-%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%AA%D9%86%D9%82%D9%84-%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8%D8%A9-%D9%85%D8%B9-%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r607/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/5a6884e1476cc_26-2(2).png.20d3ff009f0b368b9e36c015b6ffdd3f.png" /></p>

<p>
	من المؤكد أنك قمت بتصفح الإنترنت من هاتف محمول، ستلاحظ في كثير من المواقع زر فتح قائمة التنقل الموجود في أعلى الموقع الذي بمجرد أن تضغط عليه يقوم بفتح قائمة تنقل الموقع.<br>
	إضافة هذا الزر إلى موقع ووردبريس الخاص بك سوف تحسن تجربة المستخدم بشكل كبير للمستخدمين الذين يزورون الموقع من أجهزة الهاتف المحمول أو الأجهزة اللوحية.<br>
	صحيح بأنه يمكنك استعمال إضافة ووردبريس جاهزة للقيام بهذه المهمة أو تنصيب قالب يحوي هذه الميزة ولكن ماذا لو كنت تستعمل قالب خاص بك وتريد إضافة هذه الميزة بنفسك؟<br>
	في هذه المقالة سوف أريك كيف تقوم بعمل هذا بمساعدة ووردبريس وبعض تعليمات css وjavascript وتحويل القائمة إلى الشكل المطلوب.
</p>

<h2 id="ماذا-ستحتاج">
	ماذا ستحتاج
</h2>

<p>
	لتتابع مع هذا المقال، ستحتاج إلى:
</p>

<ul>
<li>
		موقع ووردبريس على حاسوبك الذي يحتوي قائمة.
	</li>
	<li>
		قالب ابن للقالب الذي تعمل عليه من أجل أن تبقى تعديلاتك في مكانها عندما يتم تحديث هذا القالب من الإنترنت.
	</li>
</ul>
<p>
	سأقوم بتنفيذ هذه التعليمات على موقعي الخاص، الذي يستهدف قائمة التنقل الرئيسية والتي في موقعي الخاص تملك اسم صنف css وهو menu.main ، إذا كان اسم هذا الصنف مختلفًا في موقعك فسوف تقوم بتطبيق التعليمات على اسم الصنف الخاص بقائمتك.
</p>

<h2 id="القائمة-الحالية">
	القائمة الحالية
</h2>

<p>
	قائمتي تبدو على أجهزة الحاسب بهذا الشكل:
</p>

<p style="text-align: center;">
	<img alt="img-1 (1).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26665" data-unique="glwqfjyy2" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a687fe588e56_img-1(1).png.299a04cdb8c9dbc8018260fe1a26c930.png"></p>

<p>
	لكن على شاشة الهاتف ليست جميلة:
</p>

<p style="text-align: center;">
	<img alt="img-2 (1).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26666" data-unique="zgouhtssr" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a687fe6ade4e_img-2(1).png.549e8e94a7b7df99125f6df056c41e86.png"></p>

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

<h2 id="إضافة-زر-القائمة">
	إضافة زر القائمة
</h2>

<p>
	الخطوة الأولى هي إضافة أيقونة زر القائمة. سوف نقوم بذلك في ملف header.php في قالبك أضف رابط تحت قائمة التنقل الرئيسية ها هو الخاص بي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_103_7" style="">
<span class="pun">&lt;?</span><span class="pln">php wp_nav_menu</span><span class="pun">(</span><span class="pln"> array</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">'main-nav'</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">'primary'</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;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"toggle-nav"</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></pre>

<p>
	هذا الرابط سيقوم بعمل زر الذي يقوم بفتح وإغلاق زر القائمة وله اسم الصنف togglenav وبداخله الأيقونة وهي في هذه الحالة رمز html.<br>
	هذا كل ما يتطلب إضافته إلى ملف header.php إذا قمت بإعادة تحميل صفحتك سترى بأن زر القائمة قد ظهر على الشاشة:
</p>

<p style="text-align: center;">
	<img alt="img-3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26667" data-unique="9vbdmd76b" src="https://academy.hsoub.com/uploads/monthly_2018_01/img-3.png.7ee531821addadf638113132c6f1ec5e.png"></p>

<h2 id="إخفاء-زر-القائمة-على-الشاشات-الكبيرة">
	إخفاء زر القائمة على الشاشات الكبيرة
</h2>

<p>
	لنبدأ مع شاشات الحاسب ونضيف هذه التعليمات، لكن لا تنسى وضع هذه التعليمات ضمن media query المناسبة لعرض الشاشة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_103_9" style="">
<span class="pun">.</span><span class="pln">toggle</span><span class="pun">-</span><span class="pln">nav </span><span class="pun">{</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> none </span><span class="pun">!</span><span class="pln">important</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	هذا يجعل الرابط الذي يحوي الأيقونة بداخله يختفي. لقد أضفت كلمة <code>important!</code> حتى تبقى هذه التعليمة هي الأقوى و لا يتم الكتابة عليها من قبل التعليمات الآخرى.
</p>

<p style="text-align: center;">
	<img alt="img-4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26668" data-unique="arbhc1v7o" src="https://academy.hsoub.com/uploads/monthly_2018_01/img-4.png.42be19159d16a8571e89913c5c4e0bce.png"></p>

<p>
	لقد اختفى. سوف نقوم بإخفائه أيضًا في الشاشات الأصغر من ذلك و لكن سنأتي لهذا لاحقًا.
</p>

<h2 id="إضافة-تنسيقات-css-لزر-القائمة">
	إضافة تنسيقات css لزر القائمة
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_103_11" style="">
<span class="lit">@media</span><span class="pln"> screen </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">480px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
 </span><span class="pun">}</span></pre>

<p>
	لقد استهدفت الشاشات التي يبلغ أكبر عرض لها 480px ولكن يمكنك اختيار الأبعاد المناسبة لقائمتك.<br>
	الآن لنقم بإضافة بعض تعليمات css في media query أولًا سنقوم بإظهار الأيقونة مجددًا و نقوم بوضع تنسيقات لها لتبدو أفضل:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_103_13" style="">
<span class="pun">.</span><span class="pln">toggle</span><span class="pun">-</span><span class="pln">nav </span><span class="pun">{</span><span class="pln">
    padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
    margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">inline</span><span class="pun">-</span><span class="pln">block </span><span class="pun">!</span><span class="pln">important</span><span class="pun">;</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#8D7F68;</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#fff;</span><span class="pln">
    transition</span><span class="pun">:</span><span class="pln"> color linear </span><span class="lit">0.15s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">toggle</span><span class="pun">-</span><span class="pln">nav</span><span class="pun">:</span><span class="pln">hover</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">toggle</span><span class="pun">-</span><span class="pln">nav</span><span class="pun">.</span><span class="pln">active </span><span class="pun">{</span><span class="pln">
    text</span><span class="pun">-</span><span class="pln">decoration</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#8D7F68;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span></pre>

<p>
	الأن لنقم بتنسيق القائمة نفسها و إضافة هذه التعليمات في نفس media query :
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_103_15" style="">
<span class="pun">.</span><span class="pln">menu</span><span class="pun">.</span><span class="pln">main </span><span class="pun">{</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">inline</span><span class="pun">-</span><span class="pln">block</span><span class="pun">;</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> relative</span><span class="pun">;</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#fff;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">menu</span><span class="pun">.</span><span class="pln">main ul </span><span class="pun">{</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
	position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">80</span><span class="pun">%;</span><span class="pln">
    left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0px</span><span class="pun">;</span><span class="pln">
    padding</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#fff;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">menu</span><span class="pun">.</span><span class="pln">main li </span><span class="pun">{</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	والآن الخطوة الأخيرة هي إضافة javascript المسؤولة عن إظهار القائمة عندما يضغط المستخدم على زر الأيقونة.
</p>

<h2 id="إضافة-سكربت-javascript">
	إضافة سكربت javascript
</h2>

<p>
	هذه الخطوة تتألف من خطوتين استدعاء السكربت وإضافة التعليمات له. لنقم أولًا باستدعائه.<br>
	في قالبك أضف مجلدًا جديدًا يسمى scirpts وفي داخله ملف فارغ باسم burger-menu-script.js.<br>
	الآن افتح ملف functions.php في قالبك وأضف التالي إليه:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_6897_7" style="">
<span class="kwd">function</span><span class="pln"> wpmu_burger_menu_scripts</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">'burger-menu-script'</span><span class="pun">,</span><span class="pln"> get_stylesheet_directory_uri</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/scripts/burger-menu.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">
 
</span><span class="pun">}</span><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">'wpmu_burger_menu_scripts'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="com">/*
الآن قمنا باستدعاء الملف بشكل صحيح وسنضيف التعليمات البرمجية له، افتح ملف وأضف التالي
*/</span><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">
    jQuery</span><span class="pun">(</span><span class="str">'.toggle-nav'</span><span class="pun">).</span><span class="pln">click</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        jQuery</span><span class="pun">(</span><span class="str">'.menu.main ul'</span><span class="pun">).</span><span class="pln">slideToggle</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
 
        e</span><span class="pun">.</span><span class="pln">preventDefault</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">});</span><span class="pln">
    
</span><span class="pun">});</span></pre>

<p>
	هذه التعليمات استهدفت العنصر الذي له اسم الصنف toggle-nav. و هو في حالتنا الزر و الذي سوف يتم تنفيذ التعليمات عليه عند الضغط عليه من قبل المستخدم و ستعمل دالة slideToggle الخاصة بمكتبة jquery لإخفاء زر القائمة و إظهاره عند الضغط عليه من قبل المستخدم.<br>
	والآن لنرى النتيجة:
</p>

<p style="text-align: center;">
	<img alt="img-5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26669" data-unique="fwo15nw4z" src="https://academy.hsoub.com/uploads/monthly_2018_01/img-5.png.17dab47a0c625c12faa11e677d58af4f.png"></p>

<p>
	وعندما أضغط على الأيقونة تظهر القائمة:
</p>

<p style="text-align: center;">
	<img alt="img-6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26670" data-unique="x7bqvx2wo" src="https://academy.hsoub.com/uploads/monthly_2018_01/img-6.png.2a5df0e93c72b3de7269adf678a6d45c.png"></p>

<p>
	وهذا فيديو يوضح كيف تجري العملية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26671" href="https://academy.hsoub.com/uploads/monthly_2018_01/img-7.gif.a327aa366c93dda26503f7db0ac34cf5.gif" rel=""><img alt="img-7.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="26671" data-unique="0dsv4q83t" src="https://academy.hsoub.com/uploads/monthly_2018_01/img-7.thumb.gif.aa2aeadabafb8d0007ecfdf8c83631be.gif"></a>
</p>

<h2 id="استخدام-زر-القائمة-سيحسن-تجربة-المستخدم-على-جهاز-الهاتف-المحمول">
	استخدام زر القائمة سيحسن تجربة المستخدم على جهاز الهاتف المحمول
</h2>

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

<p>
	 
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://premium.wpmudev.org/blog/create-custom-animated-burger-menu/" rel="external nofollow">How to Create a Custom Animated Burger Menu for WordPress</a> لصاحبته Rachel McCollin
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="https://www.freepik.com/free-vector/dotted-background-with-hands-using-a-mobile-phone_1072215.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">607</guid><pubDate>Fri, 26 Jan 2018 14:04:00 +0000</pubDate></item><item><title>&#x62A;&#x637;&#x648;&#x64A;&#x631; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x644;&#x644;&#x645;&#x628;&#x62A;&#x62F;&#x626;&#x64A;&#x646;: &#x628;&#x631;&#x645;&#x62C;&#x629; &#x625;&#x636;&#x627;&#x641;&#x629; &#x2013; &#x627;&#x644;&#x645;&#x639;&#x644;&#x642;&#x627;&#x62A;&#x60C; &#x627;&#x644;&#x623;&#x641;&#x639;&#x627;&#x644; &#x648;&#x627;&#x644;&#x645;&#x631;&#x634;&#x62D;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%E2%80%93-%D8%A7%D9%84%D9%85%D8%B9%D9%84%D9%82%D8%A7%D8%AA%D8%8C-%D8%A7%D9%84%D8%A3%D9%81%D8%B9%D8%A7%D9%84-%D9%88%D8%A7%D9%84%D9%85%D8%B1%D8%B4%D8%AD%D8%A7%D8%AA-r602/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/21-2.png.592b6b1cf12df5a5087faecee7189067.png" /></p>

<h2>
	هل أنت مهتّمٌ بإنشاء إضافة ووردبريس خاصّة بك من الصّفر؟
</h2>

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

<h2 id="المعلِّقات،-الأفعال-و-المرشِّحات-hooks-actions-filtres-">
	المعلِّقات، الأفعال و المرشِّحات (Hooks, Actions, Filtres )
</h2>

<p>
	قبل البدء بإنشاء إضافة خاصّة، فلنبدأ أوّلًا بإلقاء نظرةٍ مفصّلةٍ على المعلِّقات "hooks"، الأفعال "actions" والمرشِّحات "filtres". إنّها تلك العناصر التي يترّكز عليها نظام الإضافة بالكامل والتّي ستُساعدك بشكلٍ كبيرٍ لفهم ما يحدث خلف الستار حول طريقة عمل الووردبريس. لنلقِ نظرة على هذا المثال. ماذا لو أردتَ إنشاء إضافةٍ تقوم بإضافة شفرة تتبُّع تحليليّةٍ لموقعك؟ في العادة هذا النوع من البرمجيّات يتمُّ إضافته في نهاية صفحة الموقع مباشرة فوق وسمِ الإغلاق. هذه الشفرة يجب أن تبقى في ذلك المكان حتّى وإن تمّ تغيير القالب ويجب أن تعمل على أيّ موقع ووردبريس، إذًا كيف ستجعل هذه الشفرة تعمل دائمًا إن لم تكن لديك أية سلطة تحكّم مباشر على القوالب؟ تذكّر أنّه في درس <a href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D8%A8%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D9%84%D8%A8-themes-r593/" rel="">تطوير ووردبريس للمبتدئين: برمجة القوالب</a> قمت بذكر دوال <code>()wp_head</code> و <code>()wp_footer</code> و الطريقة التي يجب عليك إضافتها بها في قالبك. مثالنا هذا يبيّن بالتحديد لماذا يجب أن توضع هذه الدّوال بالطريقة المحدّدة سلفًا. دالّة <code>()wp_footer</code> يمكنها أن تقوم بتشغيل دوالٍّ أخرى محدّدة بواسطة الإضافات. إليك مثال كود يمكنك أن تستمتع بالتجريب عليه:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7811_7" style="">
<span class="pun">&lt;?</span><span class="pln">php 
</span><span class="kwd">function</span><span class="pln"> my_tracking_code</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  echo </span><span class="str">'Paste tracking code from Google Analytics here'</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
add_action</span><span class="pun">(</span><span class="pln"> </span><span class="str">'wp_footer'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'my_tracking_code'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	لنقم الآن بتفكيك الكود قطعةً قطعة. أوّلًا لقد قمت بكتابة دالّة تقوم بطبع شفرة التتبّع. هذه الدالّة غيرُ مستخدمة في أيّ مكان، هي فقط موجودة بإضافتي. بعد ذلك استخدمت دالّة <code>()add_action</code> لإخبار الووردبريس متى يجب تشغيل الدالّة. متى ما وجد ووردبريس بدالّة <code>()wp_header</code> فإنّه سيجد كلّ الدّوال المعلّقة بها بواسطة <code>()add_action</code> . عندئذٍ سيقوم الووردبريس بتشغيل هذه الدّوال واحدة بواحدة وصولًا إلى دالّتنا التي تقوم بطبع شفرة التتبّع كنتيجة. هذا هو أساس المعلِّقات "hooks" ولكنّنا سنخوض فيها بشكلٍ أعمق لاحقًا خلال هذا الدَّرس لكي تتعلّم عنهم أكثر وتكون قادرًا على استغلال قدراتهم بشكل أفضل. قبل الانتقال إلى شيء آخر أريد ان ألفت انتباهك الى شيء مهم، دالة <code>()wp_footer</code> الموجودة في تذييل القالب ليست معلِّقا "hook" بل هي في الحقيقة مجرّد دالّة تحتوي على معلِّق في مكان ما بداخلها. للنداء على معلِّق "hook" نستخدم (’do_action(’wp_footer، لكنّ هذا لم يكن مهمًّا في المثال الأوّل. على كلٍّ ستفهم أكثر عن هذا قريبًا!
</p>

<h2 id="المصطلحات">
	المصطلحات
</h2>

<p>
	الآن وبعد أن أخذت لمحةً عمَّا سنتحدث عنه، دعني أشرح لك بطريقةٍ مرتّبةٍ المصطلحات التي ستلتقي بها طيلة هذا الدّرس. المعلِّقات "hooks" هي جزء من <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> إضافات الووردبريس. الأفعال والمرشِّحات "Actions and Filtres" عبارة عن نوع مختلف من المعلِّقات. الأفعال "actions" تسمح لك بإضافة وظائف، أنت في الأساس ستقوم بتحديد دالّة تشتغل في كلّ مرّة يقوم ووردبريس بمعالجة المعلِّق "hook" . المرشِّح "filter" يعمل بشكل مماثل و لكنّه عوض أن يضيف دوالًّا جديدة يقوم بتعديل الدوّال الموجودة مسبقًا بالووردبريس. مثلًا ووردبريس يحتوي على معلِّق يحدّد طول المقتطف إلى 55 كلمةٍ، يمكنك تعديل ذلك باستخدام المرشِّح لجعل عدد كلمات المقتطف أيَّ رقم ترغب به.
</p>

<h2 id="كلًّ-شيءٍ-عن-الأفعال">
	كلًّ شيءٍ عن الأفعال:
</h2>

<p>
	الآن وبعد أن صِرنا نعرف القواعد، فلنلقِ نظرةً مفصّلةً على دالّة <code>()add_action</code> لفهمها بشكلٍ أفضل. هذه الدّالة تأخذ أربعة معاملات هم:
</p>

<ul>
<li>
		اسم المعلِّق.
	</li>
	<li>
		اسم الدالّة التي نريد إضافتها للمعلِّق.
	</li>
	<li>
		الأولويّة.
	</li>
	<li>
		المعاملات المقبولة.
	</li>
</ul>
<p>
	لقد سبق وأن ألقينا نظرةً على أوَّل مُعاملين اللّذان هما في الحقيقة المُعاملان الوحيدان الاجباريّان بحيث يقومان بتحديد الدّالة المراد إضافتها والمكان المراد تشغيلها به. المُعامل الثالث يقوم بتحديد ترتيب الدوّال التي يتمّ تشغيلها. فائدة هذا المُعامل تظهر عندما تريد إضافة عدّة دوالٍّ إلى نفس المعلِّق. يمكنك مثلًا إضافة عدَّة شفرات تتبُّعٍ لموقعك وباستخدام مُعامل الأولوية يمكنك التحكُّم بأيّ دالّةٍ سيتمُّ تشغيلها أوّلًا. المُعامل الرّابع يخبر الووردبريس عدَد المعاملات التي تقبلها الدالّة المراد تعليقها. يجب عليك إلقاء نظرة في <a href="https://codex.wordpress.org/Plugin_API" rel="external nofollow">دليل الووردبريس</a> لِمعرفة إن كان يتوّجب عليك وضع قيمة هنا لأنّ لكلِّ معلِّقِ خصائصه. بعض الدّوال قد تأخذ أكثر من معاملٍ، في هذه الحالة سيكون عليك أنّ تحدّد ذلك هنا.
</p>

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

<h2 id="مثال-عن-فعل">
	مثال عن فعل
</h2>

<p>
	ووردبريس لا يوفّر الأفعال للقوالب فقط ولكن أيضًا لواجهة المدير إضافةً إلى أفعال خاصّة بالمستخدمين. معلِّق <code>publish_post</code> يتم تشغيله في كلِّ مرّةٍ يتم نشر مقال ما ليسمح لك بالقيام بشيءٍ ما في تلك المرحلة. الحاجة للمُعاملات تصبحُ ظاهرةً هنا. إذا قمتُ بإضافة دالّةٍ لهذا المعلِّق فكيف لي أن أعرف أيَّ مقالٍ تمَّ نشرهُ وماذا كانت تفاصيلهُ؟ عند قراءة <a href="https://codex.wordpress.org/Plugin_API/Action_Reference/publish_post" rel="external nofollow">دليل استخدام المعلِّقات</a> يُمكنك أن ترى أنَّ الدالّة تحتوي على معاملين: مُعامِل معرِّف المقال ومُعامِل بيانات المقال. مثلًا لِنقم بإرسال بريدٍ إلكترونيٍّ لكاتب المقال عندما يُنشر مقاله:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7811_7" style="">
<code>&lt;?php 
function our_author_notification( $id, $post ) {
    $author = $post-&gt;post_author;
    $name = get_the_author_meta( 'display_name', $author );
    $email = get_the_author_meta( 'user_email', $author );
    
    $link = get_permalink( $id );
    
    $message = 'Hello ' . $name . ", \n\n" . "Your artcile &lt;a href='" . $link . "'&gt;" . $post-&gt;post_title . "&lt;/a&gt; has been published.";
    wp_mail( $email, 'One of your posts has been published', $message );
    
}
add_action( 'publish_post', 'our_author_notification', 10, 2 );
</code></pre>

<h2 id="كلًّ-شيءٍ-عن-المرشِّحات">
	كلًّ شيءٍ عن المرشِّحات:
</h2>

<p>
	كما سبق وأن ذكرته سابقًا، المرشِّحات تعمل بشكلٍ مماثلٍ للأفعال ولكنّها تقوم بتعديل البيانات لذا ستجد نفسك تقوم بإرجاع نتائج داخل دوالّك المعلّقة. لإضافة مرشِّح نستخدم الدالّةَ <code>()add_filter</code> التي ستستخدم نفس معاملات الدالّة <code>()add_action</code>.
</p>

<h3 id="مثال-عن-مرشِّح">
	مثال عن مرشِّح:
</h3>

<p>
	أحسن مثالٍ للبدء به سيكون تعديل كلمة “قراءة المزيد” الموجودة بِنهاية المقتطف، في الوضع الافتراضي ستجدها بهذا الشَّكل "[…]". لتعديلها يمكنك القيام بشيء مثل هذا:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7811_7" style="">
<code>&lt;?php 
function our_excerpt_more( $more ) {
    return '... هناك المزيد';
}
add_filter( 'excerpt_more', 'our_excerpt_more' );
</code></pre>

<p>
	لاحظ أنّني لم أحدّد مُعامل الأولويّة ولا مُعامل عدد المُعاملات المقبولة. هذا سيجعل الأولويّة 10 وعددُ المُعاملات المقبولة 1. هنا أنا لا أستخدم المعامل المُمرَّر في الدالة <code>more$</code> إطلاقًا، أنا فقط أقوم بإرجاع نص خطّيٍ. يمكنك استخدام نفس الطريقة لتضمين إعلانٍ قبل الفقرة الأولى من مقالك. انظر الى المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7811_7" style="">
<code>function in_content_ad( $content ) {
  $ad = '&lt;div class="in-content-ad"&gt;&lt;img src="https://placeholdit.imgix.net/~text?txtsize=33&amp;txt=Advertisement&amp;w=250&amp;h=250"&gt;&lt;/div&gt;';
  return $ad . $content;
}
add_filter( 'the_content', 'in_content_ad' );
</code></pre>

<p>
	مع قليل من الـ CSS لتعويم الإعلان نحو اليمين، يُمكنك الحصول على صندوقِ إعلاناتٍ قياسيٍّ داخل محتوى مقالك خلال ثوانٍ معدودة.
</p>

<h2 id="تعريف-المعلِّقات">
	تعريف المعلِّقات:
</h2>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7811_7" style="">
<code>&lt;?php 
$products = get_products( 10 );
show_products();
</code></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7811_7" style="">
<code>&lt;?php 
$product_count = apply_filters( 'product_count', 10 );
$products = get_products( $product_count );
show_products();
</code></pre>

<p>
	باستخدام دالّة <code>()apply_filters</code> نحن نقوم بإخبار ووردبريس أنّ عندنا معلِّقًا اسمه <code>product_count</code> و أنّنا نريد أن نشغّل جميع الدّوال المربوطة به. في أيّة إضافة أخرى، يمكن للمطوّر أن يغيّر قيمة عدد المنتجات الظاهرة إلى ثلاثةٍ مثلًا باستخدام الطريقة التالية:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7811_7" style="">
<code>&lt;?php 
add_filter( 'product_count', 'carousel_product_count' );
function carousel_product_count( $count ) {
  return 3;
}
</code></pre>

<p>
	سنتابع في الدرس القادم أساسيات إنشاء الإضافة وكيفية إضافة خصائص القالب للإضافات…
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://premium.wpmudev.org/blog/wordpress-development-beginners-building-plugins/" rel="external nofollow">WordPress Development for Beginners: Building Plugins</a> لصاحبه Daniel Pataki
</p>
]]></description><guid isPermaLink="false">602</guid><pubDate>Sun, 21 Jan 2018 12:03:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62D;&#x648;&#x651;&#x644; &#x642;&#x627;&#x644;&#x628; HTML &#x633;&#x627;&#x643;&#x646; &#x625;&#x644;&#x649; &#x642;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x645;&#x62A;&#x62C;&#x627;&#x648;&#x628;: &#x645;&#x644;&#x641;&#x627;&#x62A; &#x62D;&#x648;&#x644; &#x627;&#x644;&#x645;&#x648;&#x642;&#x639; &#x648;&#x627;&#x644;&#x627;&#x62A;&#x635;&#x627;&#x644; &#x648;&#x627;&#x644;&#x628;&#x62D;&#x62B; &#x648;&#x627;&#x644;&#x62A;&#x639;&#x644;&#x64A;&#x642;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%AD%D9%88%D9%91%D9%84-%D9%82%D8%A7%D9%84%D8%A8-html-%D8%B3%D8%A7%D9%83%D9%86-%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-%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%AD%D9%88%D9%84-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D9%88%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D9%88%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-%D9%88%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%8A%D9%82%D8%A7%D8%AA-r601/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/19-2.png.9dec5720a59e468298ce9d5d5fd1593b.png" /></p>

<p>
	تابعنا في <a href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%AD%D9%88%D9%91%D9%90%D9%84-%D9%82%D8%A7%D9%84%D8%A8-html-%D8%B3%D8%A7%D9%83%D9%90%D9%86-%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-%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D9%85%D9%84%D9%81-index-%D8%8C-single-%D9%88-page-r596/" rel="">الدرس السابق</a> العمل على ملفات <code>index</code> و <code>single.php</code> و <code>page.php</code> وسننهي في هذا الدرس الأخير في هذه السلسلة عملية تحويل القالب.
</p>

<h3 id="الخطوة-2.9--العملُ-مع-ملفِّ-page-about.php">
	الخطوة 2.9- العملُ مع ملفِّ <code>page-about.php</code>
</h3>

<p>
	في هذا الدّرس سنقوم بإنشاء صفحة تعريفيّةٍ للموقع. ابدأ بإنشاء ملفّ <code>page-about.php</code>. بما أنّها صفحة تعريفيّة فلن يحتوي ملفّها إلَّا على كود HTML بالإضافة إلى كلٍّ من رأس، تذييل والقائمة الجانبيّة للقالب. أضف تعليقًا في بداية الملفّ لجعل ووردبريس يعرف أنّه يمثِّل صفحة نموذج. انسخ الكود التّالي داخل ملفِّ <code>page-about.php</code>.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<span class="pun">&lt;?</span><span class="pln">php </span><span class="com">/* Template Name: About Page */</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
</span><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="com">&lt;!-- BLOG AREA --&gt;</span><span class="pln">
</span><span class="tag">&lt;section&gt;</span><span class="pln">
</span><span class="tag">&lt;hr</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">&amp;"no-margin&amp;"</span><span class="pln"> </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">&amp;"blog-container section-content&amp;"</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">&amp;"container&amp;"</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">&amp;"row&amp;"</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">&amp;"col-md-8&amp;"</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">&amp;"box-layer custom-padding&amp;"</span><span class="tag">&gt;</span><span class="pln">
&lt;img src=&amp;"</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">print</span><span class="pln"> IMG</span><span class="pun">;</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">/my_image.png&amp;" class=&amp;"opacity-hover img-responsive center&amp;" alt=&amp;"my image&amp;" /&gt;
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">&amp;"align-center&amp;"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;h3&gt;</span><span class="pln">About Me</span><span class="tag">&lt;/h3&gt;</span><span class="pln">
I am a web designer and a front web developer with over 2 years of experience in the industry. Have a passion for designing detailed, creative and modern websites  graphics. I spend most of my time practically every day, experimenting with HTML, CSS and WordPress.
</span><span class="tag">&lt;hr/&gt;</span><span class="pln">
</span><span class="tag">&lt;h3</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">&amp;"blue&amp;"</span><span class="tag">&gt;</span><span class="pln">Feel free to contact me for some Web Projects</span><span class="tag">&lt;/h3&gt;</span><span class="pln">
</span><span class="tag">&lt;i</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">&amp;"fa fa-envelope&amp;"</span><span class="tag">&gt;&lt;/i&gt;</span><span class="pln">  Email: [your email] 
</span><span class="tag">&lt;i</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">&amp;"fa fa-twitter&amp;"</span><span class="tag">&gt;&lt;/i&gt;</span><span class="pln">  Twitter: [your twitter username] 
</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="com">&lt;!-- END RELATED ARTICLE AREA --&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="com">&lt;!-- SIDEBAR AREA --&gt;</span><span class="pln">
</span><span class="tag">&lt;aside&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">&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"</span><span class="tag">&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;/aside&gt;</span><span class="pln">
</span><span class="tag">&lt;/section&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>

<h3 id="الخطوة-2.10--العملُ-مع-ملفِّ-page-contact.php">
	الخطوة 2.10- العملُ مع ملفِّ <code>page-contact.php</code>
</h3>

<p>
	يمكنُ للعديد من إضافات ووردبريس إضافة استمارة تواصلٍ لمدوّنتك، ولكنّك تستطيع القيام بذلك دون الحاجة لإضافة. قم بإنشاء ملفِّ <code>page-contact.php</code> ثمّ أضف إلية بعض أكواد PHP و JavaScript. الآن أنشئ استمارةً بسيطةً فقط بلصق الكود التّالي داخل ملفّك.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1511_8" style="">
<span class="pun">&lt;?</span><span class="pln">php </span><span class="com">/* Template Name: Page Contact */</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'submitted'</span><span class="pun">]))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'contactName'</span><span class="pun">])</span><span class="pln"> </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">
$nameError </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Please enter your name.'</span><span class="pun">;</span><span class="pln">
$hasError </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$name </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'contactName'</span><span class="pun">]);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'email'</span><span class="pun">])</span><span class="pln"> </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">
$emailError </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Please enter your email address.'</span><span class="pun">;</span><span class="pln">
$hasError </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">preg_match</span><span class="pun">(&amp;</span><span class="str">"/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+.[a-z]{2,4}$/i&amp;"</span><span class="pun">,</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'email'</span><span class="pun">])))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$emailError </span><span class="pun">=</span><span class="pln"> </span><span class="str">'You entered an invalid email address.'</span><span class="pun">;</span><span class="pln">
$hasError </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$email </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'email'</span><span class="pun">]);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'subject'</span><span class="pun">])</span><span class="pln"> </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">
$subjectError </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Please enter a subject.'</span><span class="pun">;</span><span class="pln">
$hasError </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$subject </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'subject'</span><span class="pun">]);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'comments'</span><span class="pun">])</span><span class="pln"> </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">
$commentError </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Please enter a message.'</span><span class="pun">;</span><span class="pln">
$hasError </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">                                
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">function_exists</span><span class="pun">(</span><span class="str">'stripslashes'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$comments </span><span class="pun">=</span><span class="pln"> stripslashes</span><span class="pun">(</span><span class="pln">trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'comments'</span><span class="pun">]));</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$comments </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'comments'</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="kwd">if</span><span class="pun">(!</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$hasError</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
$emailTo </span><span class="pun">=</span><span class="pln"> get_option</span><span class="pun">(</span><span class="str">'tz_email'</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">isset</span><span class="pun">(</span><span class="pln">$emailTo</span><span class="pun">)</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$emailTo </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">
$emailTo </span><span class="pun">=</span><span class="pln"> get_option</span><span class="pun">(</span><span class="str">'admin_email'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
$subject </span><span class="pun">=</span><span class="pln"> </span><span class="str">'[PHP Snippets] From '</span><span class="pun">.</span><span class="pln">$name</span><span class="pun">;</span><span class="pln">
$body </span><span class="pun">=</span><span class="pln"> </span><span class="pun">&amp;</span><span class="str">"Name: $name nnEmail: $email nnComments: $comments&amp;"</span><span class="pun">;</span><span class="pln">
$headers </span><span class="pun">=</span><span class="pln"> </span><span class="str">'From: '</span><span class="pun">.</span><span class="pln">$name</span><span class="pun">.</span><span class="str">' &lt;'</span><span class="pun">.</span><span class="pln">$emailTo</span><span class="pun">.</span><span class="str">'&gt;'</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">&amp;</span><span class="str">"rn&amp;"</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'Reply-To: '</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $email</span><span class="pun">;</span><span class="pln">
wp_mail</span><span class="pun">(</span><span class="pln">$emailTo</span><span class="pun">,</span><span class="pln"> $subject</span><span class="pun">,</span><span class="pln"> $body</span><span class="pun">,</span><span class="pln"> $headers</span><span class="pun">);</span><span class="pln">
$emailSent </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</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></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<code>&lt;?php get_header(); ?&gt;
&lt;section&gt;
&lt;hr class=&amp;"no-margin&amp;" /&gt;
&lt;div class=&amp;"blog-container section-content&amp;"&gt;
&lt;div class=&amp;"container&amp;"&gt;
&lt;div class=&amp;"row&amp;"&gt;
&lt;div class=&amp;"col-md-8&amp;"&gt;
&lt;div class=&amp;"box-layer custom-padding&amp;"&gt;
&lt;div id=&amp;"container&amp;"&gt;
&lt;div id=&amp;"content&amp;"&gt;
&lt;div class=&amp;"align-center&amp;"&gt;
&lt;h3&gt;We want to hear from you!&lt;/h3&gt;
If you are seeking to contact us, please fill up the form below. If you want to advertise or be partner with us just inform us on the message box below. 
Thank you so much for your support!
We really appreciate!
&lt;div class=&amp;"entry-content&amp;"&gt;
&lt;?php if(isset($emailSent)  $emailSent == true) { ?&gt;
&lt;div class=&amp;"thanks&amp;"&gt;
Thanks, your email was sent successfully.
&lt;/div&gt;
&lt;?php } else { ?&gt;
&lt;?php the_content(); ?&gt;
&lt;?php if(isset($hasError) || isset($captchaError)) { ?&gt;
Sorry, an error occured.
&lt;?php } ?&gt;
&lt;form action=&amp;"&lt;?php the_permalink(); ?&gt;&amp;" id=&amp;"contactForm&amp;" method=&amp;"post&amp;" class=&amp;"general-form&amp;"&gt;
&lt;div class=&amp;"contactform&amp;"&gt;
&lt;input type=&amp;"text&amp;" name=&amp;"contactName&amp;" class=&amp;"form-control&amp;" id=&amp;"contactName&amp;" placeholder=&amp;"Your Name..&amp;" value=&amp;"&lt;?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?&gt;&amp;" class=&amp;"required requiredField&amp;" /&gt;
&lt;?php if($nameError != '') { ?&gt;
&lt;span class=&amp;"error&amp;"&gt;&lt;?=$nameError;?&gt;&lt;/span&gt;
&lt;?php } ?&gt;
&lt;input type=&amp;"text&amp;" name=&amp;"email&amp;" id=&amp;"email&amp;" class=&amp;"form-control&amp;" placeholder=&amp;"Your Email..&amp;" value=&amp;"&lt;?php if(isset($_POST['email'])) echo $_POST['email'];?&gt;&amp;" class=&amp;"required requiredField email&amp;" /&gt;
&lt;?php if($emailError != '') { ?&gt;
&lt;span class=&amp;"error&amp;"&gt;&lt;?=$emailError;?&gt;&lt;/span&gt;
&lt;?php } ?&gt;
&lt;input type=&amp;"text&amp;" name=&amp;"subject&amp;" id=&amp;"subject&amp;" class=&amp;"form-control&amp;" placeholder=&amp;"Your Subject..&amp;" value=&amp;"&lt;?php if(isset($_POST['subject'])) echo $_POST['subject'];?&gt;&amp;" class=&amp;"required requiredField subject&amp;" /&gt;
&lt;?php if($subjectError != '') { ?&gt;
&lt;span class=&amp;"error&amp;"&gt;&lt;?=$subjectError;?&gt;&lt;/span&gt;
&lt;?php } ?&gt;
&lt;textarea name=&amp;"comments&amp;" id=&amp;"commentsText&amp;" class=&amp;"form-control&amp;" placeholder=&amp;"Your Message&amp;" rows=&amp;"4&amp;" cols=&amp;"100&amp;" class=&amp;"required requiredField&amp;"&gt;&lt;?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?&gt;&lt;/textarea&gt;
&lt;?php if($commentError != '') { ?&gt;
&lt;span class=&amp;"error&amp;"&gt;&lt;?=$commentError;?&gt;&lt;/span&gt;
&lt;?php } ?&gt;
&lt;input type=&amp;"submit&amp;" class=&amp;"btn btn-primary no-border&amp;" value=&amp;"Send Message&amp;"&gt;&lt;/input&gt;
&lt;/div&gt;
&lt;input type=&amp;"hidden&amp;" name=&amp;"submitted&amp;" id=&amp;"submitted&amp;" value=&amp;"true&amp;" /&gt;
&lt;/form&gt;
&lt;?php } ?&gt;
&lt;/div&gt;
&lt;!-- .entry-content --&gt;
&lt;/div&gt;
&lt;!-- .post --&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- RELATED ARTICLE AREA --&gt;
&lt;/div&gt;
&lt;aside&gt;
&lt;!-- SIDEBAR AREA --&gt;
&lt;div class=&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;/div&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>

<p>
	هذه الاستمارة تعمل بشكلٍ جيّد الآن ولكن يُمكننا إدخال تحسيناتٍ إضافيّة عليها عن طريق إضافة التحقُّقات في جهة العميل، للقيامِ بهذا سنستخدم <a href="https://jqueryvalidation.org/" rel="external nofollow">إضافة jQuery للتحقّق والمُصادقة</a> .<br>
	أوّلًا قُم بتحميل الإضافة ثمّ ضعها في مجلّد js داخل مجلّد قالبنا ووردبريس. بعد ذلك أضف الكود التّالي في ملفّ <code>header.php</code> قبل وسمِ إغلاقِ head.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<code>&lt;?php 
if( is_page('contact') ){ ?&gt;
&lt;script type=&amp;"text/javascript&amp;" src=&amp;"&lt;?php bloginfo('template_directory'); ?&gt;/js/jquery.validate.min.js&amp;"&gt;&lt;/script&gt;
&lt;script type=&amp;"text/javascript&amp;" src=&amp;"&lt;?php bloginfo('template_directory'); ?&gt;/js/verif.js&amp;"&gt;&lt;/script&gt;
&lt;?php }
?&gt;
</code></pre>

<p>
	الآن أنشئ ملفّ <code>verif.js</code> وضع داخله كود jQuery لتفعيل التحقّق، قم بنسخ الكود التّالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<code>$(document).ready(function(){
$(&amp;"#contactForm&amp;").validate();
});
</code></pre>

<p>
	جميل! تمّ إنشاء استمارة التواصل. هذه الاستمارة ستقوم بالتحقّق فقط بالتأكّد من أنّ الحقول التي تمتلك كلاس "مطلوب-required" قد تمّ ملئها بشكلٍ صحيحٍ.
</p>

<h3 id="الخطوة-2.11--تعيين-نماذج-الصّفحات-للصفحة">
	الخطوة 2.11- تعيين نماذج الصّفحات للصفحة
</h3>

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

<p style="text-align: center;">
	<img alt="pages1.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26530" data-unique="dc79mjukf" src="https://academy.hsoub.com/uploads/monthly_2018_01/pages1.jpg.f356a9cecdeb5ce28e87cd288b1cbf7f.jpg"></p>

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

<p style="text-align: center;">
	<img alt="page-attributes.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26529" data-unique="ye29hvek0" src="https://academy.hsoub.com/uploads/monthly_2018_01/page-attributes.jpg.5afe569e871dda167cac226ca8dc975f.jpg"></p>

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

<h3 id="الخطوة-2.21--العملُ-مع-ملفِّ-search.php">
	الخطوة 2.21- العملُ مع ملفِّ <code>search.php</code>
</h3>

<p>
	لقد تمَّ إعداد هيكلةِ صندوق البحثِ ولكِّنه لا يعملُ بعد، إذ سيتوجّب علينا إضافة بعضِ الدوالِّ لجعله يعمل وذلك ما سنقوم بهِ في هذا الجزءِ من الدّرس. الكود أدناه يحتوي على بعض أكواد PHP لجعلِ عمليّة البحث تُرجِع نتائج، عدا ذلك سنحصل على رسالة الخطأ " Bummer! No results found" المُضمّنة بين وَسمي H2.<br>
	أنشئ أوّلًا ملفّ <code>search.php</code> ثم أضف له الكود أدناه:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>ملاحظة</strong>: الكود أدناه يحتوي على أكواد HTML مماثلة لتلك الموجودة بملفّي <code>page.php</code> و <code>single.php</code>.
		</p>
	</div>
</blockquote>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<code>&lt;?php get_header(); ?&gt;
&lt;section&gt;
&lt;hr class=&amp;"no-margin&amp;" /&gt;
&lt;div class=&amp;"blog-container section-content&amp;"&gt;
&lt;div class=&amp;"container&amp;"&gt;
&lt;div class=&amp;"row&amp;"&gt;
&lt;div class=&amp;"col-md-8&amp;"&gt;
&lt;?php if ( have_posts() ) : ?&gt;
&lt;header class=&amp;"page-header&amp;"&gt;
&lt;h3 class=&amp;"page-title&amp;"&gt;&lt;?php printf( __( 'Search Results for: %s', '_s' ), '
&lt;h3&gt;' . get_search_query() . '&lt;/h3&gt;
' ); ?&gt;&lt;/h3&gt;
&lt;/header&gt;
&lt;!-- .page-header --&gt;
&lt;?php /* Start the Loop */ ?&gt;
&lt;?php while ( have_posts() ) : the_post(); ?&gt;
&lt;?php /*** Run the loop for the search to output the results. */ get_template_part( 'content', 'search' ); ?&gt;
&lt;?php endwhile; ?&gt;
&lt;?php else : ?&gt;
&lt;h3&gt;Bummer! No results found&lt;/h3&gt;
&lt;?php endif; ?&gt;
&lt;/div&gt;
&lt;div class=&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>

<h3 id="الخطوة-2.13--العملُ-مع-ملفِّ-content-search.php">
	الخطوة 2.13- العملُ مع ملفِّ <code>content-search.php</code>
</h3>

<p>
	ملفّ <code>search.php</code> يقوم فقط بالتحكّمِ بنتائج البحث لكنه لا يعرضها لذا سيتوجّب علينا إضافة حلقة تِكرارٍ لعرض هذه النتائج. أوّلًا قم بإنشاء ملفّ <code>content-search.php</code> داخل المجلّد الرئيسيِّ لقالبنا، ثمّ انسخ هذا الكود بداخلهِ.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<code>&lt;div id=&amp;"post-&lt;?php the_ID(); ?&gt;&amp;" &lt;?php post_class(); ?&gt;&gt;
&lt;header class=&amp;"entry-header&amp;"&gt;
&lt;?php the_title( sprintf( '
&lt;h1 class=&amp;"entry-title&amp;"&gt;&lt;a href=&amp;"%s&amp;" rel=&amp;"bookmark&amp;"&gt;', esc_url( get_permalink() ) ), '&lt;/a&gt;&lt;/h1&gt;
' ); ?&gt;
&lt;?php if ( 'post' == get_post_type() ) : ?&gt;
&lt;div class=&amp;"entry-meta&amp;"&gt;
&lt;?php endif; ?&gt;
&lt;/header&gt;
By &lt;a href=&amp;"&lt;?php the_author_posts() ?&gt;&amp;"&gt;&lt;?php the_author(); ?&gt; &lt;/a&gt; / On &lt;?php echo get_the_date('F j, Y'); ?&gt; /  &lt;?php the_category(); ?&gt; 
&lt;?php the_excerpt(); ?&gt;
&lt;/div&gt;
</code></pre>

<h3 id="الخطوة-2.14--العملُ-مع-ملفِّ-comments.php">
	الخطوة 2.14- العملُ مع ملفِّ <code>comments.php</code>
</h3>

<p>
	للتّذكير، في ملفِّ <code>single.php</code> قمنا بإضافة وسم div ذو كلاس <code>comment-section</code> يحتوي على كود PHP وقلنا حينها أنَّ هذا العنصر سيحتوي على التعليقات.<br>
	هذا كان الكود الذي أضفناه:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_9" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">&amp;"comment-section&amp;"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> comments_open</span><span class="pun">()</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="str">'0'</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> get_comments_number</span><span class="pun">()</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> comments_template</span><span class="pun">();</span><span class="pln"> endif</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>
	كما سبق وأن أشرنا إليه، هذا الكود سيقوم بالتحقّق إن كانت التعليقات متاحةً من لوحة التحكّم، إن كان الجواب "نعم" فهو سيقوم باسترجاع عدد التعليقات ومِن ثَمَّ عرضها بكلِّ بساطة. انتبه إلى أنَّ هذا الكود لن يكفي بمفردهِ لعرضِ التعليقات، سنكون بحاجةٍ لإنشاء <code>comment_template</code> باستخدام ملفِّ <code>comments.php</code>. في هذا الجزء من هذا الدّرس التعليميِّ قُم بإنشاء هذا الملفِّ في مجلّد قالبنا الرئيسيِّ ثم انسخ الكود أدناه بداخلهِ:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<code>&lt;?php /** * The template for displaying comments. * * The area of the page that contains both current comments * and the comment form. * * @package NeoBlog */ /* * If the current post is protected by a password and * the visitor has not yet entered the password we will * return early without loading the comments. */ if ( post_password_required() ) { return; } ?&gt;
&lt;div id=&amp;"comments&amp;" class=&amp;"comments-area&amp;"&gt;
&lt;?php // You can start editing here -- including this comment! ?&gt;
?php if ( have_comments() ) : ?&gt;
&lt;h3 class=&amp;"comments-title&amp;"&gt;
&lt;?php printf( _nx( 'One Comment on ldquo;%2$srdquo;', '%1$s comment on ldquo;%2$srdquo;', get_comments_number(), 'comments title', '_s' ), number_format_i18n( get_comments_number() ), '
&lt;h3&gt;' . get_the_title() . '&lt;/h3&gt;
' );
?&gt;
&lt;/h3&gt;
&lt;?php if ( get_comment_pages_count() &gt; 1  get_option( 'page_comments' ) ) : // are there comments to navigate through ?&gt;
&lt;nav id=&amp;"comment-nav-above&amp;" class=&amp;"comment-navigation&amp;" role=&amp;"navigation&amp;"&gt;
&lt;h1 class=&amp;"screen-reader-text&amp;"&gt;&lt;?php _e( 'Comment navigation', '' ); ?&gt;&lt;/h1&gt;
&lt;div class=&amp;"nav-previous&amp;"&gt;&lt;?php previous_comments_link( __( 'larr; Older Comments', '_s' ) ); ?&gt;&lt;/div&gt;
&lt;div class=&amp;"nav-next&amp;"&gt;&lt;?php next_comments_link( __( 'Newer Comments rarr;', '_s' ) ); ?&gt;&lt;/div&gt;
&lt;/nav&gt;
&lt;!-- #comment-nav-above --&gt;
&lt;?php endif; // check for comment navigation ?&gt;
&lt;ol class=&amp;"comment-list&amp;"&gt;
&lt;?php wp_list_comments( array( 'style' =&gt; 'ol',
'short_ping' =&gt; true,
));
?&gt;
&lt;/ol&gt;
&lt;!-- .comment-list --&gt;
&lt;?php if ( get_comment_pages_count() &gt; 1  get_option( 'page_comments' ) ) : // are there comments to navigate through ?&gt;
&lt;nav id=&amp;"comment-nav-below&amp;" class=&amp;"comment-navigation&amp;" role=&amp;"navigation&amp;"&gt;
&lt;h1 class=&amp;"screen-reader-text&amp;"&gt;&lt;?php _e( 'Comment navigation', '' ); ?&gt;&lt;/h1&gt;
&lt;div class=&amp;"nav-previous&amp;"&gt;&lt;?php previous_comments_link( __( 'larr; Older Comments', '_s' ) ); ?&gt;&lt;/div&gt;
&lt;div class=&amp;"nav-next&amp;"&gt;&lt;?php next_comments_link( __( 'Newer Comments rarr;', '_s' ) ); ?&gt;&lt;/div&gt;
&lt;/nav&gt;
&lt;!-- #comment-nav-below --&gt;
&lt;?php endif; // check for comment navigation ?&gt;
&lt;?php endif; // have_comments() ?&gt;
&lt;?php // If comments are closed and there are comments, let's leave a little note, shall we? if ( ! comments_open()  '0' != get_comments_number()  post_type_supports( get_post_type(), 'comments' ) ) : ?&gt;
&lt;?php _e( 'Comments are closed.', '' ); ?&gt;
&lt;?php endif; ?&gt;
&lt;?php $fields = array( 'author' =&gt; '
'.'&lt;input class=&amp;"form-control&amp;" placeholder=&amp;"Your Name..&amp;" id=&amp;"author&amp;" name=&amp;"author&amp;" type=&amp;"text&amp;" value=&amp;"' . esc_attr( $commenter['comment_author'] ) . '&amp;" size=&amp;"30&amp;"' . $aria_req . ' /&gt;
',
'email'  =&gt; '
'.'&lt;input id=&amp;"email&amp;" class=&amp;"form-control&amp;" placeholder=&amp;"Your Email..&amp;" name=&amp;"email&amp;" type=&amp;"text&amp;" value=&amp;"' . esc_attr( $commenter['comment_author_email'] ) . '&amp;" size=&amp;"30&amp;"' . $aria_req . ' /&gt;
',
'url'   =&gt; '
' . '&lt;input id=&amp;"url&amp;" class=&amp;"form-control&amp;" placeholder=&amp;"Your Website..&amp;" name=&amp;"url&amp;" type=&amp;"text&amp;" value=&amp;"' . esc_attr( $commenter['comment_author_url'] ) . '&amp;" size=&amp;"30&amp;" /&gt;
'
);
$comments_args = array(
'fields' =&gt;  $fields,
'title_reply'=&gt;'
&lt;h3&gt;'.'Leave a Comment'.'
&lt;h3&gt;',
'comment_field' =&gt; '
&lt;textarea id=&amp;"comment&amp;" class=&amp;"form-control&amp;" name=&amp;"comment&amp;" rows=&amp;"4&amp;" cols=&amp;"100&amp;" aria-required=&amp;"true&amp;" placeholder=&amp;"Write your comment here..&amp;"&gt;&lt;/textarea&gt;
',
'comment_notes_after' =&gt; '',
'id_submit' =&gt; 'submit-btn'
);
?&gt;
&lt;?php comment_form($comments_args); ?&gt;
&lt;/div&gt;
&lt;!-- #comments --&gt;
</code></pre>

<p>
	هناك العديد من الأشياء التي تحدث في هذا الملفِّ. أوّلًا، هو يقوم بالتحقّق إن لم يكن المقال يشترط كلمة سرٍّ مِن المُستخدِم، إن كانت الإجابة بـ "لا" فهو سيقوم بعرض عددِ التعليقات وعرضِ هذه التعليقات أيضًا. لاحظ أنّ هناك روابط للتنقّل بين التعليقات، كِلا الرّابطين (next) و (previous) يستخدمان الدالّتين <code>previous_comments_link</code> و <code>next_comments_link</code> على التّوالي.<br>
	أخيرًا، استخدم دالّة <code>wp_list_comments</code> لعرض التعليقات الخاصّة بمقالةٍ أو صفحةٍ ما بالاعتماد على مجموعةٍ من الإعدادات، بما فيها تلك التّي تمّ تحديدها من لوحةِ التحكّم.<br>
	بعد ذلك أضف <code>wp_enqueue_script</code> للتحقّق من أنّ التعليقات التَشعُبيّة متاحة. في حالة كان الجواب بِـ "نعم" سيتمّ إضافة زر "رد". افتح ملفّ <code>functions.php</code> وأضف إليه الكود التّالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<code>&lt;?php 
if( get_option('thread_comments') ){
wp_enqueue_script('comment-reply');
}
?&gt;
</code></pre>

<h3 id="الخطوة-2.15--العملُ-مع-ملفِّ-404.php">
	الخطوة 2.15- العملُ مع ملفِّ <code>php.404</code>
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_560_7" style="">
<code>&lt;?php get_header(); ?&gt;
&lt;!-- BLOG AREA --&gt;
&lt;section&gt;
&lt;hr class=&amp;"no-margin&amp;" /&gt;
&lt;div class=&amp;"blog-container section-content&amp;"&gt;
&lt;div class=&amp;"container&amp;"&gt;
&lt;div class=&amp;"row&amp;"&gt;
&lt;div class=&amp;"col-md-8&amp;"&gt;
&lt;div class=&amp;"box-layer custom-padding&amp;"&gt;
&lt;section&gt;
&lt;h3&gt; Oh Snap! Page not found!&lt;/h3&gt;
&lt;h3&gt; It seems you're looking for something that isn't here!&lt;/h3&gt;
&lt;a href=&amp;"&lt;?php echo home_url(); ?&gt;&amp;"&gt;Click here&lt;/a&gt; to go back to homepage! 
&lt;/section&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;aside&gt;
&lt;!-- SIDEBAR AREA --&gt;
&lt;div class=&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"&gt;
&lt;?php get_sidebar(); ?&gt;                                                                                                         &lt;/div&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>

<p>
	صفحة 404 "الصّفحة المطلوبة غير موجودة" هي صفحة خطأ يتّم توليدها عن طريق الخادم لإعلام المستخدم أنّ الصفحة المطلوبة غير متوفّرةٍ.<br>
	الكود أعلاه سيعرض رسالة الخطأ التاليّة "!Oh Snap! Page not found" بمعنى "لم يتمَّ العثور على الصّفحة" إضافة إلى رابط يقود إلى رئيسيّة الموقِع حتّى نضمن بقاء الزّائر في موقعنا.<br>
	مبروك! لقد أكملنا العمل على قالبنا ووردبريس!
</p>

<h2 id="الشّكلُ-النهائيُّ-لقالبنا">
	الشّكلُ النهائيُّ لقالبنا
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26528" href="https://academy.hsoub.com/uploads/monthly_2018_01/Final_theme3.jpg.2ccc750bba19cf3b36a25b4969b501fe.jpg" rel=""><img alt="Final_theme3.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26528" data-unique="883tpcnai" src="https://academy.hsoub.com/uploads/monthly_2018_01/Final_theme3.thumb.jpg.b6ba76cd2715ee4bfd719c8762cf0fdc.jpg"></a>
</p>

<p style="text-align: center;">
	<a href="https://1stwebdesigner.com/wp-content/uploads/2014/08/neoblog_WP_THEME.zip" rel="external nofollow">تحميل القالب</a>
</p>

<h2 id="نصائح-يجب-إتِّباعها-لتذكّر-هذا-الجزء-من-الدّرس">
	نصائح يجب إتِّباعها لتذكّر هذا الجزء من الدّرس
</h2>

<ul>
<li>
		ابقَ دائمًا على إطِّلاع على دليل ووردبريس للحصول على الدوالّ، الوُسوم وأكواد PHP. هذا الأمر سيبقيك دائمًا على الطّريق الصّحيح في التّعامل مع الأكواد.
	</li>
	<li>
		تحقّق دائمًا من استخدام كودٍ مُهيكلٍ بشكلٍ جيّدٍ، خالٍ من أخطاء PHP و HTML مصادقٍ عليه. ألقِ نظرة على معايير ووردبريس.
	</li>
	<li>
		اتبع <a href="https://codex.wordpress.org/Site_Design_and_Layout" rel="external nofollow">دليل التصميم</a> لتصميم الموقع ونُسوقِه.
	</li>
	<li>
		اعمل نسخًا احتياطيّة لملفّاتك دائمًا. أنا أكرّر! دائمًا اعمل نسخًا احتياطيّة لملفّاتك لأنّه في حالة عملت تغييرات كثيرة على ملفّاتك سيمكنك دائمًا استرجاعها بسهولة.
	</li>
	<li>
		ابحث عن المساعدة. إن كنت تعملُ على قالب آخر فإن احتمال مواجهتك لمشاكل أثناء تحويلك لبعضِ الملفّات كبير جدًّا.
	</li>
</ul>
<h2 id="ماهي-تقنّيات-حلّ-الأخطاء-التي-يُمكنك-استخدامها">
	ماهي تقنّيات حلّ الأخطاء التي يُمكنك استخدامها
</h2>

<p>
	لا يوجد هناك طريقة رسميّة للتحقّق من الأخطاء لمّا تكون بصددِ تطوير قالب ما. قد يكون هناك خطأ إملائي في كتابتك لبعض أجزاء الكود أو ربّما أنّك نسيت إنشاء أحد ملفّات ووردبريس.<br>
	مع ذلك فإنّ أحسن طريقة لتصيّد الأخطاء ستكون تشغيل وضع التصحيح "Debugging mode" أو التحقّق من سجّل الأخطاء لديك.
</p>

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

<p>
	مبروك! لقد قُمتَ لتوِّك بتحويل قالب HTML و CSS إلى قالب مدّونة ووردبريس. كلّ ذلك تمَّ بسهولة، أليس كذلِك؟
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://1stwebdesigner.com/convert-html-template-wordpress/" rel="external nofollow">How to Convert a Static HTML Template into a Responsive WordPress Theme</a>
</p>
]]></description><guid isPermaLink="false">601</guid><pubDate>Fri, 19 Jan 2018 15:06:00 +0000</pubDate></item><item><title>&#x62A;&#x637;&#x648;&#x64A;&#x631; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x644;&#x644;&#x645;&#x628;&#x62A;&#x62F;&#x626;&#x64A;&#x646;: &#x627;&#x644;&#x648;&#x62F;&#x62C;&#x62A; &#x648;&#x627;&#x644;&#x642;&#x648;&#x627;&#x626;&#x645;</title><link>https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D8%A7%D9%84%D9%88%D8%AF%D8%AC%D8%AA-%D9%88%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-r598/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/14-2.png.8af7fcdca78a9a5d4bc5f62e9d6ff2cb.png" /></p>

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

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>ملاحظة:</strong> خلال هذه السلسلة يجب أن تكون لديك معرفة شاملة بلغتي HTML و CSS لأنّهما لبِناتَانِ أساسيّتان عند العمل على الووردبريس.
		</p>
	</div>
</blockquote>

<h2 id="العمل-مع-المناطق-المصغّرة">
	العمل مع المناطق المصغّرة:
</h2>

<p>
	إنّ ما يسميه الناس عادةً قوائم جانبيّة هي في الحقيقة مناطقُ مصغّرة. أحيانًا قد نقوم بعرضها في منطقة القائمة الجانبيّة ولكن هذه الحالة ليست دائمة. يمكن عرضُ الوِدجت في أيِّ مكان ترغب به ضمن موقعك، الأمر عائد إليك بالكامل كمطوِّرٍ للقالب. ربّما قد ترغب في عرض الوِدجت في تذييل القالب (الفوتر)، أو تحت المقال، أو ربّما ترغب بعرضها مخفية خلف قائمة، بالنهاية الأمر عائدٌ إليك. بداية يجب عليك أن تخبر الووردبريس أنّك ترغب بإنشاء منطقة مصغّرة، هذا الأمر يدعى <strong>تسجيل قائمة جانبيّة</strong> وعند القيام بهذا فإن واجهة المُستخدم ستظهر في صفحة المدير. خلال جزء سابق من هذه السلسلة "<a href="https://academy.hsoub.com/programming/php/wordpress/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D8%A8%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D9%84%D8%A8-themes-r593/" rel="">تطوير ووردبريس للمبتدئين: بناء القوالب Themes</a>" قمنا بإنشاء ملف <code>functions.php</code> . فلنقم الآن بإنشاء محتوًى للقالب الذي نعمل عليه حاليًّا ولنقم بإضافة عمود ثانٍ للقائمة الجانبيّة. سنقوم أوّلًا بتسجيل قائمتنا الجانبيّة في ملف <code>functions.php</code> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<span class="pun">&lt;?</span><span class="pln">php 
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">'mat_widget_areas'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> mat_widget_areas</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"> 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"> </span><span class="str">'Theme Sidebar'</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">'mat-sidebar'</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">'The main sidebar shown on the right in our awesome theme'</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;'</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;h3 class="widget-title"&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;/h3&gt;'</span><span class="pun">,</span><span class="pln">
    </span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	أهمُّ ما في الأمر الآن هو دالّة <code>()mat_widget_areas</code>. لقد استخدمنا دالّة <code>()register_sidebar</code> لإخبار ووردبريس بتفاصيل منطقتنا المصغّرة. إعدادات الاسم والتعريف سيتِمُّ إظهارها في واجهة مُستخدِم المدير، لذا حاول وصفهما جيِّدًا. كلُّ وِدجت سيتِّم تضمينها في الشفرة المُقدّمة ضِمن إعدادات الوِدجت في قبل "<code>before</code>" وبعد "<code>after</code>" . استخدم <code>%1$s</code> كنائِب عن المعرِّف <code>ID</code> و <code>%2$s</code> كنائِب عن أيَّةِ كلاسات تريد استخدامها و سيقوم ووردبريس بتوليدها بطريقةٍ أتوماتيكيَّة. بمجرّدِ حِفظك للبرمجيَّة، ستلاحظ ظهور قسمٍ فرعيٍّ خاص بالوِدجت داخل قائمة المظهر. منطقةُ الوِدجت خاصّتِنا يجب أن تظهر بهذا الشكل
</p>

<p style="text-align: center;">
	<img alt="widget-area.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26519" data-unique="1sdr3j5hc" src="https://academy.hsoub.com/uploads/monthly_2018_01/widget-area.jpg.e57058ea7bd0bf8f5e9958eb7d667f04.jpg"></p>

<p>
	جيِّدٌ حتّى الآن. أنت الآن تعرف طريقة إضافة الوِدجت إلى المناطِقِ المصغّرة ولكّنها لن تظهر بعد في أيِّ مكان كوننا لم نقم بعدُ بإضافتها إلى برمجيّة قالبنا. أنشئ ملفُّا سمِّه <code>sidebar.php</code> ثمّ أضِف هذا الكود بداخِلهِ.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<code>&lt;div id="site-sidebar"&gt;This is my sidebar&lt;/div&gt;
سيكون علينا تعديل ملفّات header و footer لكي تتوافق مع قائمتنا الجانبيّة. الهيكل الذي نريده سيكون التّالي:
&lt;body&gt;

  &lt;div id="site-header"&gt;&lt;/div&gt;
  
  &lt;div id='site-container'&gt;
    &lt;div id='site-content'&gt;&lt;/div&gt;
    &lt;div id='site-sidebar'&gt;&lt;/div&gt;
  &lt;/div&gt;

&lt;/body&gt;
</code></pre>

<p>
	لتنفيذ هذا يلزمنا فتح وسم <code>div</code> ذو المعرِّف <code>site-container#</code> في ملف <code>header</code> وغلقِه في ملف <code>footer</code> . سنحتاج أيضًا لتضمين قائمتنا الجانبيّة في <code>footer</code> لأنّه يحتوي على عنصر <code>site-sidebar#</code>. الشكل النهائيّ لملفَّات <code>header</code> و <code>footer</code> سيكون هكذا:
</p>

<p style="text-align: left;">
	<strong>Header</strong>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<code>&lt;!DOCTYPE html&gt;
&lt;html &lt;?php language_attributes(); ?&gt; class="no-js"&gt;
&lt;head&gt;
    &lt;meta charset="&lt;?php bloginfo( 'charset' ); ?&gt;"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
    &lt;link rel="profile" href="http://gmpg.org/xfn/11"&gt;
    &lt;?php wp_head(); ?&gt;
&lt;/head&gt;

&lt;body &lt;?php body_class(); ?&gt;&gt;

&lt;div id="site-header"&gt;
    &lt;h1&gt;&lt;?php bloginfo('title') ?&gt;&lt;/h1&gt;
&lt;/div&gt;

&lt;div id='site-container'&gt;
&lt;div id='site-content'&gt;
</code></pre>

<p style="text-align: left;">
	<strong>Footer</strong>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<code>&lt;/div&gt; &lt;!-- site content --&gt;

&lt;?php get_sidebar(); ?&gt;

&lt;/div&gt; &lt;!-- site content --&gt;

&lt;div id='site-footer'&gt;
&lt;p&gt;&amp;copy; My Awesome Theme&lt;/p&gt;
&lt;/div&gt;

&lt;?php wp_footer() ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
	كما تلاحظ، ملفُّ <code>sidebar.php</code> يمكِن استدعاؤه بواسطة دالّة <code>()get_sidebar</code>.عند هذه المرحلة، يجب أن ترى هذا النّص "This is my sidebar" تحت محتواك. بعد إضافة قليلٍ من التنسيقات سنتمكَّن من جعل القائمة الجانبيّة بجوار المحتوى. إليك التعديلات والإضافات التي قمت بها في برمجيّة النموذج:
</p>

<ul>
<li>
		عدَّلتُ <code>site-content#</code> لتخفيض <code>max-width</code> إلى 525px وأضفت <code>float :left</code>.
	</li>
	<li>
		أضفتُ <code>site-sidebar#</code> وقمت بإعطائها width :220px و border-radius :22px وجعلت الخلفيّة بيضاء مثل لون المحتوى وقمت أيضا بعمل <code>float :right</code>.
	</li>
	<li>
		أضفتُ <code>site-container#</code> وجعلته بعرض تراكميٍّ لعرضِ المحتوى والقائمة الجانبيّة ثم جعلته في المركز.
	</li>
	<li>
		أضف قاعدة مسح "<code>clear</code>" لإجبار الـ <code>footer</code> على التموضع تحت العناصر المُعوَّمة (العناصر التي تحتوي على <code>float</code> في كلاساتها).
	</li>
</ul>
<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;A single post template&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div id="site-header"&gt;
    &lt;h1&gt;Welcome to my site&lt;/h1&gt;
    &lt;nav&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=''&gt;Home&lt;/a&gt;&lt;/li&gt;  
        &lt;li&gt;&lt;a href=''&gt;About&lt;/a&gt;&lt;/li&gt;  
        &lt;li&gt;&lt;a href=''&gt;Contact&lt;/a&gt;&lt;/li&gt;  
      &lt;/ul&gt;  
    &lt;/nav&gt;
  &lt;/div&gt;
  
  &lt;div id="article"&gt;
    &lt;h2 class="article-title"&gt;&lt;?php the_title() ?&gt;&lt;/h2&gt;
    &lt;div class="article-content"&gt;&lt;?php the_content() ?&gt;&lt;/div&gt;
    &lt;div class="article-meta"&gt;Published on &lt;?php the_time( "Y-m-d" ) ?&gt; by &lt;?php the_author() ?&gt;&lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div id="site-footer"&gt;
    &lt;nav&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=''&gt;Home&lt;/a&gt;&lt;/li&gt;  
        &lt;li&gt;&lt;a href=''&gt;About&lt;/a&gt;&lt;/li&gt;  
        &lt;li&gt;&lt;a href=''&gt;Contact&lt;/a&gt;&lt;/li&gt;  
      &lt;/ul&gt;  
    &lt;/nav&gt;
    &lt;div id="copyright"&gt;&amp;copy; Daniel Pataki&lt;/div&gt;
  &lt;/div&gt;
  
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
	آخر قطعةٍ من الأحجيِّة هي إخبار ووردبريس بعرضِ الوِدجت المعيَّنة لقائمتنا الجانبيّة. هذا الأمر يمكن إتمامه باستخدام دالّة <code>()dynamic_sidebar</code> ، وإضافة معرِّف قائمتنا الجانبّية كأوَّل معاملٍ. إليك كيف يجب أن يبدو ملف <code>sidebar.php</code>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<code>&lt;div id='site-sidebar'&gt;
    &lt;?php dynamic_sidebar( 'mat-sidebar' ); ?&gt;
&lt;/div&gt;
</code></pre>

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

<p style="text-align: center;">
	<img alt="sidebar.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26518" data-unique="g6lk0c7pu" src="https://academy.hsoub.com/uploads/monthly_2018_01/sidebar.jpg.624cd324ce44ec30e9f3fce4fc18a4a7.jpg"></p>

<h2 id="الوِدجت-ما-الذّي-تعلّمناه">
	الوِدجت: ما الذّي تعلّمناه
</h2>

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

<ul>
<li>
		تسجيل القائمة الجانبيّة باستخدام <code>()register_sidebar</code>.
	</li>
	<li>
		استخدام <code>()dynamic_sidebar</code>  في <code>sidebar.php</code> لجلب الوِدجت الخاصّة بك.
	</li>
	<li>
		استخدام <code>()get_sidebar</code> لتضمين القائمة الجانبيّة في المكانِ المخصّصِ لها.
	</li>
	<li>
		استخدام CSS لتنسيق عملك.
	</li>
</ul>
<h2 id="العمل-مع-القوائم">
	العمل مع القوائم:
</h2>

<p>
	القوائم مشابهة في طريقة عملها للمناطق المُصغّرة. أوّلًا سيتوّجب عليك تسجيلها لكي تظهر في لوحة تحكُّم المدير ومِن ثَمَّ إضافتها للقالب باستخدام الدوالِّ. فلنبدأ بتسجيل قائمةٍ جديدةٍ في ملف <code>functions.php</code>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<code>&lt;?php 
register_nav_menus( array(
    'header-menu' =&gt; 'Our Awesome Header Menu',
) );
</code></pre>

<p>
	هذه الدالّة تسمح لك بإضافة عدّة قوائمٍ عن طريق إضافة عدّة عناصر للمصفوفة. مفتاح المصفوفة يمثّل موقع القائمة في القالب أمّا القيمة فتمثّل اسم القائمة نفسها. بمجرّد قيامك بذلك يمكنك البدء بتجميع قائمةٍ ما. تأكّد من إضافة بعض العناصر لقائمتك ثم ربطها بالقائمة Our Awesome Header Menu كما توضّحه الصورة أسفله:
</p>

<p style="text-align: center;">
	<img alt="menu.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26517" data-unique="arx87uwbf" src="https://academy.hsoub.com/uploads/monthly_2018_01/menu.jpg.c760c23388fff72d6bfcd38067bd6ef3.jpg"></p>

<p>
	متى ما أردت عرض القائمة استخدم دالّة <code>()wp_nav_menu</code>. في حالتي سأقوم بإضافة القائمة في ملّف الـ <code>header</code> مباشرة تحت عنصر <code>site-header#</code> هكذا:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<code>&lt;div id="header-menu"&gt;
    &lt;?php wp_nav_menu( array( "theme_location" =&gt; 'header-menu' ) ) ?&gt;
&lt;/div&gt;
</code></pre>

<p>
	دالّة <code>()wp_nav_menu</code> تأخذ مجموعةَ مُعامِلات يمكنك استخدامها للتحكّم بما تريد عرضه. الموقع في القالب هو ما يهمّنا حقًّا، يمكنك إلقاء نظرةٍ في <a href="https://codex.wordpress.org/Function_Reference/wp_nav_menu" rel="external nofollow">دليل دوالِّ ووردبريس</a> للحصول على شرحٍ معمّقٍ. في الختام، سأقوم بإضافة بعض التنسيقات البسيطة لجعل الأمور تبدو شبه مقبولة. اعذروني على المظهر القبيح هنا و لكن كلُّ هذا يمكنك تحسينه باستخدام مهارات CSS بعناية فائقة ( خذ بعين الاعتبار أنَّ هذا لم يكنْ الهدف الرئيسي لهذا الدرس).
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7849_7" style="">
<code>#header-menu {
    text-align:center;
}

#header-menu ul {
    padding:0px;
}

#header-menu li {
    display:inline-block;
    padding: 0 8px;
}

#header-menu a {
    color: #ccc;
    text-decoration: none;
}

#header-menu a:hover {
    color: #fff;
}
</code></pre>

<h2 id="المزيد-من-القراءة-والتعلّم">
	المزيد من القراءة والتعلّم
</h2>

<p>
	هناك عدّة <a href="https://make.wordpress.org/themes/handbook/review/required/" rel="external nofollow">مُتطلّبات</a> يجب أن يستجيب لها القالب قبل نفكّر بإضافته إلى مستودع قوالب ووردبريس. كلّ ما قمنا به هنا هو مجرّد مدخلٍ بسيط لعالم تطويرِ القوالب ولابدّ أنّك الآن تمتلك ما يكفي من المعرفة للبدء باختيار الوظائف التي تريد إضافتها لقالبك. أنصحك بتنصيب إضافة <a href="https://wordpress.org/plugins/theme-check/" rel="external nofollow">Theme Check</a> ، هذه الإضافة ستقوم بتحليل قالبك وتخبرك بما يجب عليك القيام به لتوافق متطّلبات فريق ووردبريس لمراجعة القوالب.<br>
	هناك بضعة أشياءٍ عليك إضافتها مثل صفحة الخطأ 404، ربمّا صفحة مخصّصة لعرض نتائج البحث، ترقيم الصفحات وعددٍ من الأشياء التي قد يحتاجها موقعك يوميَّا بشكل دائم. مثل صفحة "عن الموقع" وصفحة "تواصل معنا". بمجرّد تحديدك لكلِّ النقاط التي قد يحتاجها موقعك قد ترغب أيضا بإضافة مخصِّصٍ لقالبك حتّى تسمح لأي مستخدم مستقبليٍّ لموقعك بتحديد ألوانِهم وخياراتهم الخاصّة. لقد قمنا بتغطية أساسيات تطوير القوالب ولكن سيبقى لك الكثير لتعلّمِه وما دُمتَ تواصل التدرُّب فستكون بخير فتلك هي الطريقة التِّي تعلّمت بها، خطوةً بخطوة.<br>
	 
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://premium.wpmudev.org/blog/wordpress-development-beginners-widgets-menus/" rel="external nofollow">WordPress Development for Beginners: Widgets and Menus</a> لصاحبه Daniel Pataki
</p>
]]></description><guid isPermaLink="false">598</guid><pubDate>Sun, 14 Jan 2018 13:06:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62D;&#x648;&#x651;&#x650;&#x644; &#x642;&#x627;&#x644;&#x628; HTML &#x633;&#x627;&#x643;&#x650;&#x646; &#x625;&#x644;&#x649; &#x642;&#x627;&#x644;&#x628; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x645;&#x62A;&#x62C;&#x627;&#x648;&#x628;: &#x645;&#x644;&#x641; index &#x60C; single &#x648; page</title><link>https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%AD%D9%88%D9%91%D9%90%D9%84-%D9%82%D8%A7%D9%84%D8%A8-html-%D8%B3%D8%A7%D9%83%D9%90%D9%86-%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-%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D9%85%D9%84%D9%81-index-%D8%8C-single-%D9%88-page-r596/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/12-2.png.435a6fdd41d974492070e350b49efcde.png" /></p>

<p>
	بدأنا في <a href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%AD%D9%88%D9%91%D9%90%D9%84-%D9%82%D8%A7%D9%84%D8%A8-html-%D8%B3%D8%A7%D9%83%D9%90%D9%86-%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-%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-r592/" rel="">الدرس السابق</a> بتخصيص الموقع عبر تعريف الثوابت وإنشاء ملفات <code>header.php</code> و <code>footer.php</code> والعمل على ملفات <code>searchform.php</code> و <code>sidebar.php</code>.
</p>

<h3 id="الخطوة-2.6--كتابة-ملفِّ-index">
	الخطوة 2.6- كتابة ملفِّ <code>index</code>
</h3>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<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="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="pun">&lt;?</span><span class="pln">php get_footer</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="26470" href="https://academy.hsoub.com/uploads/monthly_2018_01/temp.jpg.a39037dd64a41669230d1d3c61436e6d.jpg" rel=""><img alt="temp.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26470" data-unique="70q0dvkte" src="https://academy.hsoub.com/uploads/monthly_2018_01/temp.thumb.jpg.6fc74c7a7d69b52f5285c5e908663588.jpg"></a>
</p>

<p>
	لاحظ أنّه ما عدا القائمة الجانبيّة، فإنّ كلًّا من رأس وتذييل القالب في مكانها المحدّد. لإضافة بعض المحتوى إلى رئيسيّة الموقع افتح ملفّ <code>index.html</code> وقم بنسخ المنطقة المحدّدة بين “blog area section” إلى غاية وسم غلق <code>div</code> ذو الكلاس <code>box-layer align-center page-nav</code> ثمّ ألصِق كلّ ذلك في ملفِّ <code>index.php</code> مباشرةً تحت دالّة <code>get_header</code> ستحصل على شيء مشابه لهذا:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;!-- BLOG AREA --&gt;
&lt;section&gt;
&lt;hr class=&amp;"no-margin&amp;" /&gt;
&lt;div class=&amp;"blog-container section-content&amp;"&gt;
&lt;div class=&amp;"container&amp;"&gt;
&lt;div class=&amp;"row&amp;"&gt;
&lt;div class=&amp;"col-md-8&amp;"&gt;
&lt;ul class=&amp;"negative-margin&amp;"&gt;
&lt;li&gt;
&lt;h1&gt;&lt;a href=&amp;"single-blog.html&amp;" class=&amp;"gray&amp;"&gt;Should I use a Pencil or a Ballpen?&lt;/a&gt;&lt;/h1&gt;
By &lt;a href=&amp;"#&amp;"&gt;Sam Norton&lt;/a&gt; / On July 20, 2014 / &lt;a href=&amp;"#&amp;"&gt;Life Hacks&lt;/a&gt;
&lt;figure&gt;
&lt;img class=&amp;"opacity-hover box-layer img-responsive&amp;" src=&amp;"images/thumb1.jpg&amp;" alt=&amp;"Pencil or Ballpen&amp;" /&gt;
&lt;/figure&gt;
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..
&lt;div class=&amp;"btn-margin&amp;"&gt;
&lt;a href=&amp;"single-blog.html&amp;" class=&amp;"btn btn-primary&amp;"&gt;CONTINUE READING &gt;&gt;&gt; &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h1&gt;&lt;a href=&amp;"single-blog.html&amp;" class=&amp;"gray&amp;"&gt;How to test your patience!&lt;/a&gt;&lt;/h1&gt;
By &lt;a href=&amp;"#&amp;"&gt;Sam Norton&lt;/a&gt; / On July 20, 2014 / &lt;a href=&amp;"#&amp;"&gt;Life Tips&lt;/a&gt;
&lt;figure&gt;
&lt;img class=&amp;"box-layer img-responsive&amp;" src=&amp;"images/thumb2.jpg&amp;" alt=&amp;"Pencil or Ballpen&amp;" /&gt;
&lt;/figure&gt;
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..
&lt;div class=&amp;"btn-margin&amp;"&gt;
&lt;a href=&amp;"single-blog.html&amp;" class=&amp;"btn btn-primary&amp;"&gt;CONTINUE READING &gt;&gt;&gt; &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&amp;"box-layer align-center page-nav&amp;"&gt;
&lt;ul class=&amp;"btn&amp;"&gt;
&lt;li&gt;&lt;a href=&amp;"#&amp;"&gt;Next Page &gt;&gt;&gt; &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</code></pre>

<p>
	الكود أعلاه سيقوم بعرض محتوًى ساكنٍ. لجعله ديناميكيٍّ سنستخدم <a href="https://codex.wordpress.org/The_Loop" rel="external nofollow">حلقة تِكرارِ ووردبريس</a> داخل منطقة التدوينات لعرضها بشكل متكرّرٍ مع محتوًى مختلفٍ. قم بتعويض الكود الذي نسخته سابقا بهذا الكود:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php get_header(); ?&gt;

&lt;!-- BLOG AREA --&gt;
&lt;section&gt;
&lt;hr class=&amp;"no-margin&amp;" /&gt;
&lt;div class=&amp;"blog-container section-content&amp;"&gt;
&lt;div class=&amp;"container&amp;"&gt;
&lt;?php if (have_posts()) : ?&gt;
&lt;div class=&amp;"row&amp;"&gt;
&lt;div class=&amp;"col-md-8&amp;"&gt;
&lt;ul class=&amp;"negative-margin&amp;"&gt;
&lt;li&gt;
&lt;?php while(have_posts()) : the_post(); ?&gt;
&lt;h1&gt;&lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;" class=&amp;"gray&amp;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h1&gt;
By &lt;a href=&amp;"&lt;?php the_author_posts() ?&gt;&amp;"&gt;&lt;?php the_author(); ?&gt; &lt;/a&gt; / On &lt;?php echo get_the_date('F j, Y'); ?&gt; / In &lt;?php the_category(', '); ?&gt;
&lt;?php if (has_post_thumbnail()) : ?&gt;
&lt;figure&gt; &lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;"&gt;&lt;?php the_post_thumbnail('', array('class' =&gt; 'opacity-hover box-layer img-responsive')); ?&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;?php the_excerpt(); ?&gt; 
&lt;div class=&amp;"btn-margin&amp;"&gt; &lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;" class=&amp;"btn btn-primary&amp;"&gt;CONTINUE READING &gt;&gt;&gt; &lt;/a&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;?php endif; ?&gt;
&lt;?php endwhile; ?&gt;
&lt;/ul&gt;
&lt;?php global $wp_query; if ($wp_query-&gt;max_num_pages &gt; 1) : ?&gt;
&lt;div class=&amp;"box-layer align-center page-nav&amp;"&gt;
&lt;ul class=&amp;"btn&amp;"&gt;
&lt;li&gt;&lt;?php previous_posts_link('&lt;&lt;&lt; Previous Page', $wp_query-&gt;max_num_pages); ?&gt;&lt;/li&gt;
&lt;li&gt;&lt;?php next_posts_link('Next Page &gt;&gt;&gt;', $wp_query-&gt;max_num_pages); ?&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!-- end box --&gt;
&lt;?php endif; ?&gt;
&lt;?php endif; ?&gt;
&lt;/div&gt;
&lt;aside&gt;
&lt;div class=&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;/div&gt;
&lt;/aside&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php if ( have_posts() ) { while ( have_posts() ) { the_post(); // // Post Content here // } // end while } // end if ?&gt;
</code></pre>

<p>
	الكود أعلاه يمثّل الشّكل القياسيِّ لحلقة تكرار ووردبريس لِعرض المقالات ومع ذلك مازال علينا استخدام الدوالّ التالية ضمن الحلقة:
</p>

<ul>
<li>
		<code>the_permalink</code> : تقوم بعرضِ الرّابط الدائم للمقالِ الحاليِّ.
	</li>
	<li>
		<code>the_title</code> : تقوم باسترجاع عنوان المقالِ الحاليِّ.
	</li>
	<li>
		<code>the_author_posts</code> : تقوم بعرض عدد المقالات التّي قام الكاتب الحاليُّ بنشرها.
	</li>
	<li>
		<code>the_author</code> : تقوم بعرض اسم كاتبِ المقالِ الحاليِّ.
	</li>
	<li>
		<code>get_the_date</code> : تسترجع التوقيت الذي كُتب به المقالُ الحاليِّ.
	</li>
	<li>
		<code>the_category</code> : تعرض التصنيف أو التصنيفات التي ينتمي إليها المقال الحاليّ.
	</li>
	<li>
		<code>the_post_thumbnail</code> : تعرض الصّورة البارزة للمقالِ الحاليِّ كما تمّ تحديده في شاشة تعديل المقال (سنرى هذا بشكل مفصّلٍ بعد قليل).
	</li>
	<li>
		<code>the_excerpt</code> : تعرض المقتطف للمقالِ الحاليِّ. بعد تطبيقِ بعض الفلاتر عليها وتضمين <code>auto-p</code> عليها سنقوم بتحويل <code>line-breaks</code> إلى فقرة HTML فيما يتعلّق بالصّورة البارزة فسنستخدم الكود التّالي:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php if (has_post_thumbnail()) : ?&gt;
&lt;figure&gt; &lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;"&gt;&lt;?php the_post_thumbnail('', array('class' =&gt; 'opacity-hover box-layer img-responsive')); ?&gt;&lt;/a&gt; &lt;/figure&gt;
&lt;?php endif; ?&gt;
</code></pre>

<p>
	أوّلًا يتّم التأكّد من أنّ المقال يحتوي على صورةٍ بارزة، بعد ذلك إذا كان يحتوي على واحدةٍ، سنقوم بعرض رابط الموضوع إضافة إلى الصورة نفسها. لاحظ أنّنا أضفنا مصفوفة تحتوي على كلاس <code>opacity-hover box-layer img-responsive</code>. هذه طريقة لإضافة كلاس للصورة البارزة وجعلها تبدو بشكلٍ أجمل عن طريق إضافة: تأثيرٍ عند تمرير الفأرة فوقها، حدودٍ وظِلّ صندوق. لكنّ القيّام بكلّ هذا لن يقوم بعرض الصورة البارزة، يجب عليك أوّلًا تسجيل الصّورة البارزة. قم بنسخ الكود التّالي وأضِفه في ملفِّ <code>functions.php</code>.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php 
/***********************************************************************************************/
/* Add Theme Support for Post Thumbnails */
/***********************************************************************************************/
if (function_exists('add_theme_support')) {
  add_theme_support('post-thumbnails');
  set_post_thumbnail_size(742, 428);
}
?&gt;
</code></pre>

<p>
	جيّد! الصورة البارزة ستظهر الآن. التّالي سيكون إضافة دالّةٍ تقوم بنزع العارِضات والنِّقاط بينهما من نهاية المقتطف التي تعرض فيه بطريقة افتراضية. دائما في ملفِّ <code>functions.php</code> أضف الكود التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php 
/***********************************************************************************************/
/* Remove the brackets, ellipsis and hellip on excerpt */
/***********************************************************************************************/
function trim_excerpt($text) {
    $text = str_replace('[hellip;]', '...', $text);
     return $text;
    }
add_filter('get_the_excerpt', 'trim_excerpt');
?&gt;
</code></pre>

<p>
	تاليًّا، سنقوم بتشغيل ترقيم الصّفحات التيّ قمنا بإضافتها سابقًا في ملفِّ <code>index.php</code>. الكود التّالي سيقوم باستدعاء <code>wp_query</code>، هناك كلاس محدّدة في نواةِ ووردبريس تتعامل مع تعقيدات استعلامات المقالات (أو الصفحات) لمدوّنة ووردبريس. هذه الكلاس بإضافة روابط لـ <code>previous_post_link</code> و <code>next_posts_link function</code> للتنقّل بين صفحاتِ مدوّنتك. ألقِ نظرةً على الكود التّالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php global $wp_query; if ($wp_query-&gt;max_num_pages &gt; 1) : ?&gt;
&lt;div class=&amp;"box-layer align-center page-nav&amp;"&gt;
&lt;ul class=&amp;"btn&amp;"&gt;
&lt;li&gt;&lt;?php previous_posts_link('&lt;&lt;&lt; Previous Page', $wp_query-&gt;max_num_pages); ?&gt;&lt;/li&gt;
&lt;li&gt;&lt;?php next_posts_link('Next Page &gt;&gt;&gt;', $wp_query-&gt;max_num_pages); ?&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!-- end box --&gt;
&lt;?php endif; ?&gt;
&lt;?php endif; ?&gt;
</code></pre>

<p>
	كلمسةٍ ختاميِّة، قم بتضمين دالّة <code>get_sidebar</code> داخل وسم <code>div</code> ذو كلاس <code>col-md-3 col-md-offset-1 margin-sidebar</code> الكلُّ داخل وسمِ HTML5 <code>aside</code>، ستحصل كود مشابه للتّالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;aside&gt;
&lt;div class=&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;/div&gt;
&lt;/aside&gt;
</code></pre>

<p>
	كمراجعة نهائيّة ملفّ <code>index.php</code> يجب أن يحتوي على الكود أدناه، راجعه لتفادي أيّة أخطاء محتملة.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php get_header(); ?&gt;
&lt;!-- BLOG AREA --&gt;
&lt;section&gt;
&lt;hr class=&amp;"no-margin&amp;" /&gt;
&lt;div class=&amp;"blog-container section-content&amp;"&gt;
&lt;div class=&amp;"container&amp;"&gt;
&lt;?php if (have_posts()) : ?&gt;
&lt;div class=&amp;"row&amp;"&gt;
&lt;div class=&amp;"col-md-8&amp;"&gt;
&lt;ul class=&amp;"negative-margin&amp;"&gt;
&lt;li&gt;
&lt;?php while(have_posts()) : the_post(); ?&gt;
&lt;h1&gt;&lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;" class=&amp;"gray&amp;"&gt;
&lt;?php the_title(); ?&gt; &lt;/a&gt;&lt;/h1&gt;
By &lt;a href=&amp;"&lt;?php the_author_posts() ?&gt;&amp;"&gt;&lt;?php the_author(); ?&gt; &lt;/a&gt; / On &lt;?php echo get_the_date('F j, Y'); ?&gt; / In &lt;?php the_category(', '); ?&gt;
&lt;?php if (has_post_thumbnail()) : ?&gt;
&lt;figure&gt; &lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;"&gt;&lt;?php the_post_thumbnail('', array('class' =&gt; 'opacity-hover box-layer img-responsive')); ?&gt;&lt;/a&gt; &lt;/figure&gt;
&lt;?php the_excerpt(); ?&gt; 
&lt;div class=&amp;"btn-margin&amp;"&gt; &lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;" class=&amp;"btn btn-primary&amp;"&gt;CONTINUE READING &gt;&gt;&gt; &lt;/a&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;?php endif; ?&gt;
&lt;?php endwhile; ?&gt;
&lt;/ul&gt;
&lt;?php global $wp_query; if ($wp_query-&gt;max_num_pages &gt; 1) : ?&gt;
&lt;div class=&amp;"box-layer align-center page-nav&amp;"&gt;
&lt;ul class=&amp;"btn&amp;"&gt;
&lt;li&gt;&lt;?php previous_posts_link('&lt;&lt;&lt; Previous Page', $wp_query-&gt;max_num_pages); ?&gt;&lt;/li&gt;
&lt;li&gt;&lt;?php next_posts_link('Next Page &gt;&gt;&gt;', $wp_query-&gt;max_num_pages); ?&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!-- end box --&gt;
&lt;?php endif; ?&gt;
&lt;?php endif; ?&gt;
&lt;/div&gt;
&lt;aside&gt;
&lt;div class=&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;/div&gt;
&lt;/aside&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>

<h3 id="الخطوة-2.7--العملُ-مع-ملفِّ-single.php">
	الخطوة 2.7- العملُ مع ملفِّ <code>single.php</code>
</h3>

<p>
	الآن سنقوم بعرض كلِّ مقالةٍ بشكل منفصل، أنشئ ملفّ <code>single.php</code> ثمّ أضف له الكود التّالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php get_header(); ?&gt;
&lt;!-- BLOG AREA --&gt;
&lt;section&gt;
&lt;hr class=&amp;"no-margin&amp;" /&gt;
&lt;?php if (have_posts()) : while(have_posts()) : the_post(); ?&gt;
&lt;div class=&amp;"blog-container section-content&amp;"&gt;
&lt;div class=&amp;"container&amp;"&gt;
&lt;div class=&amp;"row&amp;"&gt;
&lt;div class=&amp;"col-md-8&amp;"&gt;
&lt;div class=&amp;"box-layer custom-padding&amp;"&gt;
&lt;section&gt;
&lt;h1&gt;&lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;" class=&amp;"gray&amp;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h1&gt;
By &lt;a href=&amp;"&lt;?php the_author_posts() ?&gt;&amp;"&gt;&lt;?php the_author(); ?&gt; &lt;/a&gt; / On &lt;?php echo get_the_date('F j, Y'); ?&gt; /  In &lt;?php the_category(', '); ?&gt; 
&lt;?php if (has_post_thumbnail()) : ?&gt;
&lt;figure&gt; &lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;"&gt;&lt;?php the_post_thumbnail('', array('class' =&gt; 'opacity-hover box-layer img-responsive')); ?&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;?php the_content(); ?&gt; 
&lt;?php endif; ?&gt;
&lt;/section&gt;
&lt;?php endwhile; ?&gt;
&lt;?php endif; ?&gt;
&lt;section&gt;
&lt;div class=&amp;"comment-section&amp;"&gt;
&lt;?php // If comments are open or we have at least one comment, load up the comment template if ( comments_open() || '0' != get_comments_number() ) : comments_template(); endif; ?&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;!-- RELATED ARTICLE AREA --&gt;
&lt;section&gt;
&lt;div class=&amp;"box-layer related-articles custom-padding&amp;"&gt;
&lt;h3 class=&amp;"align-center&amp;"&gt;Related Articles&lt;/h3&gt;
&lt;?php $current_categories = get_the_category(); $first_category = $current_categories[0]-&gt;term_id;
$args = array(
'post_per_page' =&gt; 3,
'category__in' =&gt; array($first_category),
'post__not_in' =&gt; array($post-&gt;ID)
);
$related_articles = new WP_Query($args);
if ($related_articles-&gt;have_posts()) : ?&gt;
&lt;ul&gt;
&lt;?php while ($related_articles-&gt;have_posts()) : $related_articles-&gt;the_post(); ?&gt;
&lt;li class=&amp;"col-md-4&amp;"&gt;
&lt;?php if (has_post_thumbnail()) : ?&gt;
&lt;figure&gt; &lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;"&gt;&lt;?php the_post_thumbnail('', array('class' =&gt; 'opacity-hover box-layer img-responsive')); ?&gt;&lt;/a&gt; &lt;/figure&gt;
&lt;/figure&gt;
&lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;
&lt;?php endif; ?&gt;
&lt;/li&gt;
&lt;?php endwhile; ?&gt;
&lt;div class=&amp;"clear&amp;"&gt;&lt;/div&gt;
&lt;/ul&gt;
&lt;?php endif; ?&gt;
&lt;?php // Restore original Post Data wp_reset_postdata(); ?&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;!-- SIDEBAR AREA --&gt;
&lt;aside&gt;
&lt;div class=&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;/div&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>

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

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;section&gt;
&lt;div class=&amp;"comment-section&amp;"&gt;
&lt;?php if ( comments_open() || '0' != get_comments_number() ) : comments_template(); endif; ?&gt;
&lt;/div&gt;
&lt;/section&gt;
</code></pre>

<p>
	هذا الكود سيتحقّق إن كانت التعليقات مُتاحةً أو إن كانت هناك تعليقات ليقوم باستدعاء نموذج التعليقات (سنتناول ذلك لاحقا).
</p>

<h3 id="الخطوة-2.8--العملُ-مع-ملفِّ-page.php">
	الخطوة 2.8- العملُ مع ملفِّ <code>page.php</code>
</h3>

<p>
	بعد أن أنهينا العمل على صفحة التّدوينة، سنتوجّه للعملِ على الصّفحات العادية. أنشئ ملفّ <code>page.php</code> ثم ألصق به الكود التّالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7907_7" style="">
<code>&lt;?php get_header(); ?&gt;
&lt;!-- BLOG AREA --&gt;
&lt;section&gt;
&lt;hr class=&amp;"no-margin&amp;" /&gt;
&lt;div class=&amp;"blog-container section-content&amp;"&gt;
&lt;div class=&amp;"container&amp;"&gt;
&lt;div class=&amp;"row&amp;"&gt;
&lt;div class=&amp;"col-md-8&amp;"&gt;
&lt;div class=&amp;"box-layer custom-padding&amp;"&gt;
&lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;
&lt;h3&gt; &lt;?php the_title(); ?&gt; &lt;/h3&gt;
&lt;?php if (has_post_thumbnail()) : ?&gt;
&lt;figure&gt; &lt;a href=&amp;"&lt;?php the_permalink(); ?&gt;&amp;"&gt;&lt;?php the_post_thumbnail('', array('class' =&gt; 'opacity-hover box-layer img-responsive')); ?&gt;&lt;/a&gt; &lt;/figure&gt;
&lt;?php endif; ?&gt;
&lt;?php the_content(); ?&gt; 
&lt;?php endwhile; endif; //ends the loop ?&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- SIDEBAR AREA --&gt;
&lt;aside&gt;
&lt;div class=&amp;"col-md-3 col-md-offset-1 margin-sidebar&amp;"&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;/div&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;?php get_footer(); ?&gt;
</code></pre>

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

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://1stwebdesigner.com/convert-html-template-wordpress/" rel="external nofollow">How to Convert a Static HTML Template into a Responsive WordPress Theme</a>
</p>
]]></description><guid isPermaLink="false">596</guid><pubDate>Fri, 12 Jan 2018 15:03:00 +0000</pubDate></item></channel></rss>
