ووردبريس متقدم: ما بعد الأساسيات
بتعرف تثبت ووردبريس وتختار قالب وتضبط الإضافات؟ جميل. المقال ده هو الخطوة اللي بعدها: الأكواد المخصصة، الـHooks، القوالب اللي بتبنيها بإيدك، الإضافات البسيطة، الأداء المتقدم، والأمان الحقيقي. من مستخدم محترف… لمطور.
إنت هنا ليه؟ ومين المقال ده ليه
خليني أكون صريح معاك من أول سطر: المقال ده مش للمبتدئ اللي لسه بيسأل «ووردبريس يعني إيه؟». المقال ده للي عدى المرحلة دي: بيعرف يثبت ووردبريس، يختار قالب، يضبط إعداداته، يركب إضافات، وينشر محتوى. لو إنت لسه في النقطة دي — أو حاسس إن الأساسيات عندك مهزوزة — ارجع الأول للدليل الشامل تطوير مواقع ووردبريس: الدليل الكامل من التثبيت للربح، وبعدها تعالى كمل هنا. المقال ده امتداد مباشر له: هناك الأساسيات، وهنا ما بعدها.
طيب «ما بعد الأساسيات» يعني إيه بالظبط؟ يعني اللحظة اللي بتحس فيها إن الإضافات الجاهزة مش مكفياك. عاوز تغير حاجة صغيرة في القالب ومش لاقيها في الإعدادات. عاوز تضيف وظيفة بسيطة ومش عاوز تركب إضافة كاملة عشانها. عاوز موقعك أسرع من كده، وآمن أكتر من كده، وتحت سيطرتك إنت مش سيطرة مطور القالب.
الخبر الحلو: الفجوة بين «مستخدم ووردبريس شاطر» و«مطور ووردبريس» أصغر بكتير مما تتخيل. مش محتاج تبقى خبير PHP ولا تدرس علوم حاسب. محتاج تفهم 6 محاور، وتطبقهم واحد واحد. كل محور في المقال ده مبني على اللي قبله، ومع كل محور فيه أكواد حقيقية تقدر تنسخها وتجربها بنفسك على موقع تجريبي.
كل حاجة في المقال ده تتجرب على موقع تجريبي (Staging) الأول — مش على موقعك الحي. الكود الغلط ممكن يوقع الموقع بشاشة بيضاء في ثانية. هنعمل موقع تجريبي في قسم الأدوات، لكن من دلوقتي: أي كود هتشوفه هنا، جربه على نسخة تجريبية قبل ما يلمس موقعك الحقيقي. دي مش نصيحة اختيارية — دي عادة المطورين المحترفين.
وخليني أوفر عليك سؤال هيدور في دماغك طول المقال: «هل لازم أتعلم PHP كامل؟» الإجابة الصريحة: لأ. محتاج أساسيات PHP فقط — المتغيرات، المصفوفات، الشروط، الحلقات، والدوال. ووردبريس نفسه هيعلمك الباقي بالتطبيق، لأن 90% من شغل مطور ووردبريس هو استدعاء دوال ووردبريس الجاهزة مش كتابة خوارزميات من الصفر. لو عاوز تفهم البرمجة كمسار دخل بشكل أعمق وعلاقتها باللغات المختلفة، المقال ده هيفيدك:
خارطة المقال باختصار: هنبدأ بالأكواد المخصصة الصغيرة (Snippets) — أسرع انتصار ممكن. بعدها نفهم الـHooks اللي هي لغة ووردبريس نفسها. بعدها القوالب الفرعية، ثم القوالب المخصصة من الصفر، ثم تطوير الإضافات. وفي الآخر: الأداء المتقدم، الأمان المتقدم، أدوات المحترفين، وتحويل المهارة دي لدخل. يلا نبدأ.
الأكواد المخصصة: أول درجة في السلم
أول ما بتحتاج حاجة مش موجودة في إعدادات القالب — تغيير شكل زر، إخفاء عنصر مزعج، إضافة سطر وظيفي صغير — بتكون وصلت لباب الأكواد المخصصة (Snippets). والـSnippet هو أصغر وحدة كود مفيدة: كام سطر PHP أو CSS بيحلوا مشكلة محددة. الميزة؟ بتتعلم بسرعة، والنتيجة فورية، والمخاطرة محدودة لو اتبعت القواعد.
المشكلة إن أغلب المبتدئين بيعملوا الغلطة الكلاسيكية: بيفتحوا ملف functions.php بتاع القالب الأصلي ويحطوا الكود جواه مباشرة. الكود هيشتغل — لحد أول تحديث للقالب. أول ما القالب يتحدث، الملف بيتبدل بالنسخة الجديدة، والكود بتاعك بيطير. وده بالظبط اللي هنحلّه في قسم القوالب الفرعية، لكن من دلوقتي اعرف القاعدة.
لا تعدل ملفات القالب الأصلي ولا ملفات ووردبريس الأساسية ولا ملفات أي إضافة مباشرة. أي تعديل في ملف أصلي = تعديل هيضيع مع أول تحديث. البدائل الآمنة: إضافة Code Snippets، قالب فرعي (Child Theme)، أو إضافتك الخاصة. مفيش استثناء للقاعدة دي.
الطريقة الآمنة: إضافة Code Snippets
أسهل وأأمن طريقة لإضافة أكواد PHP مخصصة من غير ما تلمس أي ملف. الإضافة بتخزن الأكواد في قاعدة البيانات، وبتشغلها كأنها جزء من موقعك، وتقدر تفعلها وتعطلها بضغطة زي الإضافات بالظبط — ولو كود عمل مشكلة، بتعطله وخلاص. الإضافة فيها وضع آمن (Safe Mode) لو كود وقع الموقع، بتقدر ترجع منه.
خلينا نجرب أول Snippet حقيقي: كتير من القوالب بتعرض مقتطف المقال (Excerpt) بطول افتراضي مش مناسب. السطور دي بتخليك تتحكم في عدد كلمات المقتطف:
add_filter( ‘excerpt_length’, ‘my_custom_excerpt_length’ );
function my_custom_excerpt_length( $length ) {
return 25;
}
شايف بساطة الفكرة؟ سطران بيغيروا سلوك الموقع كله. كلمة add_filter دي هنفهمها بالتفصيل في القسم الجاي — هي المفتاح لكل حاجة. ودلوقتي Snippet تاني عملي جدًا: إخفاء رقم إصدار ووردبريس من كود الموقع (خطوة أمان أساسية — المهاجمين بيستغلوا معرفة الإصدار):
remove_action( ‘wp_head’, ‘wp_generator’ );
add_filter( ‘the_generator’, ‘__return_empty_string’ );
أكواد CSS المخصصة: غيّر الشكل من غير PHP
مش كل التعديلات محتاجة PHP. لو التعديل شكلي (ألوان، مسافات، إخفاء عنصر)، الـCSS المخصص هو الطريق — وده متاح من لوحة التحكم نفسها: المظهر ثم تخصيص ثم CSS إضافي. الميزة إنه محفوظ في قاعدة البيانات ومش بيضيع مع تحديث القالب.
مثال عملي: عندك عنوان مزعج في صفحة معينة وعاوز تخفيه، أو عاوز تكبر خط عناوين المقالات على الموبايل:
.entry-title {
font-size: 1.6rem;
line-height: 1.5;
}
@media (max-width: 640px) {
.entry-title { font-size: 1.3rem; }
}
افتح صفحة موقعك في المتصفح، ودوس كليك يمين على العنصر ثم «فحص» (Inspect). أدوات المطور هتوريك اسم الـclass بتاع العنصر بالظبط. انسخ الاسم، واكتب قاعدة CSS عليه. دي مهارة هتستخدمها كل يوم كمطور ووردبريس — الفحص قبل التعديل.
تحميل الأكواد بالطريقة الصح: wp_enqueue
لما تتقدم شوية وتبقى بتضيف ملفات CSS أو JavaScript خاصة بيك (مش مجرد سطور في المخصص)، لازم تحملها بالطريقة الرسمية بدل ما تحشر وسوم <link> أو <script> يدويًا في القالب. الطريقة الرسمية اسمها wp_enqueue_scripts — وهي اللي بتضمن إن الملفات تتحمل بالترتيب الصح ومن غير تعارض:
add_action( ‘wp_enqueue_scripts’, ‘my_custom_assets’ );
function my_custom_assets() {
wp_enqueue_style( ‘my-style’, get_stylesheet_directory_uri() . ‘/css/custom.css’ );
wp_enqueue_script( ‘my-script’, get_stylesheet_directory_uri() . ‘/js/custom.js’, array( ‘jquery’ ), ‘1.0’, true );
}
لاحظ التفاصيل: الـJS متحمل في آخر الصفحة (true الأخيرة)، ومعتمد على jQuery فهيتحمل بعدها تلقائيًا، وكل ملف له اسم مميز عشان مايحصلش تعارض. دي تفاصيل صغيرة لكنها الفرق بين كود هاوٍ وكود محترف.
الـHooks والـFilters: قلب ووردبريس النابض
هنا بقى النقطة اللي بتفصل المستخدم عن المطور فعلًا. كل الأكواد اللي شفتها فوق — وكل اللي هتشوفه في باقي المقال — مبنية على فكرة واحدة اسمها الـHooks. افهمها كويس، وهتقدر تقرأ وتكتب أي كود ووردبريس في الدنيا.
الفكرة ببساطة: ووردبريس وهو شغال بينفذ آلاف الخطوات بالترتيب — يحمل الإعدادات، يجهز القالب، يجيب المقالات من قاعدة البيانات، يعرض الصفحة. في نقاط معينة من الترتيب ده، ووردبريس بيقف ويقول: «مين عاوز يتدخل هنا؟» النقاط دي هي الـHooks. وإنت بتسجل «تدخلك» بدالة، وووردبريس بينفذها في النقطة المناسبة.
والـHooks نوعين — والفرق بينهم هو أهم معلومة في المقال كله:
- Action: «اعمل حاجة» في لحظة معينة. تطبع محتوى، تحفظ بيانات، ترسل إشعار. بتاخد المعلومة، تنفذ، وتمشي — مش بترجع حاجة. مثال:
add_action('wp_head', ...)بيضيف حاجة جوه وسم الـhead. - Filter: «عدّل قيمة» وهي معدية عليك. بتستلم قيمة، تغيرها، ولازم ترجعها. مثال:
add_filter('the_title', ...)بيستلم عنوان المقال، تعدله، وترجعه. نسيت الـreturn؟ العنوان هيختفي من الموقع كله.
التوثيق الرسمي لووردبريس شارح الفكرة دي بالتفصيل مع أمثلة، وهو المرجع اللي هترجع له كل ما تحتاج Hook جديد:
طيب، إزاي تلاقي الـHook المناسب لمشكلتك؟ ووردبريس فيه آلاف الـHooks. الطريقة العملية: فكر «إمتى» و«فين». عاوز حاجة تحصل لما المقال يتنشر؟ دوّر على Hook مرتبط بالنشر (publish_post). عاوز تعدل نص معين قبل عرضه؟ دوّر على Filter لاسم الحاجة دي. ومع الوقت هتحفظ الأشهر منهم.
أمثلة عملية هتستخدمها فعلًا
1. إضافة توقيع تلقائي في نهاية كل مقال: بدل ما تنسخ التوقيع يدويًا في كل مقال، Filter واحد يعمله تلقائيًا:
add_filter( ‘the_content’, ‘my_auto_signature’ );
function my_auto_signature( $content ) {
if ( is_single() ) {
$content .= ‘<p><strong>شكرًا لقراءتك — شارك المقال لو عجبك.</strong></p>’;
}
return $content;
}
لاحظ الشرط is_single() — من غيره التوقيع هيظهر في كل مكان بيظهر فيه المحتوى (الأرشيف، البحث، الرئيسية). ولاحظ الـreturn في الآخر — دي اللي لو نسيتها المحتوى كله هيختفي.
2. تغيير نص «اقرأ المزيد» الافتراضي:
add_filter( ‘the_content_more_link’, ‘my_read_more_text’ );
function my_read_more_text() {
return ‘<a class=”more-link” href=”‘ . get_permalink() . ‘”>كمل قراءة المقال ←</a>’;
}
3. تنفيذ حاجة عند نشر مقال (Action حقيقي): مثلًا تسجيل ملاحظة أو إرسال تنبيه — هنا مفيش قيمة بتتعدل، فيه حدث بيحصل:
add_action( ‘publish_post’, ‘my_on_post_publish’, 10, 2 );
function my_on_post_publish( $post_id, $post ) {
// هنا تحط أي منطق: إشعار، تسجيل، مزامنة
error_log( ‘تم نشر مقال جديد برقم: ‘ . $post_id );
}
الأولوية وعدد المتغيرات: التفاصيل اللي بتفرق
لاحظ في المثال الأخير رقمين: 10, 2. الأول هو الأولوية (Priority) — لو كذا دالة متسجلة على نفس الـHook، مين تتنفذ الأول؟ الرقم الأصغر يتنفذ الأول، والافتراضي 10. التاني هو عدد المتغيرات اللي دالتك هتستلمها من الـHook. لو الـHook بيبعت متغيرين ودالتك متسجلة تستلم واحد بس، التاني مش هيوصلك. تفاصيل صغيرة، لكنها سبب شائع لـ«الكود مش شغال ومش عارف ليه».
أي تعديل في ووردبريس — من أبسط Snippet لأضخم إضافة — هو في الآخر add_action أو add_filter على Hook مناسب. لما تفهم الجملة دي بجد، إنت بقيت تفكر كمطور ووردبريس مش كمستخدم.
القوالب الفرعية: عدّل أي قالب من غير ما تخسر التحديثات
فاكر القاعدة الذهبية من قسم الأكواد؟ «ممنوع تعديل ملفات القالب الأصلي». طيب لو التعديل اللي عاوزه أكبر من Snippet — عاوز تغير ملف قالب كامل، أو تضيف ملفات جديدة؟ الحل الرسمي اسمه القالب الفرعي (Child Theme).
الفكرة عبقرية في بساطتها: بتعمل قالب جديد «يرث» كل حاجة من القالب الأصلي (الأب)، وأي ملف تحطه في القالب الفرعي بنفس اسم ملف في الأب — نسختك هي اللي بتتكسب. القالب الأب يتحدث براحته، وتعديلاتك محفوظة في مكان منفصل. التوثيق الرسمي بيشرح إن ملفات القالب الفرعي functions.php بتتحمل قبل ملف الأب، وده بيديك تحكم كامل.
إنشاء قالب فرعي في 3 ملفات
اعمل مجلدًا جديدًا داخل wp-content/themes/ باسم مميز، وليكن mytheme-child.
الملف ده لازم يحتوي على ترويسة فيها اسم القالب الفرعي، وأهم سطر فيها: Template: باسم مجلد قالب الأب بالظبط (حساس لحالة الحروف).
بتسجل فيه تحميل ملفات الـCSS (بتاعتك وبتاعة الأب حسب ما القالب الأب بيحتاج) على Hook الـwp_enqueue_scripts اللي اتعلمناه.
شكل ملف style.css بتاع القالب الفرعي:
/*
Theme Name: MyTheme Child
Template: mytheme
*/
سطر Template: mytheme هو اللي بيقول لووردبريس: «القالب ده فرعي، والأب بتاعه هو المجلد اللي اسمه mytheme». لو الاسم غلط حرف واحد — القالب مش هيشتغل. وبعد التفعيل من المظهر ثم القوالب، موقعك هيفضل شكله زي ما هو بالظبط، لكن دلوقتي عندك مساحة آمنة للتعديل.
إمتى القالب الفرعي، وإمتى قالب كامل؟
القالب الفرعي مثالي لما تعديلاتك «طبقة فوق» قالب موجود: تغييرات تصميم، ملفات قالب بديلة لصفحات معينة، دوال إضافية. لكن لو لقيت نفسك بتنسخ نص ملفات الأب وتعدلها كلها — يبقى إنت عمليًا بتبني قالب جديد، والأنظف إنك تبني قالبًا مخصصًا من الصفر (القسم الجاي). التوثيق الرسمي نفسه بيقول: التخصيصات الواسعة جدًا داخل قالب فرعي ممكن تتحول لصداع إداري.
ملف functions.php بتاع القالب الفرعي بيتحمل قبل ملف الأب — يعني تقدر تعرف دوال جديدة أو تعدل سلوكيات قبل ما الأب يشتغل. لكن احذر: متنقلش كود من ملف functions.php بتاع الأب لملفك — تكرار أسماء الدوال يعمل خطأ فادح (Fatal Error) يوقع الموقع.
القوالب المخصصة: ابنِ قالبك من الصفر
وصلنا للمستوى اللي بيخوف ناس كتير — وهو في الحقيقة منطقي جدًا لو فهمت اللي فات. القالب المخصص (Custom Theme) هو مجموعة ملفات PHP وCSS وJS إنت اللي كاتبها، بتحدد شكل موقعك وسلوكه بالكامل. ليه حد يعمل كده بدل ما يستخدم قالبًا جاهزًا؟ ثلاثة أسباب: التحكم الكامل (مفيش كود زائد مش محتاجه)، الأداء (قالب خفيف مكتوب بإيدك أسرع من قالب عام محمل بمميزات)، والتميز (موقع مش شبه آلاف المواقع اللي بتستخدم نفس القالب).
التسلسل الهرمي للقوالب: الخريطة اللي لازم تحفظها
أهم مفهوم في بناء القوالب: ووردبريس بيختار ملف القالب اللي هيعرض الصفحة حسب التسلسل الهرمي (Template Hierarchy) — قائمة أولويات بيمشي عليها من الأخص للأعم. مثال عملي لصفحة مقال مفرد:
- لو فيه ملف مخصص للمقال ده بالذات (
single-post-hello-world.php) يستخدمه. - وإلا: ملف مخصص لنوع المحتوى (
single-post.php). - وإلا: الملف العام للمقالات المفردة (
single.php). - وإلا: الملف العام لأي محتوى مفرد (
singular.php). - وأخيرًا:
index.php— اللي لازم يكون موجودًا في أي قالب.
ونفس المنطق للصفحات (page.php)، والأرشيفات (archive.php)، وصفحة الخطأ 404 (404.php)، ونتائج البحث (search.php). الفهم ده بيخليك تعرف بالظبط «أنهي ملف أعدل عشان أغير الصفحة دي» — بدل التخمين.
<?php get_header(); ?>
<main>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div><?php the_content(); ?></div>
<?php endwhile; endif; ?>
</main>
<?php get_footer(); ?>
دي هي «الحلقة» (The Loop) الشهيرة — قلب كل قالب ووردبريس: لو فيه مقالات، اعرضها واحدة واحدة. كل دوال العرض (the_title، the_content) بتشتغل جوه الحلقة دي.
ابدأ من قالب تأسيسي مش من ورقة بيضاء
محدش بيبني قالبًا من الصفر المطلق — المحترفين بيبدأوا من قالب تأسيسي (Starter Theme) نضيف. أشهرهم Underscores — قالب مجاني مفتوح المصدر معمول مخصوص عشان «تخترقه» وتحوله لقالبك الخاص: ملفات HTML5 نضيفة، معلقة كويس، ومن غير زخارف تتعارض مع تصميمك. بتدخل اسم قالبك على موقعهم، وينزلك ملف جاهز بهيكله الكامل.
قوالب البلوكات: الجيل الجديد
لازم تعرف إن عالم القوالب بينقسم دلوقتي لجيلين: القوالب الكلاسيكية (ملفات PHP زي اللي فوق — اللي شرحناه)، وقوالب البلوكات (Block Themes) (ملفات HTML + ملف theme.json بيحدد الألوان والخطوط والإعدادات، والتعديل بيتم من محرر الموقع المرئي). التوثيق الرسمي بيعتبر قوالب البلوكات هي الاتجاه الحالي، والتسلسل الهرمي واحد في الاتنين.
نصيحتي العملية: اتعلم القوالب الكلاسيكية الأول — لأنها بتعلمك PHP والـHooks والتسلسل الهرمي اللي هم أساس كل حاجة. وبعد ما تتمكن، ادخل على قوالب البلوكات وملف theme.json. اللي فاهم الكلاسيكي بيفهم البلوكات بسرعة؛ العكس مش صحيح دايمًا.
تطوير الإضافات: أول إضافة ليك
لو القالب بيحدد «الشكل»، فالإضافة بتحدد «الوظيفة». والقاعدة الذهبية اللي بيقولها التوثيق الرسمي: الوظائف تروح للإضافات، والشكل يروح للقوالب. ليه؟ لأنك لو حطيت وظيفة مهمة في القالب وغيرت القالب بعدين — الوظيفة ضاعت. الإضافة بتفضل شغالة مهما غيرت الشكل.
الإضافة في أبسط صورها ملف PHP واحد بترويسة معينة في مجلد داخل wp-content/plugins/. الترويسة دي هي اللي بتخلي ووردبريس يتعرف عليها ويعرضها في قائمة الإضافات:
/*
Plugin Name: My First Plugin
Description: أول إضافة لي — وظيفة مخصصة بسيطة.
Version: 1.0
Author: Your Name
*/
// منع الوصول المباشر للملف — سطر أمان إلزامي
if ( ! defined( ‘ABSPATH’ ) ) { exit; }
سطر الحماية الأخير مهم: بيمنع أي حد يفتح ملف الإضافة مباشرة من المتصفح. أي إضافة محترمة لازم تبدأ بيه.
المكونات اللي هتبني بيها أي إضافة
1. الشورت كود (Shortcode): أسهل طريقة تخلي المستخدم يحط وظيفتك جوه أي مقال أو صفحة بكتابة كود قصير زي [my_box]:
add_shortcode( ‘my_box’, ‘my_box_shortcode’ );
function my_box_shortcode( $atts, $content = ” ) {
return ‘<div class=”my-box”>’ . esc_html( $content ) . ‘</div>’;
}
لاحظ esc_html — دي دالة «الهروب» اللي بتمنع حقن أكواد خبيثة. هنتكلم عنها بالتفصيل في قسم الأمان، لكن من دلوقتي: أي بيانات جاية من المستخدم لازم تتعقم قبل العرض.
2. أنواع المحتوى المخصصة (Custom Post Types): لو بتبني موقع عقارات وعاوز نوع محتوى «شقة» منفصل عن المقالات والصفحات — بحقول وقوالب عرض خاصة بيه:
add_action( ‘init’, ‘my_register_property_type’ );
function my_register_property_type() {
register_post_type( ‘property’, array(
‘label’ => ‘عقارات’,
‘public’ => true,
‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’ ),
‘has_archive’ => true,
) );
}
بعد تفعيل الإضافة هتلاقي قائمة «عقارات» جديدة في لوحة التحكم — بنفس إمكانيات المقالات. ولو عملت ملف single-property.php في القالب، هيعرض العقار بتصميم مخصص حسب التسلسل الهرمي اللي اتعلمناه.
3. صفحة إعدادات في لوحة التحكم: أي إضافة جادة محتاجة صفحة إعدادات. ووردبريس بيوفر Settings API اللي بيتعامل مع الحفظ والتحقق والأمان نيابة عنك — متخترعش نظام إعدادات من عندك:
add_action( ‘admin_menu’, ‘my_plugin_settings_page’ );
function my_plugin_settings_page() {
add_options_page( ‘إعدادات إضافتي’, ‘إضافتي’, ‘manage_options’, ‘my-plugin’, ‘my_plugin_render_page’ );
}
function my_plugin_render_page() {
echo ‘<div class=”wrap”><h1>إعدادات إضافتي</h1>’;
echo ‘<p>هنا تبني نموذج الإعدادات باستخدام Settings API.</p></div>’;
}
لاحظ manage_options — دي «القدرة» (Capability) اللي بتحدد مين يشوف الصفحة. كده الصفحة ظاهرة للمديرين بس، مش لأي مستخدم مسجل.
ووردبريس عنده معايير كتابة كود رسمية (WordPress Coding Standards) — طريقة تسمية الدوال والمتغيرات، المسافات، الأقواس. الالتزام بيها مش رفاهية: هو اللي بيخلي كودك مقروءًا لأي مطور تاني، ومؤهلًا للنشر في مستودع ووردبريس الرسمي لو حبيت. ابدأ بيها من أول إضافة.
الأمان داخل الكود نفسه
هنا بقى الفرق بين كود «شغال» وكود «احترافي». أغلب ثغرات إضافات وقوالب ووردبريس مش بسبب تشفير ضعيف ولا سيرفرات مخترقة — بسبب مطور نسي يعقم مدخلًا أو يتحقق من صلاحية. ثلاث قواعد لو التزمت بيهم، كودك هيبقى في أمان الغالبية العظمى من الإضافات الموجودة:
القاعدة 1: عقّم المدخلات (Sanitize Input)
أي بيانات جاية من المستخدم — من نموذج، من رابط، من أي حتة — اعتبرها خطرة لحد ما تتعقم. ووردبريس بيوفر دوال تعقيم لكل نوع بيانات:
$name = sanitize_text_field( $_POST[‘name’] );
$email = sanitize_email( $_POST[’email’] );
$url = esc_url_raw( $_POST[‘website’] );
$age = absint( $_POST[‘age’] );
القاعدة 2: اهرب من المخرجات (Escape Output)
حتى البيانات المتعقمة والمحفوظة في قاعدة البيانات — لحظة عرضها في الصفحة لازم «تهرب» منها، لأن قاعدة البيانات نفسها ممكن تكون اتلوثت من مصدر تاني:
<h2><?php echo esc_html( $title ); ?></h2>
<a href=”<?php echo esc_url( $link ); ?>”>زور الرابط</a>
<input value=”<?php echo esc_attr( $value ); ?>”>
القاعدة المختصرة: esc_html للنصوص، esc_attr لخصائص الوسوم، esc_url للروابط. ولو المحتوى فيه وسوم HTML مسموحة (زي محتوى مقال)، استخدم wp_kses_post اللي بيسمح بالوسوم الآمنة ويشيل الخبيث.
القاعدة 3: تحقق من النية والصلاحية (Nonces + Capabilities)
الـNonce هو رمز تحقق لمرة واحدة بيضمن إن الطلب جاي فعلًا من نموذج موقعك مش من موقع مهاجم (هجوم CSRF). والـCapability بتتأكد إن المستخدم عنده صلاحية تنفيذ الإجراء ده أصلًا:
wp_nonce_field( ‘my_save_action’, ‘my_nonce_field’ );
// عند المعالجة: التحقق من الاثنين معًا
if ( ! isset( $_POST[‘my_nonce_field’] )
|| ! wp_verify_nonce( $_POST[‘my_nonce_field’], ‘my_save_action’ )
|| ! current_user_can( ‘manage_options’ ) ) {
wp_die( ‘غير مصرح لك بتنفيذ هذا الإجراء.’ );
}
استعلامات قاعدة البيانات الآمنة
لو بتكتب استعلام SQL مباشر عبر $wpdb — لازم تستخدم prepare اللي بيفصل البيانات عن الاستعلام ويمنع حقن SQL:
$results = $wpdb->get_results( $wpdb->prepare(
“SELECT * FROM {$wpdb->posts} WHERE post_author = %d AND post_status = %s”,
$author_id,
‘publish’
) );
دمج متغيرات مباشرة في جملة SQL بدون prepare — زي "WHERE id = $id" — هو الباب الملكي لثغرات حقن SQL. لو شفت الكود ده في أي إضافة بتستخدمها، اعتبرها علامة خطر على جودة الإضافة كلها.
تحسين الأداء المتقدم
الموقع البطيء بيخسر زوار قبل ما يقروا أول سطر — ودي حقيقة مش محتاجة إثبات. لكن «تحسين الأداء» عند المبتدئ يعني «ركب إضافة كاش وخلاص». عند المطور يعني: قس، حدد الاختناق، عالج السبب — بالترتيب ده. من غير قياس إنت بتخمن، والتخمين في الأداء بيضيع وقت.
الخطوة الأولى: قس قبل ما تصلح
أهم أداة في ترسانة مطور ووردبريس هي Query Monitor — إضافة مجانية بتحط شريط أدوات للمطور بيعرض: عدد استعلامات قاعدة البيانات في الصفحة، الاستعلامات البطيئة والمكررة، أخطاء PHP، الـHooks اللي اتنفذت، والملفات اللي اتحمّلت. أول ما تركبها وتفتح أي صفحة هتتفاجئ: صفحات كتير بتنفذ 100+ استعلام بسبب إضافة واحدة سيئة.
القاعدة العملية: أي صفحة عادية لازم تتحمل بأقل من 50 استعلامًا. لو الرقم أعلى بكتير، Query Monitor هيقولك بالظبط أي إضافة أو قالب هو السبب — وهنا تبدأ المعالجة الحقيقية بدل التخمين.
الكاش المؤقت الذكي: Transients API
لو عندك عملية مكلفة بتتكرر (حساب معقد، جلب بيانات من API خارجي، استعلام ثقيل)، متحسبهاش مع كل زيارة — احسبها مرة وخزن النتيجة مؤقتًا. ده بالظبط اللي بيعمله Transients API:
$stats = get_transient( ‘my_expensive_stats’ );
if ( false === $stats ) {
$stats = my_calculate_stats(); // العملية المكلفة
set_transient( ‘my_expensive_stats’, $stats, 12 * HOUR_IN_SECONDS );
}
النتيجة: أول زائر يدفع ثمن الحساب، وباقي الزوار لمدة 12 ساعة بياخدوا النتيجة الجاهزة. الفرق في السرعة ممكن يوصل لأضعاف — بسطرين كود.
خارطة الأداء الكاملة: من الأرخص للأغلى
| الطبقة | إيه اللي بتعمله | الأداة/الطريقة |
|---|---|---|
| كاش الصفحات | يحفظ الصفحة كاملة HTML ويقدمها من غير PHP أو قاعدة بيانات | إضافة كاش (LiteSpeed Cache مجاني، أو WP Rocket مدفوع) |
| كاش الكائنات | يخزن نتائج الاستعلامات المتكررة في الذاكرة | Redis أو Memcached على مستوى السيرفر |
| تقليل الاستعلامات | يمنع الإضافات السيئة من إغراق قاعدة البيانات | Query Monitor للتشخيص ثم الإصلاح أو الاستبدال |
| التحميل الكسول | الصور والفيديوهات تتحمل لما الزائر يوصلها فقط | خاصية المتصفح الأصلية + إعدادات إضافة الكاش |
| ضغط الملفات | تصغير CSS وJS ودمجها لتقليل الطلبات | إعدادات Minify في إضافة الكاش |
| تحسين الصور | صيغ حديثة (WebP) ومقاسات مناسبة | ارفع WebP من الأصل — أخف بكتير من JPG |
تفاصيل متقدمة بتفرق فعلًا
- التحكم في Heartbeat API: ووردبريس بيبعت طلبات دورية للسيرفر (نبضات) للحفظ التلقائي والإشعارات — مفيدة في لوحة التحكم، لكنها حمل زائد على السيرفر. قلل تكرارها أو عطلها في الواجهة الأمامية بكود بسيط أو من إعدادات إضافة الكاش.
- تنظيف autoload في قاعدة البيانات: خيارات كتير بتتحمل مع كل صفحة (autoload=yes) حتى لو مش مستخدمة — إضافات محذوفة بتسيب مخلفاتها. راجع جدول الخيارات دوريًا ونضف اللي ملوش لازمة (بحذر وعلى نسخة تجريبية).
- تعطيل الـEmbeds والـEmojis غير المستخدمة: سطور بتتحمل افتراضيًا لخدمات ممكن متكونش بتستخدمها — إزالتها بتقلل الطلبات.
- CDN للمحتوى الثابت: توزيع الصور والملفات من سيرفرات قريبة من الزائر — فرق واضح للجمهور البعيد عن سيرفرك.
متجريش وراء كل تقنية مرة واحدة. الترتيب العملي: (1) قس بـQuery Monitor وحدد السبب، (2) إضافة كاش مضبوطة صح، (3) صور محسنة، (4) تقليل الإضافات الثقيلة، (5) كاش الكائنات لو سيرفرك يدعمه. اللي يعمل الخطوتين الأوليين صح بيحل 80% من مشاكل البطء.
الأمان المتقدم للموقع كله
قسم الأكواد علمنا نكتب كودًا آمنًا. القسم ده عن حماية الموقع كله كمنظومة — لأن أقوى كود في الدنيا مش هينفع لو كلمة سر المدير «123456». التوثيق الرسمي لتقوية ووردبريس بيأكد المبدأ الأساسي: الأمان مش نظام محكم 100% — الأمان هو تقليل المخاطر بطبقات متعددة.
قائمة التقوية الأساسية (طبقها كلها)
ووردبريس والقالب والإضافات — الثغرات المعروفة في النسخ القديمة هي أشهر باب اختراق. فعّل التحديثات التلقائية للنسخ الأمنية الصغيرة على الأقل.
كلمة سر طويلة فريدة لحساب المدير، وتفعيل المصادقة الثنائية (2FA) — دي أرخص وأقوى طبقة حماية ضد تخمين كلمات السر.
إضافة تحدد محاولات تسجيل الدخول الفاشلة وتحظر الـIP المهاجم مؤقتًا — بتقتل هجمات التخمين الآلي (Brute Force) في مهدها.
سطر واحد في wp-config.php بيمنع تعديل ملفات القالب والإضافات من داخل الووردبريس — لو حساب اخترق، المهاجم مش هيقدر يزرع كود بسهولة: define('DISALLOW_FILE_EDIT', true);
الملفات 644 والمجلدات 755 — لا أكثر. صلاحيات مفتوحة بزيادة معناها أي ثغرة صغيرة تتحول لكارثة.
نسخة احتياطية متجربة الاستعادة (مش مجرد ملفات مرمية) على تخزين خارجي — بجدولة تلقائية. من غير باك اب مختبر، كل طبقات الأمان ناقصة.
إضافات وقوالب من المستودع الرسمي أو شركات معروفة فقط. القوالب والإضافات «المجانية» من مواقع مجهولة أشهر مصدر للبرمجيات الخبيثة المزروعة.
طبقة الحماية النشطة: جدار ناري للإضافات
فوق الأساسيات، إضافات الحماية بتضيف مراقبة نشطة: فحص البرمجيات الخبيثة، جدار ناري يصد الطلبات المشبوهة، وتنبيهات فورية لأي نشاط غريب. دي مش بديل عن القائمة اللي فوق — دي طبقة إضافية فوقها. والتوازن مهم: إضافة حماية واحدة مضبوطة كويس أحسن من ثلاث إضافات بتتعارك مع بعض وتبطئ الموقع.
«موقعي صغير ومحدش هيهتم يخترقه». الحقيقة: أغلب الاختراقات آلية وعشوائية — بوتات بتفحص ملايين المواقع بحثًا عن ثغرات معروفة، مش مستهدفة موقعك بالذات. صغر الموقع مش حماية؛ التحديثات والأساسيات هي الحماية.
صندوق عدة المطور المحترف
الأدوات دي هي اللي بتفرق بين حد «بيعدل على الموقع» وحد «بيدير تطوير الموقع». مش كلها ضرورية من أول يوم — لكن كل واحدة هتوفر عليك ساعات لما تحتاجها.
WP-CLI: ووردبريس من سطر الأوامر
WP-CLI هو واجهة سطر الأوامر الرسمية لووردبريس: أي حاجة بتعملها من لوحة التحكم — تثبيت إضافات، تحديثات، إدارة مستخدمين، نسخ قاعدة البيانات — تقدر تعملها بأمر واحد من الطرفية، وتقدر تجمع الأوامر في سكربتات تتنفذ تلقائيًا:
wp plugin install query-monitor –activate
wp theme update –all
wp db export backup-$(date +%F).sql
wp search-replace ‘staging.example.com’ ‘example.com’ –all-tables
آخر أمر ده كنز: لما تنقل موقعًا من بيئة تجريبية للحقيقية، بيستبدل كل الروابط القديمة بالجديدة في قاعدة البيانات كلها — عملية كانت بتاخد ساعة يدويًا بقت سطرًا واحدًا.
وضع التصحيح: شوف الخطأ بدل ما تخمنه
لما حاجة تبوظ، ووردبريس افتراضيًا بيخبي تفاصيل الخطأ (عشان الزوار). في بيئة التطوير، فعّل وضع التصحيح من wp-config.php عشان تشوف الخطأ الحقيقي ومكانه:
define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_LOG’, true );
define( ‘WP_DEBUG_DISPLAY’, false );
كده الأخطاء بتتسجل في ملف debug.log من غير ما تظهر للزوار. ومع Query Monitor اللي اتكلمنا عنه، عندك صورة كاملة عن أي مشكلة.
بيئة التجربة (Staging) وإدارة النسخ
القاعدة اللي بدأنا بيها المقال: جرب على نسخة تجريبية قبل الحي. أغلب الاستضافات المحترمة بتوفر زر «إنشاء نسخة تجريبية» بنقرة واحدة — استخدمه قبل أي تحديث كبير أو تعديل جوهري. ومع الوقت، اتعلم أساسيات Git لإدارة نسخ الكود بتاعك: كل تعديل محفوظ، وأي غلطة ترجع لنسخة شغالة في ثانية.
لاحظ إن WP-CLI والسكربتات كلها فكرة واحدة: أي مهمة بتكررها، أتمتها. النسخ الاحتياطي، النقل بين البيئات، فحص التحديثات — كلها مهام دورية تستاهل سكربت. ولو حبيت تتعمق في عالم الأتمتة والسكربتات بلغة متخصصة في المجال ده، بايثون هي البوابة الطبيعية:
REST API وعالم البلوكات
ووردبريس مش بس نظام إدارة محتوى تقليدي — هو كمان منصة بيانات. الـREST API المدمج بيتيح لأي تطبيق (موبايل، موقع خارجي، سكربت) إنه يقرأ وينشئ محتوى موقعك بصيغة JSON. وهو نفس الأساس اللي مبني عليه محرر المكونات (Gutenberg) نفسه.
جرّب بنفسك: افتح yoursite.com/wp-json/wp/v2/posts في المتصفح — هتشوف أحدث مقالات موقعك بصيغة JSON منظمة. دي مش ثغرة؛ ده تصميم مقصود: المحتوى العام متاح للقراءة، والخاص محمي بالمصادقة.
إنشاء نقطة API خاصة بيك
لو إضافتك محتاجة تعرض بيانات لتطبيق خارجي، بتسجل نقطة نهاية (Endpoint) مخصصة:
add_action( ‘rest_api_init’, ‘my_register_endpoint’ );
function my_register_endpoint() {
register_rest_route( ‘myplugin/v1’, ‘/stats’, array(
‘methods’ => ‘GET’,
‘callback’ => ‘my_stats_callback’,
‘permission_callback’ => ‘__return_true’, // بيانات عامة
) );
}
function my_stats_callback() {
return array( ‘posts’ => wp_count_posts()->publish );
}
انتبه لـpermission_callback — هو اللي بيحدد مين يقدر يوصل للنقطة دي. للبيانات العامة __return_true مقبول، لكن أي بيانات حساسة لازم تتحقق من صلاحيات المستخدم — نفس قواعد الأمان اللي اتعلمناها بتتطبق هنا.
محرر المكونات (Gutenberg) باختصار المطور
محرر ووردبريس الحديث مبني على «بلوكات» — كل فقرة وصورة وعنوان بلوك مستقل. كمطور متقدم، تقدر تبني بلوكات مخصصة لعملائك: بلوك «آراء العملاء» بتصميم الشركة، بلوك «الأسعار» بسلوك تفاعلي — بدل ما العميل ينسخ HTML معقد كل مرة. تطوير البلوكات بيحتاج JavaScript (React) جنب PHP، فاعتبره المرحلة التالية بعد ما تتمكن من اللي في المقال ده.
من الكود للدخل: إزاي تبيع المهارة دي
خلينا نكون عمليين: كل اللي فات مهارة — والمهارة من غير سوق مجرد هواية مكلفة للوقت. الحلو في تطوير ووردبريس إنه من أكثر المهارات التقنية طلبًا في سوق العمل الحر العربي، والسبب بسيط: آلاف الشركات والأفراد عندهم مواقع ووردبريس ومحتاجين حد يطورها ويصلحها ويسرعها — ومش كلهم يقدروا يوظفوا مطورًا بدوام كامل.
خدمات تبيعها بالمهارات دي (من الأسهل للأعمق)
- تسريع مواقع ووردبريس: تشخيص بـQuery Monitor + ضبط الكاش + تحسين الصور. خدمة مطلوبة جدًا وسعرها واضح لأن النتيجة قابلة للقياس (قبل/بعد).
- تقوية أمان المواقع: تطبيق قائمة التقوية + فحص وتنظيف. أصحاب المواقع بيدفعوا براحة لما يفهموا إن البديل اختراق يوقع شغلهم.
- تخصيص القوالب: تعديلات لا توفرها الإعدادات — عبر قوالب فرعية وأكواد مخصصة. العميل بيطلب «عاوز الصفحة دي تبقى كده» وإنت بتنفذ.
- بناء قوالب مخصصة: للعملاء اللي عاوزين هوية مختلفة تمامًا — أعلى سعرًا وأطول مدة.
- تطوير إضافات مخصصة: وظائف خاصة بنشاط العميل (حجوزات، عضويات، تكاملات) — دي منطقة الكبار وأسعارها كذلك.
- صيانة شهرية: تحديثات + نسخ احتياطي + مراقبة + تقارير — دخل متكرر من نفس العميل، وأذكى نموذج في القائمة.
ابدأ بخدمة واحدة (التسريع مثلًا)، وابنِ معرض أعمال من مشاريع حقيقية — حتى لو لمعارفك في الأول. العميل بيشتري الدليل مش الوعود: «سرّعت موقعًا من 9 ثوانٍ لثانيتين» أقوى من أي سيرة ذاتية. ولو عاوز خارطة العمل الحر نفسها — إزاي تجيب العملاء وتسعر خدماتك وتتعامل معهم — الدليل الشامل هيكمل الصورة:
ولو حسيت في أي لحظة إن الأساسيات محتاجة مراجعة قبل ما تبيع — ارجع لـدليل ووردبريس الكامل من التثبيت للربح، لأن العميل بيحس بالفرق بين اللي فاهم الأساس واللي حافظ خطوات.
7 أخطاء بتكسر مواقع حقيقية
دي مش أخطاء نظرية — دي الأخطاء اللي بشوفها بتتكرر وبتوقع مواقع شغالة. اعتبرها قائمة تحقق سريعة قبل أي تعديل:
- التعديل على ملفات القالب أو الإضافة الأصلية: أول تحديث يمسح كل شغلك. الحل: قالب فرعي أو إضافة Code Snippets أو إضافتك الخاصة — دايمًا.
- نسيان
returnفي الـFilter: سطر واحد ناقص يخفي محتوى الموقع كله. أي Filter تكتبه، أول حاجة تتأكد منها إن القيمة راجعة. - التجربة على الموقع الحي مباشرة: كود واحد غلط = شاشة بيضاء وزوار بيهربوا. التجربة على نسخة تجريبية أولًا — بلا استثناء.
- تثبيت إضافات من مصادر مجهولة: «إضافة مدفوعة مجانًا» من موقع مجهول = باب خلفي مزروع في موقعك. المستودع الرسمي أو بائع معروف — مفيش طريق تالت.
- إهمال النسخ الاحتياطي قبل التعديلات الكبيرة: قبل تحديث رئيسي أو تعديل جوهري، نسخة احتياطية كاملة ومجربة الاستعادة. خمس دقائق تنقذ شهور شغل.
- تركيب إضافات متعارضة لنفس الوظيفة: إضافتا كاش مع بعض، أو إضافتا حماية مع بعض — النتيجة تعارض وبطء وأعطال غامضة. وظيفة واحدة = إضافة واحدة.
- تجاهل التحديثات خوفًا من كسر الموقع: الحل مش إهمال التحديثات — الحل نسخة تجريبية تجرب عليها التحديث الأول. النسخ القديمة هي أشهر أبواب الاختراق.
المصادر الموثقة
كل مصدر هنا اتفتح واتأكد منه فعليًا. التوثيق الرسمي لووردبريس هو مرجعك الأول دايمًا — محدث، مجاني، وبيجاوب على أي سؤال تقني هيقابلك:
مجاني
شرح الـActions والـFilters من التوثيق الرسمي — المرجع الأساسي لقسم الـHooks في المقال.
مجاني
الدليل الكامل لبناء الإضافات: الأمان، القوائم، الشورت كود، أنواع المحتوى، والـCron.
مجاني
الطريقة الرسمية لإنشاء قالب فرعي خطوة بخطوة — نفس الخطوات المشروحة في المقال.
مجاني
خريطة اختيار ملفات القالب لكل نوع صفحة — المرجع اللي هترجع له وإنت بتبني قوالب.
مجاني
توثيق واجهة البيانات الرسمية: المفاهيم، الاستخدام، وتوسيع الـAPI بنقاط مخصصة.
مجاني
واجهة سطر الأوامر الرسمية لووردبريس — الأوامر والأمثلة اللي استخدمناها في المقال.
مجاني
دروس فيديو ومقالات من فريق ووردبريس نفسه — للمبتدئ والمتقدم.
مجاني
القالب التأسيسي الأشهر لبدء بناء قالب مخصص — حمّله وابدأ التعديل عليه.
مجاني + مدفوع
إضافة إدارة الأكواد المخصصة — النسخة المجانية كافية للـPHP والـHTML، والنسخة المدفوعة (Pro) تضيف CSS وJavaScript والمزامنة السحابية.
مجاني
لوحة أدوات المطور: الاستعلامات البطيئة، أخطاء PHP، والـHooks — أساسية للتشخيص.
مجاني + مدفوع
إضافة الكاش والتسريع — مجانية ومفتوحة المصدر، وبعض خدمات QUIC.cloud السحابية مدفوعة عند مستويات استخدام معينة.
مجاني + مدفوع
النسخ الاحتياطي والترحيل — النسخة المجانية تفي بالغرض للنسخ المجدول، والنسخة المدفوعة (Premium) تضيف مزايا متقدمة.
مجاني
الدليل الرسمي لتأمين ووردبريس: الصلاحيات، التحديثات، والحماية — مرجع قسم الأمان.
مدفوع
إضافة الكاش والأداء الشهيرة — مدفوعة بالكامل بدون نسخة مجانية، وتتميز بسهولة الضبط.
الأسئلة الشائعة
هل أحتاج أتعلم PHP كامل قبل ووردبريس المتقدم؟
لا — تحتاج أساسيات PHP فقط: المتغيرات والمصفوفات والشروط والحلقات والدوال. معظم شغل مطور ووردبريس هو استدعاء دوال ووردبريس الجاهزة وربطها بالـHooks، مش كتابة خوارزميات معقدة. ستتعلم الباقي بالتطبيق مع كل Snippet وإضافة تكتبها.
إيه الفرق بين Action وFilter؟
الـAction ينفذ مهمة في لحظة معينة ولا يرجع قيمة (مثل إرسال إشعار عند نشر مقال)، بينما الـFilter يستلم قيمة ويعدلها ويجب أن يرجعها (مثل تغيير طول المقتطف). أشهر خطأ للمبتدئين هو نسيان الـreturn في الـFilter فيختفي المحتوى من الموقع.
أعدّل ملف functions.php مباشرة ولا أستخدم إضافة Code Snippets؟
لا تعدل ملف functions.php الخاص بالقالب الأصلي أبدًا — أي تحديث للقالب سيمسح تعديلاتك. الخيارات الآمنة بالترتيب: إضافة Code Snippets للأكواد الصغيرة، ملف functions.php الخاص بالقالب الفرعي، أو إضافتك الخاصة للوظائف الكبيرة.
هل القالب الفرعي (Child Theme) ضروري فعلًا؟
نعم إذا كنت تعدل أي ملف من ملفات القالب أو تضيف دوالًا مخصصة وتريد الحفاظ على تحديثات القالب الأصلي. القالب الفرعي يرث كل شيء من الأب، وأي ملف تضعه فيه بنفس الاسم يتفوق على الأصل. البديل الوحيد هو بناء قالب مخصص كامل من الصفر.
إزاي أتأكد إن الكود اللي كاتبه آمن؟
التزم بالقواعد الثلاث: عقّم كل مدخلات المستخدم بدوال التعقيم المناسبة، واهرب من كل المخرجات لحظة العرض، وتحقق من الـNonce والصلاحيات في أي إجراء حساس. واستخدم $wpdb->prepare لأي استعلام SQL مباشر. هذه القواعد تغطي الغالبية العظمى من الثغرات الشائعة.
موقعي بطيء رغم إضافة الكاش — المشكلة فين؟
الكاش يخفي الأعراض ولا يعالج السبب. ركّب Query Monitor وافحص عدد استعلامات قاعدة البيانات والاستعلامات البطيئة — غالبًا ستجد إضافة واحدة سيئة هي السبب. عالج السبب (أصلح أو استبدل الإضافة الثقيلة)، ثم اضبط الكاش، ثم حسّن الصور. القياس قبل الإصلاح دائمًا.
أقدر أبني قالب كامل من غير ما أعرف JavaScript؟
نعم للقالب الكلاسيكي — تحتاج PHP وCSS وHTML فقط، وJavaScript الأساسية تكفي للتفاعلات البسيطة. أما قوالب البلوكات الحديثة وتطوير البلوكات المخصصة فتحتاج JavaScript (React) بجدية أكبر. ابدأ بالكلاسيكي ثم توسع.
إيه الفرق بين القالب الكلاسيكي وقالب البلوكات؟
القالب الكلاسيكي يستخدم ملفات PHP والقوالب تُعدل بالكود، بينما قالب البلوكات يستخدم ملفات HTML مع ملف theme.json للإعدادات والتعديل يتم من محرر الموقع المرئي. التسلسل الهرمي لاختيار القوالب واحد في الاثنين، وتعلم الكلاسيكي أولًا يجعل فهم البلوكات أسهل.
إزاي أختبر تعديلاتي من غير ما أكسر الموقع الحي؟
استخدم بيئة تجريبية (Staging) — نسخة طبق الأصل من موقعك على نطاق فرعي أو مجلد منفصل. معظم الاستضافات الجيدة توفر إنشاءها بنقرة واحدة. جرّب عليها التحديثات والأكواد الجديدة أولًا، وبعد التأكد انقل التغييرات للموقع الحي. وفعّل وضع التصحيح WP_DEBUG في بيئة التطوير لرؤية الأخطاء الحقيقية.
هل يستاهل أتعلم WP-CLI؟
نعم بشدة إذا كنت تدير أكثر من موقع أو تكرر مهامًا معينة. أي شيء تفعله من لوحة التحكم يمكن تنفيذه بأمر واحد: تثبيت الإضافات، التحديثات، النسخ الاحتياطي لقاعدة البيانات، والاستبدال الشامل للروابط عند نقل المواقع. الميزة الكبرى هي تجميع الأوامر في سكربتات تعمل تلقائيًا.
هل كثرة الإضافات بتبطئ الموقع فعلًا؟
العدد وحده ليس المشكلة — المشكلة في جودة الإضافات. عشر إضافات خفيفة مكتوبة جيدًا أفضل من إضافة واحدة سيئة تنفذ مئات الاستعلامات. استخدم Query Monitor لمعرفة الإضافة التي تستهلك الموارد، واحتفظ بما تحتاجه فعلًا، وتجنب تركيب إضافتين لنفس الوظيفة.
إمتى أقدر أبدأ أبيع خدمات تطوير ووردبريس؟
عندما تستطيع تنفيذ خدمة واحدة كاملة بثقة — مثل تسريع موقع أو تقوية أمانه أو تخصيص قالب — ولديك مشروعان أو ثلاثة في معرض أعمالك تثبت النتيجة. ابدأ بخدمة واحدة متخصصة بدل أن تعرض كل شيء، فالعميل يشتري الدليل على النتيجة لا قائمة المهارات.
خطوتك الجاية: كود واحد النهاردة
متقفلش المقال من غير تطبيق. افتح موقعك التجريبي، ركب إضافة Code Snippets، وانسخ كود تغيير طول المقتطف من القسم الثاني وشوف النتيجة بعينك. أول Snippet شغال بإيدك هو اللحظة اللي بتتحول فيها من مستخدم لمطور — والباقي تكرار وتوسع.