Почему исчезла цена на вариативные товары? Какие могут быть причины этого?

Здравствуйте. <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-&gt;get_variation_price( 'min', true ), $product-&gt;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-&gt;get_variation_regular_price( 'min', true ), $product-&gt;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 = '&lt;del&gt;' . $saleprice . '&lt;/del&gt; &lt;ins&gt;' . $price . '&lt;/ins&gt;';
}
return $price;
}</code></pre> <br/> В результате на странице товара отображается цена только конкретной вариации. Это весь код, который может затрагивать цены товара или вариации. <br/> <br/> Однако, когда я перехожу в карточку товара, то наблюдаю, что
  • 13 апреля 2025 г. 9:45
Ответы на вопрос 2
Исчезновение цен на вариативные товары в 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;
}
Похожие вопросы