خطأ في ووكومرس يتسبب في تعطل مواقع ووردبريس

واجه عدد من مستخدمي إضافة ووكومرس على ووردبريس مشكلة خطيرة خلال الأيام الماضية، حيث تعرضت متاجرهم الإلكترونية لخطأ قاتل تسبب في توقف الموقع بالكامل، وظهور رسالة الخطأ التالية:

Uncaught Error: strpos(): Argument #1 ($haystack) must be of type string, null given

بعض المستخدمين أبلغوا عن ظهور هذا الخطأ بعد تحديث إضافاتهم، بينما أشار آخرون إلى أن مواقعهم تعطلت فجأة دون القيام بأي تغييرات أو تحديثات مسبقة، رغم أنهم جربوا الرجوع إلى إصدار أقدم من ووكومرس لكن لم تُحل المشكلة.

وحصل هذا الخطأ بسبب مشكلة في ملف BlockPatterns.php الواقع ضمن المسار:

wp-content/plugins/woocommerce/src/Blocks/BlockPatterns.php

ما الذي يجب أن تفعله إذا واجهتك هذه المشكلة؟

أصدرت ووكومرس التحديث 9.8.4 بتاريخ 6 مايو 2025، والذي يحتوي على حل مباشر لهذا الخطأ، لكن قد لا يصل التحديث فورًا إلى جميع المواقع المتأثرة، لذلك ولحين وصول هذا التحديث، توصي ووكومرس بعدة حلول يمكنك اتباعها يدويًا:

الحل الأول: حذف الكاش من خلال واجهة سطر الأوامر لووردبريس WP CLI

wp transient delete ptk_patterns --skip-themes --skip-plugins

الحل الثاني: حذف البيانات المؤقتة يدويًا من قاعدة البيانات

إذا لم تكن قادرًا على استخدام واجهة سطر الأوامر لووردبريس (WP-CLI)، يمكنك تطبيق هذا الحل يدويًا عبر أداة phpMyAdmin أو أي أداة إدارة قاعدة بيانات تتيح تنفيذ استعلامات SQL.

  1. سجّل الدخول إلى لوحة التحكم الخاصة باستضافتك
  2. انتقل إلى قسم phpMyAdmin.
  3. اختر قاعدة البيانات المرتبطة بموقع ووردبريس المتأثر.
  4. انقر على تبويب SQL في الأعلى.
  5. الصق الاستعلام التالي:
DELETE FROM wp_options WHERE option_name = '_transient_ptk_patterns';
  1. لكن انتبـــه إذا كان تستخدم بادئة مختلفة لجداول قاعدة البيانات في موقعك (وليست wp_)، يجب تعديل البادئة في الاستعلام.
    مثال: إذا كانت البادئة wp123_، يصبح الاستعلام:
DELETE FROM wp123_options WHERE option_name = '_transient_ptk_patterns';
  1. اضغط على تنفيذ (Go) لإتمام العملية.

الحل الثالث: تعديل الملف البرمجي يدويًا

عدل الملف الموجود في المسار plugins/woocommerce/src/Blocks/BlockPatterns.php وأضف الكود التالي داخل دالة parse_categories()

	/**
	 * Parse prefixed categories from the PTK patterns into the actual WooCommerce categories.
	 *
	 * @param array $patterns The patterns to parse.
	 * @return array The parsed patterns.
	 */
	private function parse_categories( array $patterns ) {
		if ( ! isset( $patterns['categories'] ) || ! is_array( $patterns['categories'] ) ) {
			return array();
		}

إذا كنت تدير متجر ووكومرس وظهر لك هذا الخطأ، فابدأ فورًا بتطبيق أحد الحلول المؤقتة المذكورة أعلاه، ثم تأكد من تثبيت التحديث 9.8.4 فور ظهوره في لوحة التحكم، وتذكر دائما بأن تأخذ نسخة احتياطية من موقعك، فدرهم وقاية خير من قنطار علاج.

مصمم ويب شامل، مدرب