عند بناء متجر WooCommerce ذو ميزات متعددة، غالبًا ما لا تكون الحقول الافتراضية للمنتجات كافية لتلبية جميع متطلبات العمل. سواء كان الأمر يتعلق بإضافة جداول المقاسات للملابس، أو المواصفات التقنية للمنتجات الإلكترونية، أو إضافة شروحات مخصصة للخدمات المدفوعة مقدمًا، فإن المطورين بحاجة إلى توسيع نموذج بيانات المنتج. الحقول المخصصة هي التقنية الأساسية لتحقيق ذلك، حيث تسمح لك بإضافة خصائص بيانات إضافية للمنتجات والطلبات بل وحتى للمستخدمين، ودمجها بسلاسة مع الواجهة الأمامية والخلفية للمتجر.
سيتناول هذا المقال بالتفصيل عملية التطوير الكاملة للحقول المخصصة في منصة WooCommerce، بدءًا من إنشاء البيانات وتخزينها، مرورًا بالإدارة في الجزء الخلفي من الموقع (البايثون)، وصولاً إلى عرضها في الجزء الأمامي (واجهة المستخدم). كما سيقدم مهارات متقدمة وأفضل الممارسات لمساعدتك على بناء حلول تجار
المفاهيم الأساسية وأنواع الحقول المخصصة في WooCommerce
قبل البدء في التطوير، من المهم جدًا فهم أنواع المجالات المخصصة (Custom Fields) المختلفة في WooCommerce والسيناريوهات التي يمكن استخدامها فيها. هذا يحدد مكان تخزين البيانات، والطريقة التي يتم بها تخزينها، ومدى قابلية الوصول إليها
القراءة الموصى بها دليل WooCommerce: بناء موقع تجارة إلكترونية مستقل وشامل من الصفر.。
حقول مخصصة للمنتج (Product Custom Fields)
الحقول المخصصة للمنتجات هي النوع الأكثر شيوعًا، وتُستخدم لإضافة معلومات إضافية إلى كل منتج على حدة. على سبيل المثال، رقم ISBN لكتاب أو نوع وحدة المعالجة المركزية (CPU) لجهاز كمبيوتر. عادةً ما تكون هذه البيانات مرتبطة بمنتج معين ويجب عرضها على صفحة تفاصيل المنتج. هناك طريقتان رئيسيتان لتنفيذ ذلك: الأولى هي استخدام خصائص المنتج (Attributes) والبيانات الوصفية (Metadata) المدمجة في منصة WooCommerce، والثانية هي إضافة الحقول مباشرةً إلى نوع مقالات المنتجات باستخدام واجهة برمجة التطبيقات (API) الخاصة بالبيانات الوصفية في منصة WordPress (Post Meta).
الدالة الأساسية للتخزين هي…update_post_meta()يسمح لك بربط أزواج البيانات (المفتاح-القيمة) مع أي نوع من المقالات (بما في ذلك…).productيتم ربطها معًا. الدالة المقابلة للقراءة هي…get_post_meta()。
الطلبات والحقول المخصصة من قبل المستخدم
بالإضافة إلى المنتجات، غالبًا ما يكون هناك حاجة أيضًا إلى توسيع المعلومات المتعلقة بالطلبات والمستخدمين. على سبيل المثال، يمكن إضافة “عنوان الفاتورة” أو “متطلبات تغليف الهدايا” إلى الطلب، أو إضافة “مستوى العضوية” أو “كودwp_postmetaفي الجدول، يمكن القيام بذلك عن طريق…update_post_meta()لأجلshop_orderتمت إضافة حقل لأنواع المقالات. بينما يتم تخزين بيانات المستخدمين في…wp_usermetaفي الجدول، من الضروري استخدام واجهة برمجة التطبيقات (API) لبيانات المستخدمين الخاصة بـ WordPress، مثلاً…update_user_meta()وget_user_meta()دالة.
فهم هذه الآليات الأساسية للتخزين سيساعدك على اختيار الواجهات البرمجية (APIs) المناسبة أثناء التطوير، وكذلك على الاستعلام عن البيانات المخصصة بكفاءة عالية.
إنشاء حقول مخصصة في الواجهة الخلفية للإدارة
دمج الحقول المخصصة في واجهة إدارة WooCommerce (لوحة تحكم WordPress) أمر بالغ الأهمية لتمكين مديري المتاجر من تعديل هذه البيانات بسهولة. يتم تحقيق ذلك بشكل أساسي من خلال ميزة الصناديق الوصفية (Metaboxes) في WordPress.
القراءة الموصى بها دليل تعليمي متعمق لـ WooCommerce: إنشاء موقع إلكتروني احترافي للتجارة الإلكترونية عبر الحدود من الصفر.。
استخدم خيوط التشغيل (Operation Hooks) في WooCommerce لإضافة مربعات البيانات الإضافية (Metadata Boxes).
لإضافة منطقة إدخال مخصصة على صفحة تحرير المنتج، يجب عليك استخدام…add_meta_boxesالخطاف (hook) أو متغيراته الأكثر تحديدًاadd_meta_boxes_productأولاً، يجب عليك إنشاء دالة تعاقدية (callback function) لعرض حقول نموذج HTML.
على سبيل المثال، الكود التالي يضيف مربع بيانات يحتوي على “معلومات الشركة المصنعة” للمنتج:
add_action( 'add_meta_boxes', 'add_custom_product_meta_box' );
function add_custom_product_meta_box() {
add_meta_box(
'custom_product_manufacturer', // 元框唯一ID
'制造商信息', // 元框标题
'render_custom_manufacturer_fields', // 回调函数,用于输出HTML
'product', // 显示在哪个文章类型上
'side', // 上下文位置(side, normal, advanced)
'default' // 优先级
);
}
function render_custom_manufacturer_fields( $post ) {
// 添加安全字段 nonce
wp_nonce_field( 'save_custom_manufacturer', 'custom_manufacturer_nonce' );
// 获取已保存的值
$value = get_post_meta( $post->ID, '_product_manufacturer', true );
// 输出HTML输入框
echo '<label for="product_manufacturer">制造商名称:</label>';
echo '<input type="text" id="product_manufacturer" name="product_manufacturer" value="' . esc_attr( $value ) . '" style="width:100%;" />';
} حفظ بيانات الحقول المخصصة
مجرد عرض مربع الإدخال ليس كافيًا؛ يجب أيضًا حفظ بيانات المستخدم بشكل آمن. وهذا يتطلب استخدام طرق معينة لضمان أمان البيانات أثناء عمليات الإدخال والتخزين.save_post_productيتم إكمال العملية داخل الدالة المكتوبة للاستجابة للتنبيه (callback function) الناتج عن تفعيل الخطاف (hook). يجب أن تتضمن منطق الحفظ (saving logic) عمليات تحقق من الصلاحيات (permission checks)، والتحقق من صحة الأرقام العشوائية (random number validation
استكمالًا للمثال السابق، فإن الدالة المسؤولة عن حفظ البيانات هي كالتالي:
add_action( 'save_post_product', 'save_custom_product_manufacturer_field' );
function save_custom_product_manufacturer_field( $post_id ) {
// 检查自动保存、用户权限和nonce验证
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if ( ! current_user_can( 'edit_post', $post_id ) ) return;
if ( ! isset( $_POST['custom_manufacturer_nonce'] ) || ! wp_verify_nonce( $_POST['custom_manufacturer_nonce'], 'save_custom_manufacturer' ) ) return;
// 检查字段是否存在并净化数据
if ( isset( $_POST['product_manufacturer'] ) ) {
$manufacturer_data = sanitize_text_field( $_POST['product_manufacturer'] );
// 使用带下划线的前缀,表示该字段为“隐藏”的元数据
update_post_meta( $post_id, '_product_manufacturer', $manufacturer_data );
}
} عرض الحقول المخصصة في الواجهة الأمامية
عرض بيانات الحقول المخصصة المخزنة بشكل أنيق للعملاء هو الخطوة الأخيرة في عملية التطوير. يتطلب ذلك استخدام نظام القوالب (templates) ومكونات الاستجابة السريعة (action hooks) المتاحة في منصة WooCommerce.
إدراج المحتوى في صفحة المنتج الفردية
أسهل طريقة هي إضافة المحتوى بعد ملخص المنتج أو صفحة الوصف. يوفر WooCommerce مجموعة واسعة من خيارات التعديل (action hooks)، مثل…woocommerce_product_meta_end(بعد معلومات المنتج الأساسية) أوwoocommerce_after_single_product_summary(بعد قسم ملخص المنتج).
القراءة الموصى بها WooCommerce: من المبتدئين إلى الخبراء: الدليل الشامل لبناء مواقع التجارة الإلكترونية المحترفة。
على سبيل المثال، عرض “معلومات الشركة المصنعة” أسفل سعر المنتج:
add_action( 'woocommerce_product_meta_end', 'display_custom_manufacturer_on_frontend' );
function display_custom_manufacturer_on_frontend() {
global $product;
$manufacturer = get_post_meta( $product->get_id(), '_product_manufacturer', true );
if ( ! empty( $manufacturer ) ) {
echo '<div class="product-manufacturer">'echo '<strong>المصنع:</strong>' . esc_html( $manufacturer );
echo '</div>';
}
} إنشاء صفحة تصنيف المنتجات المخصصة
بالنسبة للحقول المخصصة التي تحتوي على كمية كبيرة من المعلومات (مثل المواصفات التفصيلية أو كتيبات المستخدم)، فإن إنشاء صفحة علامة منتج مستقلة يوفر تجربة مستخدم أفضل. ويتطلب ذلك استخدام عدة أwoocommerce_product_tabsمكونات الفلتر (filter hooks) ودالة استدعاء مخصصة (custom callback function) تُستخدم لعرض المحتوى.
add_filter( 'woocommerce_product_tabs', 'add_custom_product_spec_tab' );
function add_custom_product_spec_tab( $tabs ) {
global $product;
$specs = get_post_meta( $product->get_id(), '_product_specifications', true );
// 仅当该字段有内容时才添加标签页
if ( ! empty( $specs ) ) {
$tabs['specifications_tab'] = array(
'title' => '产品规格',
'priority' => 50,
'callback' => 'render_custom_specifications_tab_content'
);
}
return $tabs;
}
function render_custom_specifications_tab_content() {
global $product;
$specs = get_post_meta( $product->get_id(), '_product_specifications', true );
// 假设存储的是HTML或纯文本,使用wp_kses_post允许安全的HTML标签
echo '<div class="product-specifications">'`. wp_kses_post( wpautop( $specs ) )`.'</div>';
} تقنيات متقدمة وتحسين الأداء.
عندما يزداد عدد الحقول المخصصة وتعقيدها، يجب أيضًا ترقية طرق التطوير بشكل ملائم لضمان قابلية صيانة الكود وأمانه وأداء المتجر.
استخدام إضافات المجالات المخصصة المتقدمة مثل ACF Pro
بالنسبة لغير المطورين أو الفرق التي ترغب في تنفيذ أنواع حقول معقدة بسرعة (مثل تحميل الصور، محددات التاريخ، الحقول العلاقية)، فإن استخدام Advanced Custom Fields Pro (ACF Pro) وتكامله مع WooCommerce يعتبر خيارًا ممتازًا. يوفر هذا البرنامج واجهة رسومية سهلة الاستخدام لإنشاء مجموعات الحقول، ويتعامل تلقائيًا مع عمليات حفظ وتحميل البيانات، مما يساعد بشكل كبير على تحسين كفاءة عملية التطوير.
ضمان كفاءة عمليات استعلام البيانات.
مباشرةً في…wp_postmetaإجراء عدد كبير من عمليات البحث من نوع LIKE على الجداول، أو القيام بعمليات بحث على مفاتيح غير مفهرسة، يعتبر من الأسباب الشائعة لبطء سرعة الموقع الإلكتروني. من أجل تحسين أداء عمليات البحث عن المنتجات التي تحتوي على حقول مخص
1. استخدام بادئة تحتوي على خط أسفل (_): كما في المثال السابق._product_manufacturerهذا يمنع عرض الحقول داخل مربع البيانات الافتراضي لـ “الحقول المخصصة” في ووردبريس (WordPress’s default “Custom Fields” metadata box)، ولكن الأهم من ذلك، أنه يساعد في تحسين أداء بعض الاستعلامات (queries).
٢. نسخ الحقول الرئيسية إلى تصنيفات المنتجات أو العلامات: إذا كنت بحاجة متكررةً إلى تصفية المنتجات أو تصنيفها بناءً على حقل مخصص (مثل “العلامة التجارية”)، فمن الأفضل إنشاء هذا الحقل كخاصية لمنتج في WooCommerce أو كجزء من نظام التصنيفات الخاص بالموقع. هذا سيسمح لك باستخدام أدوات البحث المتقدمة المتاحة في WordPress، بدلاً من الاعتماد على استعلامات البيانات الوصفية (الميتاداتا) التي قد تكون أبطأ في الأداء.
3. استخدم بحذر.meta_queryفيWP_QueryأوWC_Product_Queryاستخدمه فيmeta_queryعند إجراء الاستعلامات، يجب التأكد من أن المفاتيح الرئيسية (meta keys) المستخدمة محدودة وواضحة، وتجنب استخدام علامات البحث العامة (wildcards).
الأمان وتنقية البيانات
لا تثق أبدًا بالبيانات الواردة من المستخدمين أو المسؤولين. قبل حفظ أي حقل مخصص، يجب تنقية البيانات وفقًا لنوعها. بالنسبة للنصوص، استخدم الطرق المناسبة لتنقية البيانات من أي محتوى غير مرغوب فيه أو ضار.sanitize_text_field()؛ بالنسبة لمحتوى HTML، استخدمwp_kses_post()بالنسبة للعناوين URL، استخدمesc_url_raw()عند العرض في الجزء الأمامي (الواجهة الأمامية للمستخدم)، يتم استخدام…esc_html()、esc_attr()أوwp_kses_post()يتم إجراء عملية التهريب (escaping) لمنع هجمات الكود الزائف بين المواقع (Cross-Site Scripting Attacks).
الملخصات
حقول ووكوميرس (WooCommerce) المخصصة تعتبر أداة قوية لتوسيع إمكانيات المتجر. يبدأ الأمر بفهم أنواع الحقول المتعلقة بالمنتجات والطلبات والمستخدمين وغيرها من الكيانات المختلفة، ثم يتبع ذلك استخدام خطافات الإجراءات (action hooks) والمربعات الوصفية (meta boxes) لإنشاء وحفظ الحقول بشكل آمن في واجهة الإدارة، ومن ثم استخدام المرشحات (filters) وخطافات الإجراءات لعرض البيانات بشكل أنيق في الواجهة الأمامية. تشكل هذه العملية الكاملة الأساس للتطوير المخصص. من خلال استخدام أدوات متقدمة مثل ACF Pro لإنشاء صفحات تصنيف مستقلة، وتحسين عمليات الاستعلام عن البيانات الوصفية، بالإضافة إلى تطبيق إجراءات صارمة لتنقية البيانات والتحقق من أمانها، يمكن للمطورين إنشاء حلول تجارة إلكترونية مخصصة قوية وفعالة وآمنة تلبي احتياجات الأعمال المحدد
الأسئلة الشائعة الأسئلة المتداولة
كيف يمكن تعديل الحقول المخصصة للمنتجات بشكل جماعي؟
لا يوفر واجهة إدارة ووكوميرس (WooCommerce) الخلفية بشكل أساسي واجهة لتعديل الحقول المخصصة بشكل جماعي. عادةً، يتطلب تنفيذ هذه الميزة استخدام إحدى الطرق التالية:
١. استخدم إضافات متخصصة، مثل النسخة المتقدمة من “Advanced Custom Fields” (ACF)، والتي يمكن أن تعمل بالتزامن مع إضافات أخرى مثل “ACF Extended” لتوفير إمكانية تعديل المحتويات بشكل جماعي في الواجهة الأمامية للموقع.
٢. باستخدام أداة “تصدير/استيراد” المتاحة في ووردبريس (WordPress): يمكنك أولاً استخدام خيار “تصدير جميع المحتويات” لتصدير المنتجات إلى ملفات بصيغة CSV أو XML. بعد ذلك، قم بالبحث عن الأعمدة المتعلقة بالحقول المخصصة (المعدلة يدويًا) داخل الملفات وقم بتعديلها بشكل جماعي، ثم أ
٣. قم بكتابة سكريبت PHP مخصص أو استخدم أوامر WP-CLI، ومن خلالها قم بتكرار عملية تصفح المنتجات واحدًا تلو الآخر واستدعاء الوظائف المطلوبة.update_post_meta()توجد دوال متاحة لتحديث البيانات بشكل جماعي. يتطلب هذا الأسلوب معرفة متقدمة في التطوير، ومن الضروري إجراء نسخ احتياطية لقاعدة البيانات قبل البدء بالعمليات.
هل يمكن أن تؤثر الحقول المخصصة (المعدلة يدويًا) على سرعة تحميل موقع ووكوميرس (WooCommerce)؟
إذا تم استخدامه بشكل غير صحيح، فقد يحدث ذلك. العائق الرئيسي في الأداء ينشأ عندما يقوم الجزء الأمامي (الفريمونت) أو الخلفي (الباكند) بالاستعلام عن عدد كبير من المنتجات، مما يؤدي إwp_postmetaالعمليات المعقدة أو غير المحسنة التي تتم على الجداولmeta_queryعلى سبيل المثال، في الصفحة الرئيسية للمتجر أو صفحات التصنيفات، قد يؤدي تنفيذ عمليات التصفية والترتيب بناءً على عدة حقول مخصصة غير مفهرسة في نفس الوقت إلى بطء سرعة عمليات الاستعلام.
تشمل أساليب التحسين تحويل الحقول المستخدمة في التصفية المتكررة إلى سمات المنتج؛ أو ضمان أن تكون المفاتيح الفرعية المستخدمة في الاستعلام محددة بشكل واضح؛ أو التفكير في إنشاء فهرس لبيانات الحقول المخصصة الرئيسية؛ أو تخزين الميتاداتا التي يتم الوصول إليها بشكل متكرر في الذاكرة المؤقتة (Transients) أو في ذاكرة الكائنات.
هل يمكن إضافة الحقول المخصصة إلى نطاق البحث عن المنتجات؟
ممكن، ولكن هذا يتطلب تعديل عملية البحث. بشكل افتراضي، لا تشمل عمليات البحث في ووردبريس (WordPress) وووكوميرس (WooCommerce) بيانات الوصف الخاصة بالمنتجات (الحقول المخصصة). ستحتاج إلى استخدام أدوات أو كود إضافي لتضمين هذposts_searchأوpre_get_postsانتظر خيارات تصفية إضافية (مثل خيوط الاستدعاء للفلاتر) لتوسيع نطاق البحث.WHEREجملة فرعية، بحيث تحتوي على…wp_postmetaالجدوليJOINالعمليات وتقييم الشروط.
من المهم ملاحظة أن هذه الطريقة قد تجعل عمليات البحث أكثر تعقيدًا، مما قد يؤثر سلبًا على أداء عمليات البحث في المواقع الإلكترونية الكبيرة. يُنصح باستخدامها فقط عند الضرورة، والتأكد من أن جداول ق
ما هي الطريقة الأفضل لإضافة حقول مخصصة باستخدام الكود أو باستخدام الإضافات (plugins)؟
يعتمد الأمر على احتياجاتك الخاصة، وقدراتك التقنية، وخطة الصيانة طويلة الأمد للمشروع. استخدام الكود لإضافة الميزات (كما هو موضح في هذا المقال) يعتبر طريقة أخف وزنًا وأكثر مرونة، ولا يعتمد على إضافات خارجية من طرف ثالث، وهو مناسب للمطورين أو للمشاريع التي تتطلب تخصيصًا عميقًا وأداءً عاليًا. جميع العمليات المنطقية موجودة داخل ملفات دوال الم
استخدام الإضافات (مثل ACF Pro أو Toolset) يجعل العملية أسرع وأكثر سهولة، وهو مناسب لغير المطورين أو للمشاريع التي تحتاج إلى الإطلاق السريع. توفر هذه الإضافات واجهات مستخدمية سهلة الاستخدام وأنواعًا متقدمة من الحقول، لكنها قد تزيد من حجم الكود وعدد عمليات الاستعلام على قاعدة البيانات، مما قد يؤدي إلى مشاكل في التوافق مع التصاميم الجديدة للموقع أو مع إضافات أخرى في المستقبل. في المشاريع الكبيرة طويلة الأمد، قد يكون من الضروري فهم الهياكل البيانية المخصصة التي تنتجها هذه الإضافات ب
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- دليل شامل لإنشاء موقع ووردكامرس: كيفية إنشاء متجر إلكتروني خاص بك من الصفر
- تحليل متعمق لـ WooCommerce: بناء موقع تجاري إلكتروني قوي على WordPress من الصفر
- كيفية إعداد تصنيفات وخصائص مخصصة للمنتجات في WooCommerce لتحسين كفاءة إدارة المتجر؟
- دليل شامل لتحسين أداء ووردبريس: من الجوهر إلى الواجهة الأمامية، لزيادة السرعة بشكل شامل
- دليل شامل لـ WooCommerce: 10 خطوط عملية وحلول تحسينية لزيادة معدلات التحويل في مواقع التجارة الإلكترونية