تطوير موضوعات ووردبريس: إتقان الممارسات الأساسية وما هو الأفضل لملف `functions.php`.

قراءة 4 دقائق
2026-03-13
2026-06-03
2,397
أنا أحصل على عمولة عند التسوق عبر الروابط أدناه، ولا يُضاف أي تكلفة عليك.

ملف `functions.php`: التعريف والدور الأساسي

في مواضيع ووردبريس (WordPress themes):functions.phpهذا ملف خاص وقوي للغاية. في جوهره، يعتبر ملف إضافة (plugin) مخصص لموضوع (theme) معين، ويتم تحميله عند تفعيل ذلك الموضوع ويتوقف عن العمل عند تعطيله. الغرض الرئيسي من هذا الملف هو إضافة ميزات مخصصة للموضوع وتعديل سلوك نظام ووردبريس (WordPress) الأساسي، دون الحاجة إلى تعديل الملفات الأساسية لنظام ووردبريس أو إنشاء إضافات منفصلة. وهذا يعني أن المطورين يمكنهم إدارة جميع الميزات المخصصة للموضوع بشكل مركزي، بدءًا من تفعيل ميزات بسيطة مثل الصور الرئيسية، وصولاً إلى تسجيل أنواع المقالات المخصصة المعقدة، وبناء لوحات خيارات الموضوع، بالإضافة إلى استخدام الأدوات المساعدة مثل “ال

الفهمfunctions.phpنطاق تأثير هذا الملف (file) أمر في غاية الأهمية؛ فهو يعمل فقط على الموضوع (theme) الذي ينتمي إليه، مما يضمن قابلية نقل الوظائف (functions) وسلامة بنية الموضوع نفسه. من خلال كتابة الكود في هذا الملف، يمكنك إضافة أي وظيفة تقريبًا إلى موقعك الإلكتروني بشكل آمن، مع الحفاظ على مرونة التحديثات المستقبلية وإمكانية نقل الموضوع إلى نسخ أخرى. بالنسبة للمبتدئين والمطورين المحترفين على حد سواء، فإن دراسة هذا الملف بعمق وإتقانه أمر ضروري للانتقال من تعديلات المواضيع الأ

الإعدادات الأولية لوظيفة الموضوعات والدوال الشائعة الاستخدام

تفعيل ميزة دعم المواضيع

يجب على كل موضوع ووردبريس حديث أن يوضح الميزات الأساسية (الوظائف الأساسية) التي يدعمها، ويتم ذلك عن طريق…add_theme_support()يتم تنفيذ هذه الوظيفة من خلال كتابة دالة (function). تخبر هذه الدالة ووردبريس (WordPress) بالميزات التي يمكن لقالبك (theme) التعامل معها وعرضها، مثل ملفات ملخص المقالات (article thumbnails)، الشعارات المخصصة (custom logos)، ودعم علامات HTML5، وغيرها.

القراءة الموصى بها دليل متقدم لتطوير مواقع ووردبريس: بناء مواقع استجابية عالية الجودة من الصفر

if ( ! function_exists( 'mytheme_setup' ) ) {
    function mytheme_setup() {
        // 支持文章和评论的Feed链接
        add_theme_support( 'automatic-feed-links' );
        // 启用文章特色图像功能
        add_theme_support( 'post-thumbnails' );
        // 启用自定义Logo功能
        add_theme_support( 'custom-logo', array(
            'height'      => 100,
            'width'       => 400,
            'flex-height' => true,
            'flex-width'  => true,
        ) );
        // 对文章格式和页面标题的HTML5标记支持
        add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) );
        add_theme_support( 'title-tag' );
    }
}
add_action( 'after_setup_theme', 'mytheme_setup' );

قم بتغليف كود التكوين داخل…after_setup_themeفي الكوود المستخدم لإنشاء “الخطافات” (hooks)، تأكد من أنها تتم تنفيذها بشكل صحيح عند بدء تشغيل الموضوع (theme initialization).

خادم ووردبريس من شركة UltaHost
ضمان استرداد المال خلال 30 يومًا، عرض نطاق ترددي وقواعد بيانات غير محدودين، حماية مجانية ضد هجمات DDoS، خصم 50% عند الشراء لمدة 3 سنوات (السعة المتاحة: 501–4 تيرابايت).

قائمة التنقل وشريط الجانبي لعملية التسجيل

عادةً ما يتضمن الموضوع الكامل قائمة تنقل قابلة للتخصيص ومنطقة للأدوات الإضافية (الشريط الجانبي). وهذا يتطلب استخدام…register_nav_menus()وregister_sidebar()دالة.

// تسجيل مواقع قوائم الموضوعات
function mytheme_register_menus() {
    register_nav_menus( array(
        'primary' => __( 'القائمة الرئيسية', 'mytheme' ),
        'footer'  => __( 'قائمة التذييل', 'mytheme' ),
    ) );
}
add_action( 'after_setup_theme', 'mytheme_register_menus' );

// تسجيل منطقة ودجت صغيرة
function mytheme_widgets_init() {
    register_sidebar( array(
        'name'          => __( 'الشريط الجانبي الرئيسي', 'mytheme' ),
        'id'            => 'sidebar-1',
        'description'   => __( 'أضف ودجات الشريط الجانبي الرئيسي هنا.', 'mytheme' ),
        'before_widget' =&gt; '<section id="%1$s" class="widget %2$s">',
        'after_widget'  =&gt; '</section>',
        'before_title'  =&gt; '<h2 class="widget-title">',
        'after_title'   =&gt; '</h2>'مهما كان الأمر، أنا فخور بكوني جزءًا من هذا الفريق، وأتطلع إلى مواصلة العمل معكم جميعًا في المستقبل.;

إدارة الكوائنات (السكريبتات والأنماط) بشكل متسلسل (قائمة)

للالتزام بأفضل ممارسات تطوير ووردبريس وتجنب أي تعارضات، يجب أن تتم إدارة جميع ملفات الجافا سكريبت (JavaScript) والأستايلات (CSS) من خلال…wp_enqueue_scriptsيتم تنفيذ عملية التحميل باستخدام “الخطافات” (hooks). يوفر ووردبريس (WordPress) العديد من هذه الخطافات لتسهيل إدارة العمليات المختلفة داخل الموقع.wp_enqueue_style()وwp_enqueue_script()تم استخدام دالة لتحقيق هذا الغرض.

function mytheme_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style( 'mytheme-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) );

// 引入Google Fonts
    wp_enqueue_style( 'mytheme-google-fonts', 'https://fonts.example.com/family=Open+Sans&display=swap', array(), null );

// 引入自定义JavaScript文件,并依赖jQuery
    wp_enqueue_script( 'mytheme-navigation', get_template_directory_uri() . '/js/navigation.js', array( 'jquery' ), wp_get_theme()->get( 'Version' ), true );

// 为脚本局部化数据,将PHP变量安全传递到JavaScript
    wp_localize_script( 'mytheme-navigation', 'mythemeScreenReaderText', array(
        'expand'   => __( '展开子菜单', 'mytheme' ),
        'collapse' => __( '收起子菜单', 'mytheme' ),
    ) );
}
add_action( 'wp_enqueue_scripts', 'mytheme_scripts' );

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

الاستفادة من الخطافات (hooks) والمرشحات (filters) للتخصيص العميق

فهم الإجراءات (Actions) والمرشحات (Filters)

تعتمد قابلية التوسعة الأساسية في ووردبريس إلى حد كبير على بنيتها المبنية على الإضافات (Plugins)، والتي تُعرف بـ "الخطافات" (Hooks). تنقسم الخطافات إلى نوعين: الإجراءات (Actions) والمرشحات (Filters). تسمح الإجراءات (Actions) بتنفيذ كود مخصص في أوقات محددة، بينما تسمح المرشحات (Filters) بتعديل البيانات التي يتم تمريرها أثناء تشغيل ووردبريس.functions.phpإنه مكان ممتاز لاستخدام هذه الخطافات.

القراءة الموصى بها من مرحلة الصفر إلى مرحلة واحدة: دليل عملي شامل لتطوير موضوعات ووردبريس.

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

إنشاء أنواع مقالات مخصصة

لإنشاء أنواع محتوى تتجاوز النوعين الافتراضيين “مقال” (Article) و“صفحة” (Page)، يجب عليك تسجيل أنواع مقالات مخصصة. عادةً ما يتم ذلك عن طريق…initيتم التنفيذ داخل الخطاف (hook).

function mytheme_register_portfolio() {
    $labels = array(
        'name'               => _x( '作品集', '作品集通用名称', 'mytheme' ),
        'singular_name'      => _x( '作品', '作品单数名称', 'mytheme' ),
        'menu_name'          => __( '作品集', 'mytheme' ),
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'portfolio' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    );
    register_post_type( 'portfolio', $args );
}
add_action( 'init', 'mytheme_register_portfolio' );

تعديل الاستعلام الافتراضي والنتائج المعروضة

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

استضافة.كوم استضافة مشتركة
أداء عالٍ مع وحدات المعالجة المركزية AMD EPYC، ووحدات تخزين NVMe SSD وLiteSpeed، ودعم داخلي متخصص على مدار الساعة طوال أيام الأسبوع، وتدابير أمنية متقدمة بما في ذلك SSL، وقوة الغاشمة، والحماية من البرامج الضارة والحماية من DDoS، وتوفير ما يصل إلى 731 تيرابايت 4 تيرابايت
// 修改主页查询,排除特定分类
function mytheme_exclude_category_home( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-5, -9' ); // 排除ID为5和9的分类
    }
}
add_action( 'pre_get_posts', 'mytheme_exclude_category_home' );

// 修改摘录长度
function mytheme_excerpt_length( $length ) {
    return 30; // 将默认的55词改为30词
}
add_filter( 'excerpt_length', 'mytheme_excerpt_length' );

أفضل الممارسات في مجال الأمان والأداء والصيانة

قوي ومتينfunctions.phpيجب أن لا تقتصر الملفات على تنفيذ الوظائف المطلوبة فحسب، بل يجب أيضًا الاهتمام بالأمان والأداء وسهولة الصيانة.

أولاً، يجب تنفيذ عمليات تهريب (escaping) والتحقق (validation) لجميع المدخلات الواردة من المستخدمين. يوفر ووردبريس مجموعة واسعة من الدوال الأمنية (security functions) لتسهيل هذه المهام.esc_html()esc_url()وsanitize_text_field()تأكد من استخدام الدوال المناسبة للتهريب (escaping functions) عند عرض أي بيانات ديناميكية على الواجهة الأمامية (frontend).

ثانيًا، انتبه إلى تنظيم الكود. الكود الذي يتجاوز مئات الأسطر…functions.phpسيصبح من الصعب صيانة الملفات مع مرور الوقت. أفضل حل هو استخدامها كـ “محملات” (loaders)، وتقسيم الكود الخاص بكل وظيفة إلى ملفات PHP منفصلة داخل مجلدات المواضيع (theme directories)، ثم…functions.phpإنه متاح في جميع أنحاء الصين.require_onceإدخال.

القراءة الموصى بها اكتساب المعرفة بسرعة حول تطوير مواضيع WordPress: دليل كامل من الصفر إلى الممارسة العملية.

// 在functions.php中组织代码
require_once get_template_directory() . '/inc/theme-setup.php';
require_once get_template_directory() . '/inc/enqueue-scripts.php';
require_once get_template_directory() . '/inc/custom-post-types.php';
require_once get_template_directory() . '/inc/custom-functions.php';

من حيث الأداء، يجب تجنب…functions.phpيجب تجنب إجراء عمليات الاستعلام عن البيانات أو التعامل مع الملفات التي تستغرق وقتًا طويلاً مباشرةً في الكود، خاصةً في الكود الذي يتم تنفيذه عند تحميل كل صفحة. يمكن استخدام آليات التخزين المؤقت (الكاش)، واستغلال أوقات تنفيذ الو

أخيرًا، أضف تعليقات واضحة باللغة الصينية للدوال المخصصة والمكونات المستخدمة (الـ “hooks”) الخاصة بك، واستخدم مجالات النصوص المتعلقة بالموضوع (مثل تلك الموجودة أعلاه).mythemeقم بتهيئة جميع النصوص المُعدة للمستخدمين لتكون دولية (internationalized)، وهذا سيسهل بشكل كبير التعاون فيما بعد وترجمة المحتوى إلى اللغات المحلية.

الاستضافة المشتركة InterServer
استضافة مشتركة $2.50 دولار أمريكي في الشهر، الشهر الأول $0.1 دولار أمريكي الرمز الترويجي tryinterserver، 461 نص برمجي للتطبيقات السحابية، تثبيت بنقرة واحدة.

الملخصات

functions.phpالملفات هي قلب ونظام العصبي المركزي في تطوير مواقع ووردبريس (WordPress). بدءًا من دعم الميزات الأساسية للمواقع، وإدارة القوائم والشرائط الجانبية، مرورًا بتوحيد أنماط السكريبتات، وصولاً إلى إمكانية التخصيص المتقدم وغير المتدخل من خلال الأفعال (actions) والمرشحات (filters)، فإن هذه الملفات تمنح المطورين القدرة الهائلة على تشكيل سلوك ووردبريس كما يرغبون. اتباع ممارسات التطوير الحديثة مثل الكود الآمن، وتحسين الأداء، وتنظيم المكونات بشكل معياري سيساعدك في إنشاء مواfunctions.phpالملف قوي للغاية، وفي الوقت نفسه متين وسهل الصيانة والتوسيع. إتقانه يعني أنك تمتلك المفتاح للتحول من مستخدم للقوالب المعدة مسبقًا إلى مبدع حقيقي للقوالب.

الأسئلة الشائعة الأسئلة المتداولة

كيف يمكن تعديل ملف `functions.php` بشكل آمن؟

إن إنشاء مواضيع فرعية (subtopics) هو الطريقة الأكثر أمانًا والأكثر توصية حاليًا لتعديل وتوسيع وظائف الموضوع الرئيسي (parent topic). يمكنك إنشاء المواضيع الخاصة بك ضمن دليل المواضيع الفرعية (subfunctions.phpالملف: لن يتم تغطية هذا الملف بتحديثات الموضوع الأصلي (الموضوع الأب)، وسيتم تنفيذه قبل تنفيذ تحديثات الموضوع الأصلي.functions.phpتم تحميل الملف. في هذا الملف الخاص بالموضوع الفرعي (الsub-topic)، يمكنك إضافة دوال جديدة مباشرةً، أو تغيير دوال الموضوع الرئيسي (الparent-topic) عن طريق استخدام “الخطافات” (hooks). على سبيل المثال، إذا كنت ترغب فقط في تعديل طريقة تحميل أنماط الموضوعfunctions.phpقم بإلغاء تعيين خيار “الاستمرار في تنفيذ قوائم أنماط الموضوع الأب” (Continue to apply the parent topic’s style queue)، ثم قم بإعادة ترتيب قوائم أنماطك الخاصة.

لماذا لم يتم تنفيذ الكود الذي أضفته؟

هناك عدة أسباب شائعة لعدم فعالية الكود. أولاً، قم بفحص وجود أخطاء في الصياغة (السينتكس)؛ فخطأ بسيط في لغة PHP قد يؤدي إلى فشل تنفيذ الكود بأكمله.functions.phpفشل تنفيذ الملف. يمكنك حل هذه المشكلة عن طريق تفعيل…WP_DEBUGأولاً، تحقق من وجود أي رسائل خطأ عند عرض النموذج. ثانياً، تأكد من أن الكود قد تم إضافته في المكان الصحيح (على سبيل المثال، هل تم تعريف الدالة داخل الخطاف المناسب، وهل تم تنفيذ هذا الخطاف فعلاً؟). ثالثاً، فحص ما إذا كانت هناك تعارضات في أسماء الدوال أو الخطافات؛ من الأفضل إضافة بادئة فريدة للدوال المخصصة. أخيراً، تأكد من أن التعديلات التي قمت بها قد تم حفظها بشكل صحيح، وقم بتنظيف ذاكرة التخزين المؤقت للمتصفح وموقع ووردبريس عند

كيفية إضافة رموز قصيرة مخصصة في ملف functions.php؟

فيfunctions.phpإضافة الكود المختصر (short code) إلى المحتوى هي طلب شائع جدًا.add_shortcode()يمكن تحقيق ذلك بسهولة من خلال استخدام دوال. أولاً، يجب عليك تعريف دالة تعاكسية (callback function) لتوليد محتوى الناتج للكود المختصر، ثم استخدام هذه الدالة لإنجاز المهمة المطلوبة.add_shortcode()قم بتسجيله.

// تعريف دالة رد الاتصال للرمز القصير
function mytheme_contact_button_shortcode( $atts ) {
    // تحليل خصائص الرمز القصير
    $atts = shortcode_atts( array(
        'text' =&gt; 'اتصل بنا',
        'url'  =&gt; '/contact',
    ), $atts, 'contact_button' );

// إرجاع إخراج HTML آمن
    return '<a href="/ar/' . esc_url( $atts['url'] ) . '/" class="contact-button">'`. esc_html($atts['text'])`.'</a>'// تسجيل الرمز المختصر
add_shortcode( 'contact_button', 'mytheme_contact_button_shortcode' );

بعد ذلك، يمكنك استخدامه في المقالات أو الصفحات أو الأدوات الصغيرة.[contact_button text="点击联系" url="/contact-us"]حان وقت استخدام هذا الكود المختصر.

ما هي مزايا وعيوب إضافة الميزات إلى ملف functions.php مقارنةً بالإضافات المستقلة؟

فيfunctions.phpأكبر ميزة لإضافة الميزات إلى القوالب (templates) هي التكامل الوثيق والسهولة في الاستخدام؛ حيث يتم ربط جميع أجزاء الكود مع القالب نفسه، مما يسهل عمليات الإدارة والتوزيع، خاصة عندما تكون هذه الميزات جزءًا أساسيًا من مظهر وتجربة الموقع. العيب في ذلك هو أن هذه الميزات مرتبطة بدورة حياة القالب، وبمجرد تغيير القالب، تختفي هذه الميزات أيضًا، مما قد يؤدي إلى فقدان بعض محتويات الموقع أو وظائفه. أما الإضافات (plugins) المستقلة فتوفر فصلًا بين الميزات والمظهر، بحيث تظل الميزات كما هي بغض النظر عن القالب المستخدم، وهو خيار أفضل بالنسبة للوظائف العامة مثل تحسين ترتيب محركات البحث (SEO)، وإدارة النماذج (forms)، وتخزين البيانات (caching). أفضل ممارسة هي وضع الميزات التي تتعلق فقط بالطبقة الظاهرية (مثلfunctions.phpعندما تكون الوظيفة متعلقة بطبقة البيانات أو بالمنطق العام (مثل إنشاء أنواع مقالات مخصصة أو تحسينات في إدارة المستخدمين)، وخاصةً عند الرغبة في الحفاظ على هذه الوظائف بين مواضيع م