Как исправить ошибку Function sku was called incorrectly?

Ссылка скопирована
1 ответ

Добрый день. В журнале отладки постоянно выводит одну и ту же ошибку.

Вот код ошибки:

PHP Notice: Function sku was called incorrectly. Свойства товара недоступны напрямую. Backtrace: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/plugins/woocommerce/templates/taxonomy-product-cat.php'), wc_get_template, include('/plugins/woocommerce/templates/archive-product.php'), wc_get_template_part, load_template, require('/plugins/woocommerce/templates/content-product.php'), do_action('woocommerce_before_shop_loop_item'), WP_Hook->do_action, WP_Hook->apply_filters, {closure}, do_action('blocksy:woocommerce:product-card:title:after'), WP_Hook->do_action, WP_Hook->apply_filters, shop_sku, WC_Abstract_Legacy_Product->__get, wc_doing_it_wrong Пожалуйста, посмотрите Устранение ошибок в WordPress для более подробной информации. (Это сообщение добавлено в вер in /home2/kruzhev1/public_html/wp-includes/functions.php on line 5865

Строка 5865

Как исправить ошибку Function sku was called incorrectly?

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Юрий Linux Ответ

Ошибка Function sku was called incorrectly. Свойства товара недоступны напрямую означает, что где-то в теме или сниппете обращаются к свойству товара напрямую: $product->sku. В новых версиях WooCommerce так нельзя, нужно использовать getter $product->get_sku().

В backtrace видно имя вашей функции: shop_sku, она вызывается на хуке blocksy:woocommerce:product-card:title:after. Ищите в functions.php дочерней темы, Code Snippets или кастомном плагине что-то похожее:

echo $product->sku;

echo $product->sku;

Замените на безопасный вариант:

function shop_sku() {
    global $product;
 
    if (! $product instanceof WC_Product) {
        return;
    }
 
    $sku = $product->get_sku();
 
    if (! $sku) {
        return;
    }
 
    echo '<span class="product-sku">Артикул: ' . esc_html($sku) . '</span>';
}

function shop_sku() { global $product; if (! $product instanceof WC_Product) { return; } $sku = $product->get_sku(); if (! $sku) { return; } echo '<span class="product-sku">Артикул: ' . esc_html($sku) . '</span>'; }

Если в коде используется ID товара, можно получить объект явно:

$product = wc_get_product(get_the_ID());
 
if ($product) {
    $sku = $product->get_sku();
}

$product = wc_get_product(get_the_ID()); if ($product) { $sku = $product->get_sku(); }

Плагин WooCommerce править не нужно. Исправляется именно пользовательский код темы/сниппета, который выводит SKU в карточке товара. После правки очистите кеш и проверьте debug.log, чтобы notice больше не появлялся.

Перед внедрением на рабочем сайте проверьте решение на копии или хотя бы сделайте резервную копию изменяемого файла. После правки включите отображение ошибок, откройте проблемную страницу в обычном и приватном окне, проверьте консоль браузера и логи PHP. Если задача связана с WordPress, WooCommerce или ACF, дополнительно проверьте поведение после очистки кэша и после выхода из админки: часть ошибок видна только для незалогиненного пользователя.

Если код работает только в одном шаблоне, лучше не оставлять его разрозненно в нескольких файлах. Вынесите повторяемую логику в функцию, небольшой плагин или template part, а в шаблоне оставьте только вызов. Так проще поддерживать решение после обновления темы, плагинов и PHP.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно