Бъг в плъгина WooCommerce предизвиква фатална грешка, която води до срив в онлайн магазините използващи WordPress. Проблемът се дължи на един-единствен ред код. Намерено е временно решение за заобикаляне на проблема. Екипът на WooCommerce е запознат със случая и работи по издаването на поправка под формата на пач.
Срив на WordPress сайтовете използващи WooCommerce
Някой публикува информация за грешката във форумите за поддръжка на WordPress.org и други потребители отговориха, че имат същия проблем. Повечето от отговорилите съобщават, че наскоро не са правили нищо по сайтовете си и че те са се сринали изведнъж. Човекът, който първоначално е съобщил за грешката, е предложил временно решение на проблема, което ще възстанови работата на WordPress сайтовете – редактиране на един ред код във файла BlockPatterns.php, който е част от WooCommerce.
Файлът се намира тук:
wp-content/plugins/woocommerce/src/Blocks/BlockPatterns.php
Други потребители съобщават, че са получили същото съобщение за фатална грешка:
“Uncaught Error: strpos(): Argument #1 ($haystack) must be of type string, null given in /var/www/site/data/www/site.com.br/wp-content/plugins/woocommerce/src/Blocks/BlockPatterns.php on line 251”
Един от потребителите в дискусията написа:
Имам Същият проблем.
Появи се във версия 9.8.2, а обновяването до 9.8.3 не го разреши. Намаляването на версията до 9.7.1 също не помогна.
Проблемът се появи без никакво взаимодействие с плъгини или скорошни актуализации. Замяната на кода на ред 251 действа като временно решение на проблема.
Ще трябва да намерим по-стабилно решение, докато екипът на WooCommerce пусне официална кръпка.
Други съобщават, че са получили грешката след актуализиране на плъгините си, но връщането на актуализацията не е решило проблема, а трети казват, че не са направили нищо преди срива. От отдела за поддръжка на WooCommerce отговориха, че екипът на WooCommerce знае за проблема и работи по отстраняването му:
Благодаря ви, че съобщихте за това. Това е известен проблем и тук е споделено временно решение: https://github.com/woocommerce/woocommerce/issues/57760#issuecomment-2854510504
Можете да следите напредъка и актуализациите в темата в GitHub: https://github.com/woocommerce/woocommerce/issues/57760, тъй като екипът е наясно и активно се занимава с него.
Бърза поправка, публикувана в дискусията в GitHub
Някой е публикувал бърза поправка в официалното хранилище на GitHub, която засега решава проблема:
Ако сайтовете Ви в момента не работят – това е бързата корекция, която можете да приложете веднага.
Необходимо е да добавите ?? “ в ред 251:
if ( strpos( $category['title'] ?? '', $prefix ) !== false ) {Не забравяйте да изчистите кеша на WordPress след като приложите тази промяна.
Може да е от полза за тези, чийто сайтове са се сринали и имат нужда да оправят проблема възможно най-скоро. Това решение ще даде време на екипа на WooCommerce да оправи проблема.
В същото хранилище на WooCommerce в GitHub има и следната бележка:
При някои сайтове може да се появи фатална грешка около класа BlockPatterns.php, като сайтът не се зарежда. Това се дължи на лош отговор от хранилището за шаблони Woo. В хранилището беше внедрена поправка, но някои сайтове все още може да имат лоша стойност на кеша.
Те също така и това:
Проблемът е отстранен от страна на източника на кеша, но някои сайтове са останали с лоша стойност на кеша – ще пуснем актуализации на пачове, за да поправим това.
Допълнителен проблем на WPEngine
Потребител написа, че е продължил да се бори с проблема при техния сайт, който се хоства в WP Engine, дори след прилагането на поправката:
Трудно ми е да приложа поправката в WP Engine. Предполагам, че е проблем с кеша, но качването на поправката и изчистването на всички кешове не дава резултат. Има ли допълнителна стъпка, която пропускам? Досега само възстановяването на резервно копие го оправи.
Отговорът беше, че WP Engine има няколко кеша, които трябва да бъдат актуализирани:
Това се дължи на факта, че WPEngine е платформа, а не обикновен уеб сървър – има много слоеве кеш, които може да се наложи да изчистите, включително кешовете Page Cache и Varnish.