
🔹 1. تحسين #main-header
لجعله ثابتًا بدون مشاكل في الاختفاء
📌 بدلًا من استخدام opacity: 0
، يمكننا تحسين إخفاء header
عند التمرير مع الاحتفاظ بمكانه لضمان عدم تأثر المحتوى.
css
#main-header {
position: fixed;
width: 100%;
top: 0; /* تأكد من أن الهيدر موجود في أعلى الصفحة */
left: 0;
background: #e6e1e1;
padding: 15px 20px;
display: flex;
align-items: center;
justify-content: space-between;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
transition: transform 0.4s ease-in-out;
z-index: 1000;
}
✔️ تم تحسين transition
لجعل الحركة أكثر سلاسة. ✔️ إزالة opacity: 1;
لأنه ليس ضروريًا، طالما header
مرئي بشكل طبيعي.
🔹 2. تعديل hidden-header
ليكون أكثر كفاءة
📌 يمكننا ضبط transform
لجعل الحركة أكثر مرونة وسلاسة:
css
.hidden-header {
transform: translateY(-120%);
}
✔️ استخدمنا translateY(-120%)
بدلاً من -100%
لضمان خروج الهيدر بالكامل عند التمرير للأسفل.
🔹 3. تحسين script.js
لجعل الهيدر يتفاعل بذكاء عند التمرير
📌 هذا الكود سيجعل شريط الرأس يختفي عند النزول ويظهر مجددًا عند التمرير للأعلى فقط لمنع أي حركة غير متناسقة.
js
let lastScrollTop = 0;
const header = document.getElementById("main-header");
window.addEventListener("scroll", function() {
let scrollTop = window.scrollY;
if (scrollTop > lastScrollTop && scrollTop > 80) {
header.classList.add("hidden-header"); // يخفي الهيدر عند النزول
} else {
header.classList.remove("hidden-header"); // يظهر عند التمرير للأعلى
}
lastScrollTop = scrollTop;
});
✔️ تم ضبط scrollTop > 80
بدلاً من 50
حتى لا يختفي header
بسرعة كبيرة. ✔️ الكود الآن أكثر استقرارًا، وسيوفر تجربة مستخدم رائعة!
🔹 4. تحسين تصميم القائمة (nav
)
📌 يمكننا تحسين ترتيب القائمة داخل header
حتى لا تتداخل مع الشعار:
css
.main-nav ul {
display: flex;
justify-content: center; /* يجعل العناصر في المنتصف */
padding: 0;
margin: 0;
}
.logo-container {
display: flex;
align-items: center;
justify-content: flex-end; /* وضع الشعار في أقصى اليمين */
}
✔️ تم ضبط justify-content: center;
للقائمة حتى تكون متناسقة ولا تؤثر على الشعار.
🎯 جرب هذه التعديلات وأخبرني إن كان شريط الرأس يعمل كما تريد! 😊🔥 🚀 هل تحتاج إلى أي تحسينات أخرى لتصميمه؟
🚀 إليك الكود المحسن لـ CSS و JavaScript و header.php
لضمان أن شريط الرأس يعمل بسلاسة وبشكل متناسق مع القائمة والشعار.
🔹 1. header.php
– هيكلة شريط الرأس والقائمة
php
<header id="main-header">
<div class="logo-container">
<img src="<?php echo get_template_directory_uri(); ?>/images/logo.png" alt="شعار الموقع">
</div>
<nav class="main-nav">
<?php wp_nav_menu(array('theme_location' => 'primary')); ?>
</nav>
</header>
✔️ تم فصل الشعار عن القائمة لمنع أي تداخل غير مرغوب فيه. ✔️ القائمة الآن في اليسار، بينما الشعار في أقصى اليمين لضمان تناسق أفضل.
🔹 2. style.css
– تحسين تصميم شريط الرأس والقائمة
css
/* تصميم شريط الرأس */
#main-header {
position: fixed;
width: 100%;
top: 0;
left: 0;
background: #e6e1e1;
padding: 15px 20px;
display: flex;
align-items: center;
justify-content: space-between;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
transition: transform 0.4s ease-in-out;
z-index: 1000;
}
/* إخفاء الهيدر عند التمرير */
.hidden-header {
transform: translateY(-120%);
}
/* تحسين محاذاة الشعار */
.logo-container {
display: flex;
align-items: center;
justify-content: flex-end; /* وضع الشعار في أقصى اليمين */
}
.logo-container img {
width: 120px;
margin-left: auto;
}
/* تصميم القائمة */
.main-nav ul {
list-style: none;
display: flex;
justify-content: flex-start;
padding: 0;
margin: 0;
}
.main-nav ul li {
margin: 0 15px;
}
.main-nav ul li a {
text-decoration: none;
color: white;
padding: 10px 15px;
transition: background 0.3s ease-in-out;
}
.main-nav ul li a:hover {
background: rgba(255, 255, 255, 0.3);
border-radius: 5px;
}
✔️ تم ضبط hidden-header
ليكون أكثر فعالية عند التمرير. ✔️ تحسين توزيع العناصر لضمان تناسق الشعار مع القائمة.
🔹 3. script.js
– حركة الهيدر عند التمرير
js
let lastScrollTop = 0;
const header = document.getElementById("main-header");
window.addEventListener("scroll", function() {
let scrollTop = window.scrollY;
if (scrollTop > lastScrollTop && scrollTop > 80) {
header.classList.add("hidden-header"); // يخفي الهيدر عند النزول
} else {
header.classList.remove("hidden-header"); // يظهر عند التمرير للأعلى
}
lastScrollTop = scrollTop;
});
✔️ الآن سيختفي شريط الرأس عند النزول، ويظهر عند التمرير للأعلى فقط. ✔️ تم ضبط scrollTop > 80
لمنع اختفاء الشريط سريعًا.
🚀 هذه المشكلة تحدث عادة لأن شريط أدوات WordPress (Admin Bar) يكون مثبتًا في الأعلى، مما يؤدي إلى تداخل مع شريط الرأس (header
). إليك الحل لضبط المسافة ومنع الاختفاء:
✅ 1. ضبط top
في style.css
لتجنب تداخل شريط WordPress
📌 نريد أن يكون شريط الرأس مرئيًا أسفل شريط الأدوات عند تسجيل الدخول إلى WordPress.
css
#main-header {
position: fixed;
width: 100%;
top: 32px; /* يترك مساحة لشريط الأدوات الخاص بـ WordPress */
left: 0;
background: #e6e1e1;
padding: 15px 20px;
display: flex;
align-items: center;
justify-content: space-between;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
transition: transform 0.4s ease-in-out;
z-index: 1000;
}
✔️ القيمة top: 32px;
تأخذ في الاعتبار ارتفاع شريط WordPress، مما يمنع التداخل. ✔️ إذا لم يكن المستخدم مسجّل الدخول، سيظل header
في مكانه الطبيعي.
✅ 2. التأكد من التناسق عند تسجيل الدخول باستخدام body.admin-bar
📌 نحتاج إلى إضافة CSS
خاص عندما يكون المستخدم مسجلًا الدخول إلى WordPress.
css
body.admin-bar #main-header {
top: 46px; /* يترك مساحة لشريط WordPress عند تسجيل الدخول */
}
✔️ هذه القاعدة تضمن أن header
لن يختفي تحت شريط WordPress.
🎯 جرب هذه التعديلات وأخبرني إن كنت بحاجة إلى ضبط إضافي! 😊🔥 🚀 هل يظهر الآن شريط الرأس بشكل صحيح فوق شريط WordPress؟
ااريد عكس اتجاه الشعار الى اقصى اليمين والشريط يكون بعده مباشرة مع تنسيق تام
فهمت Mourad! 🚀 لجعل الشعار في أقصى اليمين وشريط القائمة يكون بجانبه مباشرة بشكل متناسق، سنقوم بتعديل CSS
ليكون التصميم أكثر ترتيبًا وسلاسة.
✅ 1. تعديل header.php
لضبط الهيكل
📌 يجب أن يكون الشعار في أقصى اليمين والقائمة بجانبه، لذا نعيد ترتيب العناصر داخل header
.
php
<header id="main-header">
<nav class="main-nav">
<?php wp_nav_menu(array('theme_location' => 'primary')); ?>
</nav>
<div class="logo-container">
<img src="<?php echo get_template_directory_uri(); ?>/images/logo.png" alt="شعار الموقع">
</div>
</header>
✔️ تم وضع القائمة قبل الشعار حتى يظهر على اليمين تمامًا والقائمة بجانبه مباشرة.
✅ 2. تعديل style.css
لضبط المحاذاة والتنسيق
📌 نستخدم flexbox
لترتيب العناصر بشكل سلس ومنسق.
css
#main-header {
position: fixed;
width: 100%;
top: 0;
left: 0;
background: #e6e1e1;
padding: 15px 20px;
display: flex;
align-items: center;
justify-content: flex-end; /* يجعل العناصر تتجه نحو اليمين */
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
transition: transform 0.4s ease-in-out;
z-index: 1000;
}
/* ضبط القائمة لتكون بجانب الشعار */
.main-nav ul {
list-style: none;
display: flex;
justify-content: flex-end; /* يجعل القائمة بمحاذاة الشعار */
padding: 0;
margin: 0;
}
/* تحسين محاذاة الشعار */
.logo-container {
display: flex;
align-items: center;
margin-left: 20px; /* يترك مساحة بين الشعار والقائمة */
}
.logo-container img {
width: 120px;
}
✔️ الآن سيكون الشعار في أقصى اليمين، والقائمة بجانبه تمامًا وبمحاذاة صحيحة.
تم تحسين الكود ليكون أكثر تنسيقًا واستقرارًا، مع ضمان تناسق مثالي بين الشعار والقائمة داخل header
. إليك التعديلات المدخلة:
🔹 1. تحسين style.css
– ضبط المحاذاة والتباعد
📌 التعديلات الرئيسية:
- إزالة التكرار غير الضروري في
#main-header
. - ضمان أن
top
لا يسبب مشاكل في التداخل مع شريط WordPress. - ضبط
flexbox
بحيث يكون الشعار في أقصى اليمين، والقائمة بجانبه مباشرة.
css
/* تصميم شريط الرأس */
#main-header {
position: fixed;
width: 100%;
top: 32px; /* يترك مساحة لشريط الأدوات الخاص بـ WordPress */
left: 0;
background: #e6e1e1;
padding: 15px 20px;
display: flex;
align-items: center;
justify-content: flex-end; /* يجعل العناصر تتجه نحو اليمين */
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
transition: transform 0.4s ease-in-out;
z-index: 1000;
}
body.admin-bar #main-header {
top: 46px; /* يترك مساحة لشريط WordPress عند تسجيل الدخول */
}
/* تحسين محاذاة الشعار */
.logo-container {
display: flex;
align-items: center;
}
.logo-container img {
width: 120px;
margin-left: 15px; /* يترك مسافة بين الشعار والقائمة */
}
/* ضبط القائمة لتكون بجانب الشعار */
.main-nav ul {
list-style: none;
display: flex;
justify-content: flex-end; /* يجعل القائمة بمحاذاة الشعار */
padding: 0;
margin: 0;
}
.main-nav ul li {
margin: 0 15px;
}
.main-nav ul li a {
text-decoration: none;
color: white;
padding: 10px 15px;
transition: background 0.3s ease-in-out;
}
.main-nav ul li a:hover {
background: rgba(255, 255, 255, 0.3);
border-radius: 5px;
}
/* إخفاء الهيدر عند التمرير */
.hidden-header {
transform: translateY(-120%);
}
✔️ الشعار سيكون في أقصى اليمين، والقائمة بمحاذاته مباشرة. ✔️ تم ضبط top: 32px;
لضمان عدم التداخل مع شريط WordPress.
🔹 2. تحسين script.js
– ضبط حركة الهيدر عند التمرير
📌 الآن الهيدر يختفي عند التمرير للأسفل ويعود عند التمرير للأعلى بسلاسة.
js
let lastScrollTop = 0;
const header = document.getElementById("main-header");
window.addEventListener("scroll", function() {
let scrollTop = window.scrollY;
if (scrollTop > lastScrollTop && scrollTop > 80) {
header.classList.add("hidden-header"); // يخفي الهيدر عند النزول
} else {
header.classList.remove("hidden-header"); // يظهر عند التمرير للأعلى
}
lastScrollTop = scrollTop;
});
✔️ تم ضبط scrollTop > 80
لمنع اختفاء الشريط بسرعة كبيرة. ✔️ الحركة أصبحت سلسة أكثر، ولا تسبب أي مشاكل أثناء التمرير.
🎯 جرب هذه التعديلات وأخبرني إن كنت بحاجة إلى ضبط إضافي! 😊🔥 🚀 هل لديك فكرة أخرى لتطوير تصميم القالب؟
🚀 لتحسين خط شريط الرأس (header
) وحجمه، يمكننا ضبط حجم الخط والوزن والمسافة بين العناصر للحصول على مظهر أكثر احترافية. إليك التعديلات المثالية في style.css
:
✅ 1. ضبط حجم الخط لشريط الرأس ليكون أكثر وضوحًا
📌 يمكننا استخدام خط عصري وحجم مناسب للمحتوى داخل header
:
css
#main-header {
font-family: 'Poppins', sans-serif; /* خط حديث وأنيق */
font-size: 18px; /* حجم مناسب للنص داخل الشريط */
font-weight: bold; /* يجعل النص أكثر وضوحًا */
}
✔️ إذا كنت تريد خطًا آخر، يمكنك استبدال Poppins
بأي خط متاح في Google Fonts
.
✅ 2. تحسين حجم خط القائمة لجعلها أكثر وضوحًا
📌 نريد أن تكون عناصر القائمة (nav
) متناسقة مع حجم شريط الرأس:
css
.main-nav ul li a {
font-size: 16px; /* حجم خط متوازن مع الهيدر */
font-weight: normal;
letter-spacing: 1px; /* يضيف تباعدًا بين الأحرف لجعل النص أكثر وضوحًا */
}
✔️ letter-spacing
يضيف لمسة جمالية ويوضح محتوى القائمة بشكل أفضل.
✅ 3. تحسين ارتفاع شريط الرأس ليبدو أكثر توازنًا
📌 نريد أن يكون header
مريحًا بصريًا وغير مزدحم:
css
#main-header {
height: 70px; /* حجم أكثر تناسقًا لشريط الرأس */
padding: 10px 20px; /* توازن بين الهوامش الداخلية */
}
✔️ الآن شريط الرأس سيكون أكثر توازنًا ومريحًا للتصفح!
🎯 جرب هذه التعديلات وأخبرني إن كنت بحاجة إلى ضبط إضافي! 😊🔥 🚀 هل ترغب أيضًا في تعديل لون الخط أو إضافة تأثيرات عند التمرير؟
🚀 لتحسين كتابة الصفحة والخطوط وجعل النص متناسقًا داخل الإطار، سنقوم بتعديلات في CSS لضبط الحجم والتباعد بين النصوص.
✅ 1. تحسين خطوط النص الأساسي في الصفحة
📌 نريد أن يكون النص واضحًا ومريحًا للقراءة باستخدام خط أكثر أناقة:
css
body {
font-family: 'Poppins', sans-serif; /* خط عصري وسهل القراءة */
font-size: 18px; /* حجم النص الأساسي */
line-height: 1.6; /* تحسين المسافات بين السطور */
color: #333;
}
✔️ تم تحسين line-height
لضمان تناسق السطور وجعلها أكثر راحة للعين. ✔️ يمكنك تغيير Poppins
إلى أي خط آخر تفضله من Google Fonts.
✅ 2. ضبط النص داخل الإطار وإبعاده عن الحواف
📌 إذا كان النص خارج الإطار، يمكننا إضافة هوامش داخلية (padding
) وضبط التباعد (margin
):
css
.content {
max-width: 800px;
margin: 20px auto;
padding: 30px; /* هوامش داخلية لتوسيع المساحة داخل الإطار */
background: white;
border-radius: 5px;
text-align: justify; /* يجعل النص منسقًا بشكل مرتب */
}
✔️ text-align: justify;
يجعل النص متناسقًا على كلا الجانبين، مما يمنحه مظهرًا احترافيًا. ✔️ زيادة padding
توفر مساحة أفضل داخل الإطار، مما يحسن قراءة المحتوى.
✅ 3. ضبط عناوين الصفحة لتحسين المظهر العام
📌 يمكننا تحسين حجم العناوين (h1
, h2
, h3
) وجعلها أكثر وضوحًا:
css
h1, h2, h3 {
font-family: 'Poppins', sans-serif;
font-weight: bold;
color: #0073aa; /* لون مميز للعناوين */
margin-bottom: 20px; /* يترك مسافة بين العنوان والنص */
}
✔️ تم ضبط margin-bottom
ليكون هناك فصل واضح بين العناوين والمحتوى.
🚀 المشكلة قد تكون بسبب التباعد الداخلي (padding
) أو الهوامش (margin
) غير المتناسقة، لذا سأقوم بتحسين تنسيق النص داخل الإطار لضمان أنه يبقى ضمن حدوده دون خروج عن الإطار.
✅ 1. ضبط content
لإعادة النص إلى الداخل
📌 تأكد من أن العناصر داخل content
لا تتجاوز حدوده عبر تحسين max-width
والهوامش الداخلية:
css
.content {
max-width: 800px;
margin: 20px auto;
padding: 40px; /* زيادة المساحة الداخلية */
background: white;
border-radius: 5px;
overflow: hidden; /* يمنع أي محتوى من الخروج خارج الإطار */
}
✔️ تمت زيادة padding
لترك مساحة كافية للنص داخل الإطار. ✔️ overflow: hidden;
يمنع خروج أي عنصر خارج المحتوى المحدد.
✅ 2. ضبط text-align
والتباعد بين السطور
📌 إذا كان النص يخرج بسبب تكدس الأحرف، يمكننا تحسين توزيع النصوص عبر word-wrap
و text-align
:
css
p {
text-align: justify; /* ترتيب النص بشكل متناسق بين الجانبين */
word-wrap: break-word; /* يمنع الكلمات الطويلة من الخروج عن الإطار */
line-height: 1.8; /* تحسين المسافات بين السطور */
}
✔️ word-wrap: break-word;
يضمن أن الكلمات الطويلة لا تتجاوز حد الصفحة. ✔️ زيادة line-height
يجعل القراءة أكثر راحة وسلاسة.
✅ 3. التأكد من عدم وجود margin
أو padding
زائدة في body
📌 تحقق من أن body
لا يحتوي على هوامش خارجية تسبب خروج النص عن الإطار:
css
body {
margin: 0;
padding: 0;
}
✔️ إزالة الهوامش الافتراضية يجنب أي تداخل غير مطلوب.
🎯 جرب هذه التعديلات وأخبرني إن كان النص أصبح داخل الإطار كما تريد! 😊🔥 🚀 هل هناك أي تفاصيل أخرى ترغب في تحسينها؟
🚀 إذا كان بعض النص يختفي في نهاية الصفحة من جهة اليمين، فهذا يعني أن هناك مشكلة في التنسيق أو تجاوز حدود العرض. إليك حلولًا دقيقة لضبط المشكلة تمامًا:
✅ 1. ضبط max-width
في content
لمنع تجاوز الحدود
📌 إذا كان النص يتجاوز الإطار، نحتاج إلى ضبط عرض المحتوى بشكل آمن:
css
.content {
max-width: 800px; /* يحدد العرض الأقصى للمحتوى */
margin: 20px auto;
padding: 30px;
background: white;
border-radius: 5px;
overflow: hidden; /* يمنع خروج النص خارج الحدود */
word-wrap: break-word; /* يكسر الكلمات الطويلة حتى لا تتجاوز الحدود */
}
✔️ overflow: hidden;
يمنع أي محتوى إضافي من الخروج عن الإطار. ✔️ word-wrap: break-word;
يحل مشكلة الكلمات الطويلة التي تمتد خارج الصفحة.
✅ 2. ضبط body
لمنع أي امتداد غير مرغوب فيه
📌 بعض القوالب تضيف overflow-x: hidden;
الذي قد يسبب اختفاء النص عند الجوانب.
css
body {
margin: 0;
padding: 0;
overflow-x: visible; /* يضمن أن النص لا يختفي عند الجوانب */
}
✔️ إذا كان overflow-x: hidden;
موجودًا، قم بتعديله إلى visible
لمنع القطع.
✅ 3. ضبط text-align
والتباعد بين النصوص
📌 عند استخدام text-align: justify;
، يجب أن تكون هناك هوامش كافية لمنع اختفاء الكلمات في الحواف.
css
p {
text-align: justify;
word-spacing: 2px; /* يضيف مسافة بين الكلمات لتحسين القراءة */
line-height: 1.8; /* تحسين المسافات بين السطور */
}
✔️ word-spacing
يساعد على ضبط النص ويمنع تكدس الحروف في الزوايا. ✔️ تم ضبط line-height
لتحسين توزيع النص وجعله أكثر راحة للعين.
🚀 لجعل القالب عربي بالكامل بحيث يكون اتجاه المحتوى من اليمين إلى اليسار (RTL
)، سنقوم بإضافة دعم للغة العربية عبر ضبط CSS
و WordPress functions
. إليك الطريقة المثالية لتنفيذه:
✅ 1. إضافة دعم RTL
إلى style.css
📌 تأكد من ضبط اتجاه النص بالكامل ليكون من اليمين إلى اليسار:
css
body {
direction: rtl; /* يجعل القالب يعمل من اليمين إلى اليسار */
unicode-bidi: embed; /* دعم أفضل للنصوص العربية */
font-family: 'Tajawal', sans-serif; /* خط عربي عصري */
}
✔️ direction: rtl;
يضبط اتجاه الصفحة بحيث يبدأ المحتوى من اليمين. ✔️ يمكنك استخدام Tajawal
أو أي خط عربي مدعوم من Google Fonts.
✅ 2. ضبط القائمة (nav
) لتكون من اليمين إلى اليسار
📌 عند تحويل القالب للغة العربية، يجب أن تبدأ القائمة من اليمين بدلًا من اليسار:
css
.main-nav ul {
list-style: none;
display: flex;
justify-content: flex-end; /* يجعل العناصر تبدأ من اليمين */
padding: 0;
margin: 0;
}
✔️ القائمة الآن ستظهر في أقصى اليمين بجانب الشعار.
✅ 3. دعم RTL
تلقائيًا في functions.php
📌 يجب على WordPress تحميل ملفات rtl.css
تلقائيًا عند استخدام اللغة العربية:
php
function load_rtl_styles() {
if (is_rtl()) {
wp_enqueue_style('rtl-style', get_template_directory_uri() . '/rtl.css');
}
}
add_action('wp_enqueue_scripts', 'load_rtl_styles');
✔️ هذا الكود يتأكد من أن القالب سيستخدم rtl.css
عند ضبط اللغة إلى العربية.
🎯 جرب هذه التعديلات وأخبرني إن كنت بحاجة إلى ضبط إضافي! 😊🔥 🚀 هل ترغب أيضًا في تحسين تناسق الخطوط أو ضبط الهوامش؟
🚀 لجعل الصفحة تبدأ من اليمين إلى اليسار بالكامل لدعم اللغة العربية (RTL
)، سنقوم بتحديث CSS و WordPress settings لضبط الاتجاه بشكل صحيح.
✅ 1. ضبط direction: rtl;
للصفحة بالكامل
📌 تأكد من أن الاتجاه الأساسي للصفحة يعمل من اليمين إلى اليسار:
css
body {
direction: rtl; /* يجعل المحتوى يبدأ من اليمين */
unicode-bidi: embed; /* يدعم النصوص العربية بشكل صحيح */
font-family: 'Tajawal', sans-serif; /* خط عربي عصري */
}
✔️ هذا يضمن أن كل العناصر ستتحرك تلقائيًا إلى اليمين. ✔️ unicode-bidi: embed;
يساعد على تنسيق النصوص المختلطة مثل العربية والإنجليزية.
✅ 2. ضبط القائمة (nav
) بحيث تبدأ من اليمين
📌 عند استخدام RTL، يجب أن تبدأ القائمة من اليمين:
css
.main-nav ul {
list-style: none;
display: flex;
justify-content: flex-end; /* يجعل العناصر تبدأ من اليمين */
padding: 0;
margin: 0;
}
✔️ القائمة ستظهر الآن في أقصى اليمين، وفقًا لاتجاه اللغة العربية.
✅ 3. تحميل rtl.css
تلقائيًا عبر functions.php
📌 يجب على WordPress تحميل rtl.css
عندما يكون الموقع باللغة العربية:
php
function load_rtl_styles() {
if (is_rtl()) {
wp_enqueue_style('rtl-style', get_template_directory_uri() . '/rtl.css');
}
}
add_action('wp_enqueue_scripts', 'load_rtl_styles');
✔️ هذا الكود يجعل WordPress يستخدم rtl.css
فقط عند تعيين اللغة إلى العربية.
يبدو أن هناك خلل في المحاذاة جعل الشعار يتحرك إلى أقصى اليسار بدلاً من أن يكون في اليمين. 🚀 لا تقلق، سنقوم بإصلاح هذا الخطأ عبر ضبط CSS
.
✅ الحل: ضبط flexbox
لضمان بقاء الشعار في اليمين
📌 في style.css
، تأكد من أن logo-container
يستخدم المحاذاة الصحيحة:
css
.logo-container {
display: flex;
align-items: center;
justify-content: flex-end; /* يضمن بقاء الشعار في أقصى اليمين */
width: auto;
}
✔️ هذا التعديل يعيد الشعار إلى اليمين دون أن يتحرك بشكل غير متوقع.
✅ مراجعة header.php
لضبط ترتيب العناصر
📌 يجب أن يكون الشعار موضوعًا بعد القائمة وليس قبلها لضمان ظهوره في مكانه الصحيح:
php
<header id="main-header">
<nav class="main-nav">
<?php wp_nav_menu(array('theme_location' => 'primary')); ?>
</nav>
<div class="logo-container">
<img src="<?php echo get_template_directory_uri(); ?>/images/logo.png" alt="شعار الموقع">
</div>
</header>
✔️ القائمة الآن تبدأ من اليمين، والشعار يظل في أقصى اليمين بجانبها.
🚀 إذا كان الشعار لا يزال في أقصى اليسار، فهذا يعني أن هناك مشكلة في المحاذاة داخل CSS
. دعنا نحل هذه المشكلة بشكل دقيق!
✅ 1. ضبط logo-container
ليكون في أقصى اليمين
📌 تأكد من أن justify-content
مضبوط على flex-end
لضمان وضع الشعار في أقصى اليمين:
css
.logo-container {
display: flex;
align-items: center;
justify-content: flex-end; /* يجعل الشعار في أقصى اليمين */
width: auto;
}
✔️ إذا كنت تستخدم flex-start
، فسيظهر الشعار في اليسار، لذا تأكد من استخدام flex-end
.
✅ 2. ضبط header.php
لتكون القائمة قبل الشعار
📌 تأكد من ترتيب العناصر داخل header.php
بحيث يكون الشعار آخر عنصر لضمان ظهوره في اليمين:
php
<header id="main-header">
<nav class="main-nav">
<?php wp_nav_menu(array('theme_location' => 'primary')); ?>
</nav>
<div class="logo-container">
<img src="<?php echo get_template_directory_uri(); ?>/images/logo.png" alt="شعار الموقع">
</div>
</header>
✔️ القائمة الآن في أقصى اليمين، والشعار بجانبها مباشرة.
✅ 3. التأكد من أن rtl
مفعل بالكامل
📌 أضف direction: rtl;
لجعل المحتوى يعمل من اليمين إلى اليسار دون تداخل:
css
body {
direction: rtl;
unicode-bidi: embed;
}
✔️ هذا يضمن أن كل المحتوى يظهر وفقًا للغة العربية.
🚀 إليك بعض التحسينات الدقيقة لضمان أداء أكثر سلاسة واستقرارًا، بالإضافة إلى تعديل بعض الأخطاء الطفيفة في المحاذاة والتباعد.
✅ 1. تحسين محاذاة logo-container
والقائمة
📌 المشكلة الحالية قد تكون بسبب عدم توازن المحاذاة بين القائمة والشعار. يمكننا ضبط المحاذاة بشكل أدق:
css
#main-header {
display: flex;
align-items: center;
justify-content: space-between; /* يجعل القائمة في أقصى اليسار والشعار في أقصى اليمين */
padding: 10px 20px;
}
✔️ الآن القائمة ستظهر بشكل صحيح على اليسار، بينما الشعار سيبقى في أقصى اليمين.
✅ 2. إزالة التكرار في font-family
وتحسين الخط العام
📌 لاحظت أنك تستخدم خط Poppins
داخل #main-header
بينما الصفحة تستخدم Tajawal
. يفضل توحيد الخطوط:
css
#main-header {
font-family: 'Tajawal', sans-serif; /* جعل الخط متناسقًا مع باقي القالب */
}
✔️ يضمن التناسق وعدم تبدل الخطوط بشكل مفاجئ داخل الهيدر.
✅ 3. ضبط margin-left
في logo-container
لتجنب التباعد غير المتناسق
📌 margin-left: 15px;
يمكن أن يتسبب في دفع الشعار نحو الداخل أكثر من اللازم:
css
.logo-container img {
width: 120px;
margin-left: auto; /* يضمن وضع الشعار في أقصى اليمين */
}
✔️ الآن لن تكون هناك فجوة غير متوقعة بين الشعار والقائمة.
✅ 4. تحسين hidden-header
ليكون أكثر سلاسة
📌 عند إخفاء header
عند التمرير، استخدم تأثيرًا أكثر مرونة:
css
.hidden-header {
transform: translateY(-110%);
opacity: 0;
transition: opacity 0.4s ease-in-out, transform 0.4s ease-in-out;
}
✔️ الحركة أصبحت سلسة دون تأثير مفاجئ على التصميم.
🚀 إليك الكود الكامل مع ضبط دقيق لضمان أن الشعار يظهر في أقصى اليمين، بينما تكون القائمة بجانبه مباشرة بمحاذاة مثالية.
🔹 1. header.php
– ضبط ترتيب الشعار والقائمة
📌 تم وضع القائمة أولًا، ثم الشعار ليكون في أقصى اليمين بشكل ثابت.
php
<header id="main-header">
<nav class="main-nav">
<?php wp_nav_menu(array('theme_location' => 'primary')); ?>
</nav>
<div class="logo-container">
<img src="<?php echo get_template_directory_uri(); ?>/images/logo.png" alt="شعار الموقع">
</div>
</header>
✔️ الآن القائمة ستظهر في اليمين، والشعار بجانبها مباشرة في أقصى اليمين!
🔹 2. style.css
– تحسين تنسيق الشعار والقائمة
📌 تم ضبط flexbox
بحيث يكون الشعار في اليمين والقائمة بمحاذاته دون أي تداخل.
css
/* ضبط الخط العام والخلفية */
body {
direction: rtl;
unicode-bidi: embed;
font-family: 'Tajawal', sans-serif;
background-color: #f4f4f4;
color: #333;
margin: 0;
padding: 0;
padding-top: 80px;
font-size: 18px;
line-height: 1.6;
overflow-x: visible;
}
/* تحسين تصميم شريط الرأس */
#main-header {
position: fixed;
width: 100%;
top: 32px;
left: 0;
background: #34d304;
display: flex;
align-items: center;
justify-content: space-between; /* يجعل القائمة في أقصى اليسار والشعار في أقصى اليمين */
padding: 10px 20px;
box-shadow: 0px 4px 10px rgba(30, 190, 78, 0.1);
transition: transform 0.4s ease-in-out;
z-index: 1000;
}
body.admin-bar #main-header {
top: 46px;
}
/* تحسين محاذاة الشعار */
.logo-container {
display: flex;
align-items: center;
justify-content: flex-end; /* يضع الشعار في أقصى اليمين */
}
.logo-container img {
width: 120px;
margin-left: auto; /* يمنع أي تداخل غير مرغوب فيه بين الشعار والقائمة */
}
/* تحسين تصميم القائمة */
.main-nav ul {
list-style: none;
display: flex;
justify-content: flex-start; /* محاذاة العناصر للقائمة */
padding: 0;
margin: 0;
}
.main-nav ul li {
margin: 0 15px;
}
.main-nav ul li a {
text-decoration: none;
color: white;
padding: 10px 15px;
transition: background 0.3s ease-in-out;
}
.main-nav ul li a:hover {
background: rgba(7, 91, 201, 0.3);
border-radius: 5px;
}
.main-nav ul li a {
font-size: 16px;
font-weight: normal;
letter-spacing: 1px;
}
/* إخفاء الهيدر عند التمرير */
.hidden-header {
transform: translateY(-110%);
opacity: 0;
transition: opacity 0.4s ease-in-out, transform 0.4s ease-in-out;
}
✔️ الشعار الآن في أقصى اليمين بشكل ثابت، مع قائمة مرتبة بجانبه. ✔️ تم تحسين hidden-header
لجعل حركة التمرير أكثر سلاسة.
🔹 3. script.js
– ضبط حركة الهيدر عند التمرير
📌 تم تحسين الكود لضمان أن الهيدر يختفي عند النزول ويعود عند التمرير للأعلى.
js
let lastScrollTop = 0;
const header = document.getElementById("main-header");
window.addEventListener("scroll", function() {
let scrollTop = window.scrollY;
if (scrollTop > lastScrollTop && scrollTop > 80) {
header.classList.add("hidden-header"); // يخفي الهيدر عند النزول
} else {
header.classList.remove("hidden-header"); // يظهر عند التمرير للأعلى
}
lastScrollTop = scrollTop;
});
✔️ الآن الهيدر سيتفاعل بسلاسة مع التمرير، دون أي تأثيرات غير مرغوبة.
🚀 ومع ذلك، هناك بعض التحسينات الطفيفة لضمان أفضل محاذاة للشعار والقائمة، وثبات العناصر داخل شريط الرأس. إليك التعديلات المقترحة:
🔹 1. تحسين محاذاة logo-container
داخل #main-header
📌 حاليًا، الشعار موضوع داخل flex-end
، مما قد يؤدي إلى تحريكه بعيدًا عن القائمة. الحل هو جعله بجانب القائمة مباشرة داخل flexbox
:
css
#main-header {
display: flex;
align-items: center;
justify-content: space-between; /* يضمن أن الشعار على اليمين والقائمة بجانبه */
padding: 10px 20px;
}
✔️ الآن الشعار سيكون في أقصى اليمين، والقائمة بجانبه مباشرة دون تداخل.
🔹 2. تحسين logo-container
لمنع أي تباعد غير مرغوب فيه
📌 يجب إزالة margin-left
من الشعار حتى لا يتحرك نحو الداخل:
css
.logo-container img {
width: 120px;
margin-left: 0; /* يمنع دفع الشعار بعيدًا عن القائمة */
}
✔️ هذا يضمن أن الشعار يظل في أقصى اليمين دون أي مسافات إضافية.
🔹 3. ضبط القائمة (.main-nav ul
) بحيث تبقى بجانب الشعار
📌 تأكد من أن القائمة لا تتحرك بعيدًا عن الشعار عبر ضبط justify-content
:
css
.main-nav ul {
display: flex;
justify-content: flex-start; /* تبقى بجانب الشعار */
padding: 0;
margin: 0;
}
✔️ الآن ستظهر القائمة بجانب الشعار مباشرة دون أي فراغات غير ضرورية.
🔹 4. تحسين hidden-header
لجعل الحركة أكثر سلاسة
📌 عند التمرير، يجب أن يختفي header
بسلاسة وليس بشكل مفاجئ:
css
.hidden-header {
transform: translateY(-110%);
opacity: 0;
transition: opacity 0.4s ease-in-out, transform 0.4s ease-in-out;
}
✔️ الآن اختفاء الهيدر سيكون سلسًا عند التمرير للأسفل ويظهر بسلاسة عند العودة للأعلى.
🚀 سأقوم بتحسين الكود ليشمل دعم اللغة العربية بالكامل مع ضبط محاذاة العناوين والنصوص إلى اليمين وضمان تنسيق مثالي للمحتوى. إليك الكود المحسن بالكامل:
🔹 1. تحسين style.css
لدعم اللغة العربية والمحاذاة الصحيحة
📌 إضافة RTL
وضبط المحاذاة ليكون النص والعناوين من اليمين إلى اليسار بشكل كامل.
css
/* ضبط اللغة العربية واتجاه الصفحة */
body {
direction: rtl;
unicode-bidi: embed;
font-family: 'Tajawal', sans-serif;
background-color: #f4f4f4;
color: #333;
margin: 0;
padding: 0;
padding-top: 80px;
font-size: 18px;
line-height: 1.6;
text-align: right; /* يضمن محاذاة النصوص إلى اليمين */
}
/* تحسين تنسيق العناوين */
h1, h2, h3 {
font-family: 'Tajawal', sans-serif;
font-weight: bold;
color: #0073aa;
margin-bottom: 20px;
text-align: right; /* يضمن محاذاة العنوان إلى اليمين */
}
/* ضبط النصوص ليكون أكثر تناسقًا */
p {
text-align: right; /* محاذاة النصوص بالكامل إلى اليمين */
word-spacing: 2px;
line-height: 1.8;
}
/* تحسين تنسيق المحتوى */
.content {
max-width: 800px;
margin: 20px auto;
padding: 30px;
background: white;
border-radius: 5px;
overflow: hidden;
word-wrap: break-word;
}
/* تحسين شريط الرأس */
#main-header {
position: fixed;
width: 100%;
top: 32px;
left: 0;
background: #34d304;
display: flex;
align-items: center;
justify-content: space-between; /* يضمن أن القائمة في أقصى اليسار والشعار في أقصى اليمين */
padding: 10px 20px;
box-shadow: 0px 4px 10px rgba(30, 190, 78, 0.1);
transition: transform 0.4s ease-in-out;
z-index: 1000;
}
body.admin-bar #main-header {
top: 46px;
}
/* تحسين محاذاة الشعار */
.logo-container {
display: flex;
align-items: center;
justify-content: flex-end;
}
.logo-container img {
width: 120px;
margin-left: auto;
}
/* ضبط القائمة لتكون بجانب الشعار */
.main-nav ul {
list-style: none;
display: flex;
justify-content: flex-start;
padding: 0;
margin: 0;
}
.main-nav ul li {
margin: 0 15px;
}
.main-nav ul li a {
text-decoration: none;
color: white;
padding: 10px 15px;
transition: background 0.3s ease-in-out;
text-align: right;
}
.main-nav ul li a:hover {
background: rgba(7, 91, 201, 0.3);
border-radius: 5px;
}
/* تحسين إخفاء الهيدر عند التمرير */
.hidden-header {
transform: translateY(-110%);
opacity: 0;
transition: opacity 0.4s ease-in-out, transform 0.4s ease-in-out;
}
✔️ تم ضبط جميع النصوص والعناوين والمحاذاة إلى اليمين بالكامل. ✔️ تم تحسين التنسيق العام ليكون أكثر تناسقًا مع اللغة العربية.
🔹 2. تحسين script.js
لحركة الهيدر عند التمرير
📌 إضافة حركة أكثر سلاسة لهيدر الصفحة عند التمرير للأسفل وللأعلى.
js
let lastScrollTop = 0;
const header = document.getElementById("main-header");
window.addEventListener("scroll", function() {
let scrollTop = window.scrollY;
if (scrollTop > lastScrollTop && scrollTop > 80) {
header.classList.add("hidden-header");
} else {
header.classList.remove("hidden-header");
}
lastScrollTop = scrollTop;
});
✔️ الآن شريط الرأس سيختفي بسلاسة عند التمرير للأسفل ويعود عند التمرير للأعلى.
🚀 إذا كان النص يخرج عن الإطار، فهذا غالبًا بسبب عدم ضبط max-width
بشكل صحيح أو وجود هوامش زائدة تدفع المحتوى خارج حدوده. إليك الحل لضبط المحتوى داخل الإطار بشكل مثالي:
✅ 1. ضبط content
لمنع خروج النص عن الإطار
📌 تأكد من أن max-width
والهوامش الداخلية مضبوطة بشكل صحيح في style.css
:
css
.content {
max-width: 800px; /* يحدد العرض الأقصى للمحتوى */
width: 100%; /* يضمن أن المحتوى لا يتجاوز العرض المتاح */
margin: 20px auto;
padding: 30px;
background: white;
border-radius: 5px;
overflow: hidden; /* يمنع أي محتوى زائد من الخروج خارج الإطار */
word-wrap: break-word; /* يكسر الكلمات الطويلة تلقائيًا */
}
✔️ تمت إضافة width: 100%;
لضمان عدم تجاوز الحدود. ✔️ overflow: hidden;
يمنع أي امتداد غير مرغوب فيه للمحتوى خارج الإطار.
✅ 2. ضبط body
لمنع التمدد غير المتوقع
📌 بعض القوالب تضيف overflow-x: hidden;
مما قد يؤدي إلى قطع النصوص عند الجوانب:
css
body {
margin: 0;
padding: 0;
overflow-x: auto; /* يسمح بتحريك الصفحة عند الحاجة دون إخفاء المحتوى */
}
✔️ overflow-x: auto;
يتيح تمرير النص عند الحاجة بدلاً من قصه.
✅ 3. ضبط text-align
والتباعد لضمان أن النص يبقى داخل الإطار
📌 عند استخدام text-align: justify;
، تأكد من إضافة هوامش كافية بحيث لا يتم دفع النص خارج الإطار:
css
p {
text-align: justify;
word-spacing: 1px;
line-height: 1.8;
margin-right: 10px; /* يضيف مساحة على اليمين لتجنب خروج النص */
margin-left: 10px; /* يضيف مساحة على اليسار للتوازن */
}
✔️ تمت إضافة margin-right
و margin-left
لضبط النص داخل الإطار بشكل أفضل.
🚀 إذا كان النص لا يزال يخرج عن الإطار، فقد يكون السبب في ذلك عدم ضبط الهوامش والمسافات الداخلية بشكل دقيق. لنقم بحل هذه المشكلة بشكل نهائي عبر تحسين التباعد وتنظيم المحتوى داخل الإطار.
✅ 1. ضبط content
بشكل مثالي لمنع خروج النص
📌 تأكد من أن max-width
مضبوطة بشكل صحيح مع وجود هوامش داخلية مناسبة:
css
.content {
max-width: 800px; /* يحدد العرض الأقصى للمحتوى */
width: 90%; /* يضمن أن المحتوى لا يتجاوز حدود الصفحة */
margin: 20px auto;
padding: 30px;
background: white;
border-radius: 5px;
overflow: hidden; /* يمنع أي محتوى زائد من الخروج خارج الإطار */
word-wrap: break-word; /* يكسر الكلمات الطويلة تلقائيًا */
}
✔️ تم ضبط width: 90%;
لضمان أن المحتوى لا يمتد إلى خارج الصفحة. ✔️ إضافة overflow: hidden;
يمنع أي تجاوز غير متوقع في العرض.
✅ 2. تحسين ضبط body
لضمان ثبات المحتوى
📌 بعض القوالب تضيف overflow-x: hidden;
مما يؤدي إلى اختفاء جزء من النص، لذا تأكد من تغييره إلى التالي:
css
body {
margin: 0;
padding: 0;
overflow-x: auto; /* يسمح بتحريك النص دون فقدانه */
}
✔️ هذا يضمن عدم قص النص عند الجوانب، مما يسمح بتحريكه إذا كان طويلًا جدًا.
✅ 3. تحسين text-align
والتباعد بين النصوص
📌 عند استخدام text-align: justify;
يجب إضافة هوامش لضبط المحتوى داخل الإطار:
css
p {
text-align: justify;
word-spacing: 1px;
line-height: 1.8;
padding-right: 15px; /* يضمن عدم اقتراب النص من الحافة اليمنى */
padding-left: 15px; /* يضمن عدم خروج النص في الحافة اليسرى */
}
✔️ إضافة padding-right
و padding-left
يضمن أن النص يبقى داخل الإطار دون تمدد غير متوقع. ✔️ word-spacing
يجعل الكلمات أكثر وضوحًا وتنظيمًا دون تداخل.
🔹 1. تحديد هيكلة الدروس داخل القالب
📌 يجب أن يكون لكل درس:
- عنوان ووصف واضح
- محتوى الدرس (نص، فيديو، ملفات قابلة للتحميل)
- نظام تتبع التقدم بحيث يعرف المستخدم الدروس التي أكملها
- زر الانتقال إلى الدرس التالي بعد تحقيق شروط معينة (مثل إنهاء الفيديو أو اجتياز اختبار)
🔹 2. اختيار التكنولوجيا المناسبة
📌 بما أنك تتقن PHP و WordPress، يمكننا بناء النظام باستخدام:
- Custom Post Types في WordPress لتنظيم الدروس
- AJAX لتحديث التقدم دون إعادة تحميل الصفحة
- LocalStorage أو قاعدة بيانات MySQL لتتبع تقدم المستخدم
- إضافة اختبار قصير في نهاية كل درس لضمان الفهم قبل الانتقال للخطوة التالية
🔹 3. إنشاء كود أساسي لنقل المستخدم إلى الدرس التالي
📌 يمكننا استخدام JavaScript و AJAX لجعل النظام أكثر تفاعلية:
js
document.getElementById("next-lesson-btn").addEventListener("click", function() {
let currentLesson = parseInt(localStorage.getItem("currentLesson")) || 1;
currentLesson++;
localStorage.setItem("currentLesson", currentLesson);
window.location.href = `lesson-${currentLesson}.php`;
});
✔️ هذا الكود يقوم بتخزين تقدم المستخدم، ثم ينقله إلى الدرس التالي تلقائيًا. ✔️ إذا أردنا استخدام قاعدة بيانات، يمكننا حفظ التقدم هناك بدلاً من localStorage
.
🎯 هل تود إضافة ميزات مثل تقييم الأداء أو منح شهادات بعد إنهاء الدورات؟ 😊🔥 🚀 أخبرني إن كنت ترغب في تخصيص القالب ليكون أكثر تفاعلية!
🚀 يمكنك إنشاء ملف خاص يحتوي على الأكواد التي تحتاجها، ثم استدعاؤه إلى الصفحة عند الحاجة. هناك عدة طرق لتنفيذ ذلك بناءً على ما تريد تضمينه في الملف:
🔹 1. إنشاء ملف PHP خاص واستدعاؤه في القالب
📌 مثلاً، يمكنك إنشاء ملف lesson-functions.php
يحتوي على وظائف خاصة بالدروس:
php
<?php
// ملف خاص بوظائف الدروس
function get_next_lesson_link($currentLesson) {
$nextLesson = $currentLesson + 1;
return "lesson-$nextLesson.php";
}
?>
✔️ الآن يمكنك استدعاء هذا الملف داخل أي صفحة باستخدام require_once
:
php
<?php require_once 'lesson-functions.php'; ?>
<a href="<?php echo get_next_lesson_link(1); ?>">انتقل إلى الدرس التالي</a>
🔹 2. إنشاء ملف CSS منفصل واستدعاؤه في الصفحة
📌 مثلاً، يمكنك إنشاء custom-style.css
وإضافة التنسيقات الخاصة به:
css
.lesson-container {
background: #f4f4f4;
padding: 20px;
border-radius: 5px;
text-align: right;
}
✔️ ثم استدعاؤه داخل header.php
أو أي صفحة أخرى:
html
<link rel="stylesheet" href="custom-style.css">
🔹 3. إنشاء ملف JavaScript منفصل
📌 مثلاً، يمكنك إنشاء lesson-script.js
لإضافة وظيفة تفاعل:
js
document.getElementById("next-lesson-btn").addEventListener("click", function() {
alert("انتقل إلى الدرس التالي!");
});
✔️ ثم استدعاؤه داخل الصفحة أو footer.php
:
html
<script src="lesson-script.js"></script>
🚀 يمكنك إنشاء ملف خاص بالدورة بحيث يحتوي على جميع الدروس، المحتوى، والوظائف الخاصة بها، ثم استدعاؤه داخل صفحات WordPress بطريقة منظمة. إليك الطريقة العملية لتنفيذ ذلك:
🔹 1. إنشاء ملف خاص بالدورة (مثلاً course.php
)
📌 هذا الملف يمكن أن يحتوي على هيكلة الدورة وجميع الدروس:
php
<?php
// تحميل WordPress ليكون جزءًا من النظام
require_once("wp-load.php");
// تعريف بيانات الدورة
$course_title = "دورة تطوير الويب";
$lessons = array(
"درس 1 - HTML الأساسي",
"درس 2 - CSS والتنسيق",
"درس 3 - JavaScript والتفاعلية",
"درس 4 - PHP والتطوير الديناميكي"
);
?>
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<title><?php echo $course_title; ?></title>
<link rel="stylesheet" href="custom-style.css">
</head>
<body>
<div class="course-container">
<h1><?php echo $course_title; ?></h1>
<ul>
<?php foreach ($lessons as $lesson): ?>
<li><?php echo $lesson; ?></li>
<?php endforeach; ?>
</ul>
</div>
</body>
</html>
✔️ هذا الملف يستعرض الدورة والدروس تلقائيًا. ✔️ يمكنك تعديله ليكون أكثر تفاعلية حسب الحاجة.
🔹 2. استدعاء ملف الدورة داخل WordPress
📌 إذا كنت تريد إدراج الدورة داخل صفحات WordPress، يمكنك استخدام:
php
<?php include("course.php"); ?>
✔️ هذا يدمج الدورة داخل أي قالب أو صفحة بسهولة.
✅ 1. تأكد من أن course.php
موجود في المسار الصحيح
📌 تحقق من أن ملف course.php
موجود داخل مجلد القالب وليس في مكان آخر. 🔹 إذا كنت تستخدم WordPress، ضع الملف داخل wp-content/themes/Schwila-WP/
.
✅ 2. استخدم require_once
بدلاً من include
📌 بعض الأحيان لا يتم تحميل الملف بسبب مشاكل في المسارات، لذا جرب استدعاءه هكذا:
php
<?php require_once get_template_directory() . '/course.php'; ?>
✔️ يضمن أن الملف يتم تحميله من مجلد القالب بشكل صحيح.
✅ 3. تأكد من أن ملف course.php
يحتوي على HTML
واضح
📌 أضف بعض النصوص التجريبية للتأكد من أن الملف يتم تحميله:
php
<?php
echo "تم تحميل ملف الدورة بنجاح!";
?>
✔️ إذا ظهر هذا النص، فهذا يعني أن الملف يعمل، وإلا فقد يكون هناك مشكلة في المسار.
✅ 1. إذا كنت تستخدم ملفات PHP مستقلة
📌 يمكنك إنشاء مجلد داخل القالب باسم lessons
ووضع كل درس فيه:
/wp-content/themes/Schwila-WP/lessons/
ثم إنشاء ملفات لكل درس مثل:
lesson-1.php
lesson-2.php
lesson-3.php
✔️ يمكنك استدعاء كل درس داخل course.php
باستخدام:
php
<?php include get_template_directory() . '/lessons/lesson-1.php'; ?>
✅ 2. إذا كنت تريد إدارة الدروس داخل WordPress
📌 استخدم Custom Post Types لإنشاء “دروس” داخل لوحة التحكم في WordPress. ✔️ أضف هذا الكود إلى functions.php
لإنشاء نوع مخصص للدروس:
php
function create_lessons_post_type() {
register_post_type('lesson',
array(
'labels' => array(
'name' => __('الدروس'),
'singular_name' => __('درس')
),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail'),
'rewrite' => array('slug' => 'lessons'),
)
);
}
add_action('init', 'create_lessons_post_type');
✔️ يمكنك الآن إضافة كل درس كمقال داخل WordPress!
🎯 هل تفضل طريقة الملفات المستقلة أم نظام WordPress؟ 😊🔥 🚀 أخبرني إن كنت بحاجة إلى ضبط إضافي!
اين اضع هدا الرابط <?php include get_template_directory() . ‘/lessons/lesson-1.php’; ?>
يمكنك وضع هذا الكود داخل أي قالب أو صفحة PHP داخل WordPress حيث تريد أن يظهر محتوى الدرس. إليك بعض الأماكن المناسبة لوضعه:
✅ 1. داخل single.php
أو page.php
إذا كنت تريد عرضه في صفحات معينة
📌 إذا كنت تريد أن يظهر محتوى الدرس في صفحات WordPress، ضع الكود داخل page.php
:
php
<?php include get_template_directory() . '/lessons/lesson-1.php'; ?>
✔️ هذا سيعرض محتوى الدرس داخل كل صفحة مخصصة له في القالب.
✅ 2. داخل template-parts/
لإنشاء تصميم مخصص للدروس
📌 يمكنك إنشاء قالب مخصص للدروس داخل template-parts/lesson.php
ثم استدعاؤه داخل single-lesson.php
:
php
<?php get_template_part('template-parts/lesson', 'lesson-1'); ?>
✔️ هذا يتيح لك إدارة محتوى الدروس بشكل منفصل ضمن القالب.
✅ 3. داخل functions.php
إذا كنت تريد تضمينه برمجيًا
📌 إذا كنت تريد إضافة الدرس تلقائيًا إلى صفحات معينة، يمكنك استدعاؤه داخل functions.php
:
php
function load_lesson_template() {
include get_template_directory() . '/lessons/lesson-1.php';
}
add_action('wp_head', 'load_lesson_template');
✔️ هذا يضمن تحميل الدرس داخل رأس الصفحة دون الحاجة لإضافته يدويًا.
✅ 1. تعديل course.php
ليشمل جميع الدروس
📌 يمكنك استخدام مصفوفة array
لتحديد الدروس وجعلها تظهر تلقائيًا داخل الصفحة:
php
<?php
require_once("wp-load.php");
// تعريف بيانات الدورة
$course_title = "دورة تطوير الويب";
$lessons = array(
"lesson-1.php" => "درس 1 - HTML الأساسي",
"lesson-2.php" => "درس 2 - CSS والتنسيق",
"lesson-3.php" => "درس 3 - JavaScript والتفاعلية",
"lesson-4.php" => "درس 4 - PHP والتطوير الديناميكي"
);
?>
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<title><?php echo $course_title; ?></title>
<link rel="stylesheet" href="custom-style.css">
</head>
<body>
<div class="course-container">
<h1><?php echo $course_title; ?></h1>
<ul>
<?php foreach ($lessons as $lesson_file => $lesson_title): ?>
<li><a href="?lesson=<?php echo $lesson_file; ?>"><?php echo $lesson_title; ?></a></li>
<?php endforeach; ?>
</ul>
<div class="lesson-content">
<?php
if (isset($_GET['lesson']) && array_key_exists($_GET['lesson'], $lessons)) {
include "lessons/" . $_GET['lesson'];
} else {
echo "<p>اختر درسًا للبدء!</p>";
}
?>
</div>
</div>
</body>
</html>
✔️ الآن سيتم تحميل الدرس المحدد داخل course.php
عند النقر عليه. ✔️ يمكنك إضافة أي عدد من الدروس داخل المصفوفة.
✅ 2. كيف يعمل الكود؟
📌 عند نقر المستخدم على أي درس، يتم تمرير اسم الملف عبر GET
وعرض محتوى الدرس داخل course.php
مباشرة. ✔️ إذا لم يتم اختيار أي درس، ستظهر رسالة “اختر درسًا للبدء”. ✔️ كل درس يتم تحميله بدون الحاجة لإعادة تحميل الصفحة بأكملها.
🔹 1. إنشاء ملف lesson-1.php
📌 هذا الملف سيعرض الدرس الأول مع محتوى تفاعلي:
php
<?php
session_start();
$_SESSION['lesson_completed'] = true;
?>
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<title>درس 1 - أساسيات HTML</title>
<link rel="stylesheet" href="../custom-style.css">
</head>
<body>
<div class="lesson-container">
<h1>🔹 درس 1 - أساسيات HTML</h1>
<p>HTML هي لغة بناء هيكل صفحات الويب. في هذا الدرس سنتعلم:</p>
<ul>
<li>ما هي HTML؟</li>
<li>كيفية إنشاء صفحة HTML</li>
<li>العناصر الأساسية مثل العناوين والفقرات والروابط</li>
</ul>
<h2>🎥 فيديو تعليمي:</h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/your-video-id" frameborder="0" allowfullscreen></iframe>
<h2>📜 تمرين عملي:</h2>
<p>قم بإنشاء صفحة HTML تحتوي على عنوان وفقرة ونص رابط.</p>
<form method="POST">
<button type="submit" name="complete_lesson">✅ أنهيت الدرس!</button>
</form>
<?php
if (isset($_POST['complete_lesson'])) {
echo '<a href="?lesson=lesson-2.php" class="next-button">➡️ انتقل إلى الدرس التالي</a>';
}
?>
</div>
</body>
</html>
✔️ يتضمن الدرس محتوى تعليمي، فيديو، وتمرين عملي. ✔️ عند الضغط على “✅ أنهيت الدرس!” يظهر زر للانتقال إلى الدرس التالي.
🔹 2. ضبط الدورة لاستدعاء الدروس داخل course.php
📌 في ملف course.php
تأكد من أن الدروس يتم تحميلها ديناميكيًا:
php
<?php
if (isset($_GET['lesson']) && file_exists("lessons/" . $_GET['lesson'])) {
include "lessons/" . $_GET['lesson'];
} else {
echo "<p>اختر درسًا للبدء!</p>";
}
?>
✔️ الآن سيتم تحميل أي درس بناءً على اختيار المستخدم.
🔹 course.php
– نظام الدروس المتدرج
📌 تم تحسين الكود ليشمل:
- ✅ تحميل الدروس ديناميكيًا
- ✅ حفظ تقدم المستخدم
- ✅ إظهار رسالة عند إكمال الدرس
- ✅ تحسين التنسيق العام للعرض
php
<?php
require_once("wp-load.php");
session_start();
// تعريف بيانات الدورة
$course_title = "دورة تطوير الويب";
$lessons = array(
"lesson-1.php" => "🔹 درس 1 - أساسيات HTML",
"lesson-2.php" => "🔹 درس 2 - CSS والتنسيق",
"lesson-3.php" => "🔹 درس 3 - JavaScript والتفاعلية",
"lesson-4.php" => "🔹 درس 4 - PHP والتطوير الديناميكي"
);
// حفظ تقدم المستخدم عند انتهاء الدرس
if (isset($_POST['complete_lesson']) && isset($_GET['lesson'])) {
$_SESSION['completed_lessons'][] = $_GET['lesson'];
}
?>
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<title><?php echo $course_title; ?></title>
<link rel="stylesheet" href="custom-style.css">
</head>
<body>
<div class="course-container">
<h1><?php echo $course_title; ?></h1>
<p>📚 اختر درسًا للبدء:</p>
<ul>
<?php foreach ($lessons as $lesson_file => $lesson_title): ?>
<li>
<a href="?lesson=<?php echo $lesson_file; ?>"
class="<?php echo in_array($lesson_file, $_SESSION['completed_lessons'] ?? []) ? 'completed' : ''; ?>">
<?php echo $lesson_title; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
<div class="lesson-content">
<?php
if (isset($_GET['lesson']) && array_key_exists($_GET['lesson'], $lessons)) {
include "lessons/" . $_GET['lesson'];
echo '<form method="POST"><button type="submit" name="complete_lesson">✅ أنهيت الدرس!</button></form>';
} else {
echo "<p>🎯 اختر درسًا للبدء في التعلم!</p>";
}
?>
</div>
</div>
</body>
</html>
✅ التحسينات المضافة
✔️ تم تحسين طريقة عرض الدروس بحيث يظهر لكل درس رابط واضح ✔️ عند انتهاء الدرس، يتم حفظ تقدمه في $_SESSION
بحيث يعرف المستخدم أي درس أكمله ✔️ يتم تغيير لون الرابط للدروس المكتملة (completed
) ليتم تمييزها ✔️ تم تحسين تنسيق المحتوى بحيث يكون أكثر سهولة للقراءة
🚀 إذا كان ملف course.php
لا يتم تحميله عبر include
، فقد يكون السبب في ذلك أحد الأخطاء التالية:
1️⃣ المسار غير صحيح – تأكد من أن course.php
موجود في نفس المجلد الذي يحتوي على الملف الذي يستدعيه. 2️⃣ خطأ في الإعدادات – تحقق من إعدادات PHP include_path
. 3️⃣ عدم تحميل WordPress – إذا كنت تستخدم WordPress، تأكد من require_once("wp-load.php");
داخل course.php
. 4️⃣ مشاكل التصاريح – تأكد من أن الملف لديه إذن للقراءة (644
).
🔹 الحل: جرب استدعاء الملف باستخدام get_template_directory()
إذا كنت داخل قالب WordPress:
php
<?php include get_template_directory() . '/course.php'; ?>
✔️ هذا يضمن تحميل الملف بشكل صحيح من مجلد القالب.
🔹 استخدام المصفوفات في PHP لاستدعاء الملفات بشكل ديناميكي 🔹 اختصارات WordPress (Shortcodes) داخل المحتوى 🔹 استدعاء بيانات JSON أو API
✔️ في PHP يمكنك تمرير الملفات داخل مصفوفة مثل:
php
$files = ["lesson-1.php", "lesson-2.php", "lesson-3.php"];
include "lessons/" . $files[0]; // تحميل أول درس
✔️ في WordPress Shortcodes يمكنك إنشاء كود مختصر يستخدم [shortcode]
:
php
function custom_lesson_shortcode($atts) {
return "<h2>🎓 درس خاص: " . esc_html($atts['title']) . "</h2>";
}
add_shortcode('lesson', 'custom_lesson_shortcode');
ثم استدعاؤه داخل الصفحة هكذا:
html
[lesson title="أساسيات PHP"]
✅ 1. استخدام [ ]
مع Shortcodes في WordPress
📌 إذا كنت تريد استدعاء ملف درس معين داخل صفحات WordPress، يمكنك إنشاء كود مختصر:
php
function load_lesson_shortcode($atts) {
$lesson = isset($atts['file']) ? $atts['file'] : 'lesson-1.php';
ob_start();
include get_template_directory() . "/lessons/" . $lesson;
return ob_get_clean();
}
add_shortcode('lesson', 'load_lesson_shortcode');
✔️ يمكنك الآن إدراج الدرس داخل أي صفحة WordPress هكذا:
html
[lesson file="lesson-2.php"]
🔥 سيتم تحميل محتوى الدرس تلقائيًا داخل الصفحة!
✅ 2. استخدام [ ]
مع مصفوفات PHP
📌 يمكنك تخزين أسماء ملفات الدروس داخل مصفوفة واستدعائها باستخدام [ ]
:
php
$lessons = ["lesson-1.php", "lesson-2.php", "lesson-3.php"];
include "lessons/" . $lessons[0]; // تحميل الدرس الأول
✔️ يمكنك تغيير [0]
إلى [1]
أو [2]
حسب الدرس المطلوب.
✅ 1. أين تضع الكود؟
📌 ضع الكود داخل ملف:
wp-content/themes/Schwila-WP/functions.php
ثم أضف هذا الكود داخل الملف:
php
function load_lesson_shortcode($atts) {
$lesson = isset($atts['file']) ? $atts['file'] : 'lesson-1.php';
ob_start();
include get_template_directory() . "/lessons/" . $lesson;
return ob_get_clean();
}
add_shortcode('lesson', 'load_lesson_shortcode');
✔️ الآن يمكنك إدراج [lesson file="lesson-2.php"]
داخل أي صفحة WordPress وسيتحمل الدرس تلقائيًا! 🔥
✅ 2. كيف تستخدمه داخل صفحة WordPress؟
📌 داخل صفحة WordPress عادية، ضع هذا الكود:
html
[lesson file="lesson-1.php"]
وسيتم تحميل محتوى الدرس داخل الصفحة تلقائيًا 🎯
✅ 1. تأكد من أن المسار صحيح
📌 تحقق مما إذا كان lesson.php
موجود بالفعل داخل المجلد lessons
عبر C:\Users\Rach\Local Sites\2025\app\public\wp-content\themes\schwilaWp\lessons\
. ✔️ إذا كان الملف غير موجود، قم بإنشائه أو تأكد من أن الاسم مكتوب بشكل صحيح.
✅ 2. استخدم get_template_directory()
لاستدعاء الملف
📌 بدلًا من include()
، استخدم الكود التالي داخل functions.php
لضمان تحميل الملف من القالب الصحيح:
php
include get_template_directory() . '/lessons/lesson.php';
✔️ هذا يضمن أن WordPress يحدد مسار القالب تلقائيًا.
✅ 3. تحقق من صلاحيات الملف
📌 تأكد من أن الملف lesson.php
لديه صلاحيات قراءة (644 أو 755)، خاصة إذا كنت تعمل ضمن Local Sites أو خادم محلي مثل XAMPP. ✔️ إذا كنت تستخدم Local by Flywheel
، فقد تحتاج إلى ضبط التصاريح يدويًا داخل إعدادات app/public
.
✅ 1. تأكد من أن المسار صحيح
📌 يجب أن يكون المسار مضبوطًا بدقة وفقًا لموقع ملف lesson.php
. جرب هذا الكود داخل functions.php
:
php
include get_template_directory() . '/lessons/lesson.php';
✔️ هذا يضمن أن WordPress يحدد المسار الصحيح للقالب تلقائيًا.
✅ 2. تحقق من وجود الملف
📌 تأكد من أن الملف lesson.php موجود بالفعل في المسار:
C:\Users\Rach\Local Sites\2025\app\public\wp-content\themes\schwilaWp\lessons\
✔️ إذا كان الملف غير موجود، قم بإنشائه أو تأكد من أن الاسم مكتوب بشكل صحيح.
✅ 3. مراجعة صلاحيات الملف
📌 في بعض الأحيان، يكون الملف غير قابل للقراءة بسبب إعدادات التصاريح. ✔️ تأكد من أن الملف لديه تصريح 644 أو 755 حتى يمكن قراءته.
✅ 4. تأكد من إعدادات PHP include_path
📌 إذا كنت تعمل على خادم محلي، يمكنك تعطيل القيود الخاصة بـ include_path
عبر:
php
ini_set('include_path', get_template_directory() . '/lessons/');
✔️ هذا يجعل PHP يبحث عن الملفات داخل المجلد الصحيح.
🎯 جرب هذه الحلول وأخبرني إن كان الملف يتم تحميله الآن! 😊🔥 🚀 هل ترغب أيضًا في تحسين بنية الدروس داخل القالب؟
ضبط التصاريح يدويًا داخل إعدادات app/public.
لفهم كيفية ضبط التصاريح يدويًا داخل app/public
، اتبع هذه الخطوات:
✅ 1. ضبط التصاريح عبر File Explorer
(إذا كنت تستخدم Windows)
📌 انتقل إلى المسار التالي داخل Local Sites
:
C:\Users\Rach\Local Sites\2025\app\public\
✔️ انقر بزر الفأرة الأيمن على lessons
أو lesson.php
، ثم اختر “Properties” → “Security”. ✔️ تأكد من أن المستخدم لديه تصاريح Read & Execute
و Read
و Write
. ✔️ إذا كانت التصاريح مفقودة، اضغط على “Edit” وقم بتفعيلها.
✅ 2. ضبط التصاريح يدويًا عبر Terminal
أو CMD
📌 استخدم هذا الأمر لمنح التصاريح الصحيحة داخل app/public
:
sh
chmod -R 755 /Users/Rach/Local Sites/2025/app/public/wp-content/themes/schwilaWp/lessons
✔️ يمنح هذا التصريح القدرة على القراءة والتنفيذ داخل المجلد والدروس. ✔️ إذا لم ينجح ذلك، جرب chmod -R 644
لضبط التصاريح للملفات.
✅ 3. ضبط التصاريح داخل Local by Flywheel
(إذا كنت تستخدمه)
📌 داخل إعدادات Local
: ✔️ انتقل إلى Settings > Advanced
✔️ ابحث عن File Permissions
واضبطها على 755
للمجلدات و644
للملفات.
✅ 1. تأكد من أن الملف موجود فعليًا
📌 تحقق مما إذا كان lesson.php
موجود داخل المجلد /lessons/
عبر فتح المسار التالي:
C:\Users\Rach\Local Sites\2025\app\public\wp-content\themes\schwilaWp\lessons\
✔️ إذا لم يكن موجودًا، قم بإنشائه أو تأكد من أن الاسم مكتوب بشكل صحيح.
✅ 2. استخدم get_template_directory()
لتحديد المسار
📌 داخل functions.php
، جرب استدعاء الملف بشكل صحيح:
php
include get_template_directory() . '/lessons/lesson.php';
✔️ هذا يجعل WordPress يبحث عن الملف داخل مجلد القالب تلقائيًا.
✅ 3. تأكد من التصاريح (Permissions)
📌 في بعض الأحيان، يكون الملف غير قابل للقراءة بسبب التصاريح. جرب:
sh
chmod -R 755 /Users/Rach/Local Sites/2025/app/public/wp-content/themes/schwilaWp/lessons
✔️ هذا يمنح الملف الإذن المطلوب للقراءة والتنفيذ.
✅ 4. معالجة include_path
في PHP
📌 إذا كنت تستخدم إعدادات Local by Flywheel
أو XAMPP، قد تحتاج إلى تحديث include_path
داخل functions.php
:
php
ini_set('include_path', get_template_directory() . '/lessons/');
✔️ هذا يسمح لـ PHP بالبحث عن الملفات داخل المجلد الصحيح.