بالنسبة لمتاجر WooCommerce المتقدمة، غالبًا ما تكون الخصائص الافتراضية للمنتجات وأنظمة إدارة المخزون غير كافية لتلبية متطلبات العمليات المتقنة. قد تحتاج إلى تتبع المخزون بشكل منفصل لمنتجات متشابهة ذات مواصفات مختلفة (مثل مجموعات ألوان وأحجام التيشرتات)، أو إضافة خصائص مبيعات فريدة للمنتجات واستخدامها في عمليات الفرز. سيناقش هذا المقال بالتفصيل كيفية توسيع قدرات إدارة البيانات في WooCommerce من خلال استخدام الحقول المخصصة والمكونات الإضافية (الـ “hooks”)، لتحقيق إدارة بيانات متقدمة تتوافق تمامًا مع منطق عملك التجاري.
فهم الهياكل البيانية الأساسية لـ WooCommerce
لتحقيق تخصيصات فعالة، من الضروري أولاً فهم النموذج الأساسي الذي يستخدمه WooCommerce لمعالجة بيانات المنتجات. هذا سيساعدنا في تحديد المكان المناسب والطريقة المناسبة لإدخال الكود الخاص بالتخصيصات.
مبدأ عمل خصائص المنتجات ومتغيراتها
يتم استخدام WooCommerce في إدارة المتاجر الإلكترونية.product_attributesتُستخدم البيانات الوصفية (Metadata) لتخزين خصائص المنتجات العالمية والمحلية. تحدد هذه الخصائص مواصفات المنتجات، مثل “اللون” و“المقاس”. عندما تقوم بتفعيل هذه الميزة لمنتج ما…variable productعندما يتعلق الأمر بالسلع المتغيرة، يقوم النظام بإنشاء جميع الاحتمالات الممكنة لتركيبات هذه الخصائص.product_variation(متغيرات المنتج) مقال فرعي.
القراءة الموصى بها دليل شامل لتطوير وتحسين مواقع التجارة الإلكترونية على WooCommerce.。
كل متغير من متغيرات المنتج يمثل نوعًا مستقلًا من مقالات المنتجات، ولكل منها سعرها الخاص ومستوى المخزون الخاص بها._stock)、رقم المنتج (SKU)_skuتتضمن هذه الحقول معلومات مثل الحجم واللون وغيرها. تتم عمليات إدارة المخزون الرئيسية على مستوى النسخ المختلفة (المتغيرات) من المنتج. على سبيل المثال، إذا نفد مخزون النسخة ذات الحجم “L” واللون “الأزرق”, فلن يؤثر ذلك على
القيود المتعلقة بالحقول الوصفية المدمجة (Built-in Metadata Fields)
بشكل افتراضي، يوفر WooCommerce مجموعة من الحقول الوصفية (metadata fields) المحددة مسبقًا لكل منتج، سواء كان منتجًا بسيطًا أو منتجًا متغيرًا (variant product)._price, _regular_price, _sale_price, _stock, _stock_status, _manage_stockإلخ. ومع ذلك، إذا كنت بحاجة إلى تتبع معلومات مثل “مخزون القنوات المختلفة”، أو “أرقام الدفعات”, أو “المواد المخصصة للمنتجات”, فإن هذه الحقول لا تكفي على الإطلاق.
في هذا الوقت، نحتاج إلى استخدام واجهة برمجة التطبيقات (API) للبيانات الوصفية (Meta Data) في ووردبريس (WordPress) والخيوط المخصصة (Hooks) الخاصة بـ WooCommerce لإضافة واستخدام الحقول المخصصة، وذلك لدمج هذه البيانات الجديدة بشكل سلس في عمليات إضافة المنتجات، وحذفها، وتعديلها، واسترجاعها، بالإضافة إلى عرضها في واجهة المستخدم الأمامية.
إضافة حقول خصائص مخصصة للمنتجات
إن إنشاء خصائص جديدة للمنتجات، مثل “مكونات القماش” أو “مكان التصنيع”, يمكن أن يثري بشكل كبير وصف المنتج ويحسن من قدرات التصفية. سنقوم بتنفيذ ذلك من خلال جزأين: الإدارة في الخادم الخلفي (
قم بالتسجيل في الواجهة الخلفية للإدارة وعرض الحقول الجديدة.
لتسهيل على مديري المتاجر إدخال هذه الخصائص الجديدة، نحتاج إلى إضافة حقول مخصصة إلى صفحة تحرير المنتجات. عادةً ما يتم ذلك عن طريق…woocommerce_product_options_general_product_dataوwoocommerce_product_after_variable_attributesيتم إكمال هذه العمليات باستخدام خطافات الإجراءات (action hooks).
القراءة الموصى بها دليل تطوير إضافات ووردبريس: خطوة بخطوة لتعلم كيفية إنشاء إضافتك الخاصة من الصفر。
فيما يلي مثال على كيفية إضافة مربع نصوص لعرض “رقم دفعة الإنتاج” لجميع المنتجات. يجب إضافة هذا الكود إلى القالب (الثيمة) الخاصة بالموقع.functions.phpإما في الملف نفسه، أو داخل الإضافة المخصصة (البرنامج الإضافي).
add_action( 'woocommerce_product_options_inventory_product_data', 'add_custom_batch_field' );
function add_custom_batch_field() {
global $product_object;
woocommerce_wp_text_input( array(
'id' => '_custom_batch_number',
'label' => __( '生产批次号', 'your-textdomain' ),
'desc_tip' => true,
'description' => __( '用于追溯商品生产来源的唯一编号。', 'your-textdomain' ),
'value' => $product_object->get_meta( '_custom_batch_number', true ),
) );
} بالنسبة للمنتجات المتغيرة، إذا كنت ترغب في تعيين رقم دفعة مختلف لكل نسخة فردية، فسيتعين عليك إضافة هذا الحقل إلى لوحة إعدادات النسخة (Variant Settings Panel).
add_action( 'woocommerce_variation_options_inventory', 'add_custom_field_to_variation', 10, 3 );
function add_custom_field_to_variation( $loop, $variation_data, $variation ) {
woocommerce_wp_text_input( array(
'id' => "_custom_batch_number_{$loop}",
'name' => "_custom_batch_number[{$loop}]",
'label' => __( '变体批次号', 'your-textdomain' ),
'desc_tip' => true,
'description' => __( '该特定变体的生产批次。', 'your-textdomain' ),
'value' => get_post_meta( $variation->ID, '_custom_batch_number', true ),
'wrapper_class' => 'form-row form-row-full',
) );
} حفظ القيم الموجودة في الحقول المخصصة
مجرد عرض مربعات الإدخال ليس كافيًا؛ نحتاج أيضًا إلى تخزين القيم المدخلة في معلومات الوصف (الميتادات) الخاصة بالمنتجات عندما يقوم المستخدم بالنقر على “حفظ” أو “تحديث”. ولتحقيقwoocommerce_process_product_metaوwoocommerce_save_product_variationخطاف.
// 保存简单商品的批次号
add_action( 'woocommerce_process_product_meta', 'save_custom_batch_field' );
function save_custom_batch_field( $product_id ) {
$batch_number = isset( $_POST['_custom_batch_number'] ) ? sanitize_text_field( $_POST['_custom_batch_number'] ) : '';
update_post_meta( $product_id, '_custom_batch_number', $batch_number );
}
// 保存变体商品的批次号
add_action( 'woocommerce_save_product_variation', 'save_variation_custom_field', 10, 2 );
function save_variation_custom_field( $variation_id, $loop ) {
$batch_number = isset( $_POST['_custom_batch_number'][ $loop ] ) ? sanitize_text_field( $_POST['_custom_batch_number'][ $loop ] ) : '';
update_post_meta( $variation_id, '_custom_batch_number', $batch_number );
} توسيع منطق إدارة المخزون
القيمة الأساسية لحقول المخزون المخصصة تكمن في قدرتها على التفاعل مع نظام إدارة المخزون الأساسي في WooCommerce، مما يسمح بإجراء حسابات وتحققات المخزون بناءً على قواعد معقدة.
إنشاء حقول لتتبع مخزون المستودعات المتعددة
لنفترض أنك بحاجة إلى إدارة المخزون القادم من مستودعين: “المستودع الرئيسي” و“المستودع الفرعي”. يمكننا إضافة حقلين مخزون منفصلين لكل نسخة من المنتج، ومن ثم استخدام هذه البيانات في واجهة المستخدم لتحديد الكمية ال
أولاً، قم بإضافة حقل مخزون مخصص للمتغيرات (يظهر تحت علامة تبويب “المخزون”).
القراءة الموصى بها تحليل متعمق لحقول الدفع المخصصة في WooCommerce: ممارسة كاملة من الإنشاء إلى معالجة البيانات.。
add_action( 'woocommerce_variation_options_inventory', 'add_multi_warehouse_stock_fields', 10, 3 );
function add_multi_warehouse_stock_fields( $loop, $variation_data, $variation ) {
echo '<div class="multi-warehouse-fields">';
woocommerce_wp_text_input( array(
'id' => "_warehouse_main_stock_{$loop}",
'name' => "_warehouse_main_stock[{$loop}]",
'label' => __( '总仓库存', 'your-textdomain' ),
'type' => 'number',
'value' => get_post_meta( $variation->ID, '_warehouse_main_stock', true ),
) );
woocommerce_wp_text_input( array(
'id' => "_warehouse_branch_stock_{$loop}",
'name' => "_warehouse_branch_stock[{$loop}]",
'label' => __( '分仓库存', 'your-textdomain' ),
'type' => 'number',
'value' => get_post_meta( $variation->ID, '_warehouse_branch_stock', true ),
) );
echo '</div>';
} قم بحساب المخزون الإجمالي واستبدل منطق إدارة المخزون بالمنطق الجديد.
في الخطوة التالية، نحتاج إلى حساب المخزون الإجمالي (المخزون الرئيسي + المخازن الفرعية)، وجعل منصة WooCommerce تستخدم هذه القيمة المحسوبة كـ “المخزون الإجمالي” لهذا المنتج. ولتحقيق ذلك، سنحتاج إلى استwoocommerce_product_get_stock_quantityمرشحات.
add_filter( 'woocommerce_product_get_stock_quantity', 'calculate_total_stock_from_warehouses', 10, 2 );
function calculate_total_stock_from_warehouses( $stock_quantity, $product ) {
// 确保只对变体商品进行操作
if ( $product->is_type( 'variation' ) ) {
$main_stock = (int) $product->get_meta( '_warehouse_main_stock', true );
$branch_stock = (int) $product->get_meta( '_warehouse_branch_stock', true );
$calculated_total = $main_stock + $branch_stock;
// 如果计算总值与默认_stock值不同,则更新默认_stock字段(可选,用于保持数据一致性)
// update_post_meta( $product->get_id(), ‘_stock', $calculated_total );
return $calculated_total;
}
return $stock_quantity;
} في الوقت نفسه، يجب علينا أيضًا التأكد من أنه عند إجراء الطلب، يتم خصم المخزون المتوفر في المستودع المناسب وفقًا لقواعد العمل (مثل الأولوية في الشحن من المستودعات الفرعية). ويمكن تحقيق ذلك عنwoocommerce_reduce_order_stockأوwoocommerce_payment_complete_reduce_order_stockتم تنفيذ الخاصية المطلوبة عن طريق استخدام “الخطاف” (hook)، وتم خصم القيمة الافتراضية بشكل صحيح._stockفي الوقت نفسه، يتم أيضًا خصم قيم الحقول الموجودة في مستودعنا المخصص.
عرض البيانات المخصصة واستخدامها في واجهة المستخدم
البيانات المضافة في الحقول ستُستخدم في النهاية لخدمة العملاء على الجانب الأمامي (الواجهة الخاصة بالمستخدم)، سواء كان ذلك للعرض، أو للتصفية، أو كأساس لاتخاذ قرارات الشراء.
عرض المعلومات المخصصة على صفحة تفاصيل المنتج
الاستفادة منwoocommerce_product_meta_startأوwoocommerce_after_variations_tableيمكن لهذا الخطاف (hook) أن يقوم بإخراج معلومات مثل رقم الدفعة (batch number) إلى صفحة المنتج الفردية.
add_action( 'woocommerce_after_variations_table', 'display_batch_number_on_frontend' );
function display_batch_number_on_frontend() {
global $product;
if ( $product->is_type( 'variable' ) ) {
// 对于可变商品,可能需要通过JS动态显示当前选中变体的批次号
echo '<div class="batch-info" style="margin-top: 15px;"><strong>معلومات الدفعة:</strong><span id="dynamic-batch-number">يرجى اختيار مواصفات المنتج المطلوب.</span></div>';
wc_enqueue_js( "
$( ‘input.variation_id’ ).change( function() {
if ( ‘‘ != $( this ).val() ) {
var variation_id = $( this ).val();
// 发起AJAX请求获取该变体的批次号
$.ajax({
url: wc_add_to_cart_params.ajax_url,
type: 'POST',
data: {
action: ‘get_variation_batch_number’,
variation_id: variation_id,
},
success: function( response ) {
$( ‘#dynamic-batch-number’ ).text( response.data );
}
});
} else {
$( ‘#dynamic-batch-number’ ).text( ‘请选择商品规格’ );
}
});
" );
} else {
// 对于简单商品,直接显示
$batch = $product->get_meta( ‘_custom_batch_number’, true );
if ( $batch ) {
echo ‘<p><strong>رقم دفعة الإنتاج:</strong>‘. esc_html($batch).’</p>’;
}
}
}
// 处理上述的AJAX请求
add_action( ‘wp_ajax_get_variation_batch_number’, ‘get_variation_batch_number_callback’ );
add_action( ‘wp_ajax_nopriv_get_variation_batch_number’, ‘get_variation_batch_number_callback’ );
function get_variation_batch_number_callback() {
$variation_id = intval( $_POST[‘variation_id’] );
$batch = get_post_meta( $variation_id, ‘_custom_batch_number’, true );
wp_send_json_success( $batch );
} تصفية المنتجات بناءً على الخصائص المخصصة
إذا كانت الحقول التي أضفتها خصائص قابلة للتصفية (مثل “مكان الإنتاج”)، فيمكنك تسجيلها كخصائص منتج قابلة للتصفية، واستخدام ميزات WooCommerce لذلك.[products]يمكن استخدام الاختصارات أو الأدوات الصغيرة لعمليات الفرز. والطريقة الأكثر تقدمًا هي…woocommerce_product_queryيمكن تعديل الاستعلام الرئيسي مباشرة على صفحة أرشيف المنتجات (مثل صفحة المتجر)، وذلك لتصفية المنتجات بناءً على قيم الميتادات المخصصة.
add_action( 'woocommerce_product_query', 'filter_products_by_custom_meta' );
function filter_products_by_custom_meta( $q ) {
if ( isset( $_GET[‘special_batch’] ) && ! empty( $_GET[‘special_batch’] ) ) {
$meta_query = $q->get( 'meta_query' );
$meta_query[] = array(
'key‘ => ’_custom_batch_number‘,
’value‘ => sanitize_text_field( $_GET[‘special_batch’] ),
’compare‘ => ’LIKE‘,
);
$q->set( ’meta_query‘, $meta_query );
}
} الملخصات
من خلال الاستفادة الفعالة من ميزات البيانات الوصفية (Metadata) في ووردبريس (WordPress) والعديد من الأدوات المتاحة في منصة WooCommerce، يمكننا تجاوز القيود المفروضة على نموذج البيانات الافتراضي لهذه المنصات بشكل كبير. بدءًا من إضافة حقول نصية بسيطة وصولاً إلى تنفيذ أنظمة معقدة لإدارة المخزون المشترك بين المستودعات المختلفة، فإن الحقول المخصصة تمنح مشغلي المتاجر قدرات قوية لإدارة البيانات بشكل فعال
المفتاح يكمن في فهم مكان تخزين البيانات (جداول بيانات المقالات)، وإتقان طرق عرض الحقول في واجهة الإدارة الخلفية (دوال تغليف منظومة WooCommerce)، بالإضافة إلى الاستخدام الاحترافي لأدوات التصفية (Filters) ومخالب الإجراءات (Action Hooks) للتدخل في العمليات الأساسية مثل حساب المخزون وتصفية الاستعلامات. يجب دائمًا وضع تجربة المستخدم في المقام الأول، لضمان أن البيانات المخصصة يمكن للمسؤولين إدارتها بسهولة، وفي الوقت نفسه يتم عرضها بطريقة واضحة وسهلة الاستخدام للعملاء النهائيين، مما يساعد على تعزيز مستوى الاحترافية وكفاءة تشغيل المتجر.
الأسئلة الشائعة الأسئلة المتداولة
كيف يمكن ضمان أمان بيانات الحقول المخصصة؟
من المهم للغاية التأكد من إجراء عمليات تنظيف وتحقق دقيقة عند حفظ بيانات الحقول المخصصة. يجب استخدام أدوات أو طرق موثوقة لضمان جودة البيانات المخزنة.sanitize_text_field()、absint()هذه الدالة لتنظيف بيانات ووردبريس تُستخدم لمعالجة جميع المدخلات من المستخدمين. بالنسبة لحقول المخزون من نوع الأرقام، يجب تحويلها إلى نوع الأعداد الصحيحة بشكل إلزامي. وعلاوة على ذلك، عند عرض البيانات على الصفحةesc_html()أوwc_clean()يتم إجراء عملية التهريب (escaping) لمنع هجمات السكريبتات عبر المواقع (XSS – Cross-Site Scripting).
هل يمكن أن تتوافق هذه الحقول المخصصة مع الإضافات (البرامج الإضافية) من الجهات الخارجية؟
تعتمد قابلية التوافق على طريقة عمل الإضافات الخارجية (الثالثة). معظم الإضافات المصممة بشكل جيد (مثل إضافات تحسين محركات البحث SEO، وأدوات بناء الصفحات) تقرأ معلومات المنتجات عبر الوصلات القياسية (الhooks) الخاصة بـ WooCommerce، ولذلك عادةً ما لا تتأثر. ومع ذلك، إذا قامت الإضافة بالاستعلام المباشر عن البيانات من قاعدة البيانات أو تعديل الكود الأساسي لـ WooCommerce، فقد تتجاهل الحقول المخصصة التي قمت بإضافتها. من المهم جدًا إجراء اختبارات شاملة للتوافق في بيئة تجريبية قبل إطلاق أي ميزة أساسية للعمل.
هل سيؤثر وجود عدد كبير من الحقول المخصصة سلبًا على أداء الموقع الإلكتروني؟
قد يؤثر التنفيذ غير السليم بالفعل على الأداء. كل بند من هذه البنود يشير إلى جانب محتمل يمكن أن يؤثر سلبًا على أداء النظام أو التطبيق.get_post_meta()كل استدعاء سيؤدي إلى إجراء عملية استعلام على قاعدة البيانات. أفضل ممارسة هي: داخل دالة واحدة أو حلقة (hook)، إجراء عملية الاستعلام مرة واحدة فقط.get_post_meta($id)يمكن الحصول على جميع البيانات الوصفية (metadata) دون تحديد أسماء المفاتيح (key names) عن طريق إرجاع مصفوفة، ثم قراءة القيم المطلوبة من هذه المصفوفة؛ أو يمكن أيضًا استخدام طريقة أخرى…WC_Productالكائنget_meta()بالإضافة إلى ذلك، يمكن النظر في تخزين البيانات المخصصة التي يتم الوصول إليها بشكل متكرر ولا تتغير كثيرًا باستخدام آلية التخزين المؤقت للكائنات (object caching).
هل ستفقد بيانات الحقول المخصصة عند الانتقال إلى مكان جديد أو عند إجراء عملية نسخ احتياطية؟
طالما أنك تستخدم واجهة برمجة التطبيقات (API) القياسية لبيانات ووردبريس (WordPress) أو ووكوميرس (WooCommerce)، مثل…update_post_metaيتم استخدام هذه الطريقة لحفظ البيانات، والتي ستُخزن بعد ذلك في قاعدة بيانات ووردبريس.wp_postmetaفي الجدول… سواء استخدمت أي أداة قياسية لنسخ احتياطي قواعد بيانات ووردبريس أو أداة لنقل البيانات (مثل All-in-One WP Migration أو Duplicator)، فإن هذه الجداول ستتم إعادة إنشاؤها تلقائيًا، وبالتالي لن يتم فقدان أي بيانات. يرجى التأكد من إجراء اختبارات للتحقق من صحة البيانات بعد عملية النقل.
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- تطبيقات التجارة الإلكترونية مثل WooCommerce: 10 نقاط أساسية في التقنية لبناء مواقع تجارة إلكترونية ذات معدل تحويل عالي
- دليل تطوير WooCommerce: بناء موقع تجارة إلكترونية محترف من الصفر.
- دليل شامل لإدارة المنتجات في WooCommerce: من النشر إلى المهارات المتقدمة المتعلقة بالمخزون
- كيفية استخدام WooCommerce Hook لتنفيذ وظائف عربة التسوق المخصصة وإدارة الطلبات المتقدمة.
- من الصفر إلى الواحد: دليل تقني شامل لبناء موقع تجاري إلكتروني عالي الأداء باستخدام منصة WooCommerce