Здравствуйте. <br/> После недавнего обновления WooCommerce у всех вариативных товаров исчезла цена. <br/> Тема также была обновлена одновременно с WooCommerce, как и несколько установленных плагинов. <br/> <br/> Вопрос: я создаю вариативный товар с двумя атрибутами: размер и цвет, и присваиваю каждому атрибуту по два значения, в результате чего получается четыре вариации. Я назначаю им цены. <br/> Через <code>functions.php</code> я скрываю диапазон цен следующими строками: <br/> <pre><code class="php">/* Disable Variable Product Price Range: */ add_filter( 'woocommerce_variable_sale_price_html', 'my_variation_price_format', 10, 2 ); add_filter( 'woocommerce_variable_price_html', 'my_variation_price_format', 10, 2 ); function my_variation_price_format( $price, $product ) { // Main Price $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) ); $price = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] ); // Sale Price $prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) ); sort( $prices ); $saleprice = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] ); if ( $price !== $saleprice ) { $price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>'; } return $price; }</code></pre> <br/> В результате на странице товара отображается цена только конкретной вариации. Это весь код, который может затрагивать цены товара или вариации. <br/> <br/> Однако, когда я перехожу в карточку товара, то наблюдаю, что
Исчезновение цен на вариативные товары в WooCommerce может быть связано с несколькими факторами. Давайте рассмотрим возможные причины и пути их устранения: 1. **Обновления**: Если вы обновили как WooCommerce, так и темы/плагины, возможно, некоторые изменения в коде или структуре данных привели к конфликту. Проверьте, не появились ли обновления для темы или плагинов, и убедитесь, что версия WooCommerce совместима с вами используемой темой. 2. **Кэширование**: Иногда кэшированная версия страницы может отображаться неправильно после обновлений. Очистите кэш вашего сайта, если у вас установлен плагин кэширования (например, WP Super Cache или W3 Total Cache), а также проверьте, есть ли кэш на стороне сервера. 3. **Конфликт плагинов**: Если вы используете другие плагины, возможно, один из них вызывает конфликт, который мешает корректному отображению цен. Отключите все плагины, кроме WooCommerce, и проверьте, появилась ли цена. Если да, включайте плагины по одному, чтобы выявить проблемный. 4. **Ошибки в коде**: Проверьте, правильно ли вы внедрили свой код в `functions.php`. Убедитесь, что вы используете правильные хуки и фильтры. Возможно, вы пропустили важные моменты или есть ошибки (например, синтаксические ошибки или неправильное использование методов класса). 5. **Проблемы с вариациями**: Убедитесь, что все вариации ваших продуктов правильно настроены (цены установлены, и сами вариации активированы). Также проверьте, что у вас нет конфликтующих атрибутов или настроек. 6. **Настройки WooCommerce**: Проверьте настройки WooCommerce в разделе «Товары» и убедитесь, что ничего не было изменено, что могло повлиять на отображение цен. 7. **Ошибки в консоли**: Откройте инструменты разработчика вашего браузера и посмотрите на вкладке «Консоль» (Console), нет ли каких-либо ошибок JavaScript, которые могут мешать корректному отображению информации на странице. 8. **Настройка темы**: Если ваша тема кастомизирована, возможно, что код темы не учитывает изменения в обновленной версии WooCommerce. Проверьте документацию к теме или их поддержку по этому вопросу. Если после всех этих проверок проблема не разрешается, возможно, стоит обратиться в поддержку WooCommerce или к разработчику вашей темы для дальнейшей диагностики.
В новых версиях WooCommerce изменили логику работы вариаций и цен.
Попробуйте так
/** * Formats variable product price to show minimum price only. * * Replaces the default price range (e.g., "$10.00 - $20.00") with the minimum price only. * If there is a sale price, it shows the original price (strikethrough) and the discounted price. * * @author WP Panda * @since 1.0.0 * @hook woocommerce_get_price_html * * @param string $price Original price HTML * @param WC_Product $product Product object * @return string Modified price HTML */ add_filter( 'woocommerce_get_price_html', 'wpp_variation_price_format', 10, 2 ); function wpp_variation_price_format( $price, $product ) { if ( $product->is_type( 'variable' ) ) { $prices = $product->get_variation_prices( true ); if ( empty( $prices['price'] ) ) { return ''; } $min_price = current( $prices['price'] ); $max_price = end( $prices['price'] ); $min_regular = current( $prices['regular_price'] ); if ( $min_price === $max_price ) { $price = wc_price( $min_price ); } else { $price = wc_price( $min_price ); if ( $min_price != $min_regular ) { $price = '<del>' . wc_price( $min_regular ) . '</del> <ins>' . $price . '</ins>'; } } } return $price; }