Добавьте несколько суффиксов к отображаемым ценам продуктов WooCommerce

Я пытался найти способ добавить разные суффиксы как к розничным ценам, так и к ценам продажи. Я собираюсь продавать камень и хочу, чтобы на моей странице продукта отображалось следующее.....

12,99 долл. США за квадратный фут

9,99 долл. США за квадратный фут при минимальной покупке 315 кв. футов (поддона)

Когда я добавляю код PHP в файл function.php, он отображает

0,00 долл. США за квадратный фут

0,00 долл. США за квадратный фут при минимальной покупке 315 кв. футов (поддона)

Я перепробовал множество разных плагинов, но не нашел ни одного, который позволил бы мне отображать это так, как я хочу. PHP-код, который я пытался добавить на свою страницу function.php, выглядит следующим образом....

add_filter( 'woocommerce_get_price_html', 'custom_price_suffixes', 100, 2 );
function custom_price_suffixes( $price, $product ) {
    if ( $product->is_on_sale() ) {
        $sale_price = wc_price( $product->get_sale_price() ) . ' /SQFT with 315 sqft (pallet) minimum purchase';
        $regular_price = wc_price( $product->get_regular_price() ) . ' /SQFT';
        $price = '<del>' . $regular_price . '</del> <ins>' . $sale_price . '</ins>';
    } else {
        $price = wc_price( $product->get_price() ) . ' /sqft';
    }
    return $price;
}

В результате получается 0,00 доллара. В ходе тестирования я обнаружил, что при вызове get_sale_price и get_regular_price они отображают 0,00 доллара США. Я попробовал только хук get_price, и он извлекает цену. По какой-то причине это не тянет мою цену. У моих продуктов есть варианты. Не знаете, в этом ли проблема? Я думаю, что есть способ добавить разные суффиксы к каждой цене.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

// Add a filter to modify the price HTML in WooCommerce
add_filter( 'woocommerce_get_price_html', 'custom_price_suffixes', 100, 2 );

/**
 * Custom function to add suffixes to prices in WooCommerce
 *
 * @param string $price The original price HTML
 * @param object $product The product object
 * @return string The modified price HTML with suffixes
 */
function custom_price_suffixes( $price, $product ) {
    // Define the suffix to add to prices (e.g. "/SQFT")
    $suffix = 'SQFT';
    
    // Define the minimum purchase suffix to add to sale prices (e.g. " with 315 sqft (pallet) minimum purchase")
    $min_purchase_suffix = 'ith 315 sqft (pallet) minimum purchase';
    
    // Check if the product is on sale
    if ( $product->is_on_sale() ) {
        // Format the regular price with the suffix
        $regular_price = wc_price( $product->get_regular_price() ). $suffix;
        
        // Format the sale price with the suffix and minimum purchase suffix
        $sale_price = wc_price( $product->get_sale_price() ). $suffix. $min_purchase_suffix;
        
        // Wrap the prices in HTML del and ins tags to indicate the sale
        $price = '<del>'. $regular_price. '</del> <ins>'. $sale_price. '</ins>';
    } else {
        // If not on sale, simply add the suffix to the price
        $price = wc_price( $product->get_price() ). strtolower($suffix);
    }
    
    // Return the modified price HTML
    return $price;
}

Я внес в код несколько незначительных исправлений, в том числе добавил пробелы вокруг операторов конкатенации (.) для лучшей читаемости.

Ответ принят как подходящий

В вашем коде есть некоторые ошибки и пропущенные случаи. Следующее будет обрабатывать ваши пользовательские суффиксы цен для всех типов продуктов и случаев:

// Handle variable product formatted price range 
add_filter( 'woocommerce_format_price_range', 'custom_format_price_range_suffixes', 20, 3 );
function custom_format_price_range_suffixes( $price, $from, $to ) {
    $suffix  = ' ' . esc_html__('/SQFT');
    $suffix2 = $suffix . ' ' . esc_html__('with 315 sqft (pallet) minimum purchase');
    $from    = ( is_numeric( $from ) ? wc_price( $from ) : $from ) . $suffix;
    $to      = ( is_numeric( $to ) ? wc_price( $to ) : $to ) . $suffix2;
    
    return sprintf( _x( '%1$s &ndash; %2$s', 'Price range: from-to', 'woocommerce' ), $from, $to );
}

// Handle products with a sale price 
add_filter( 'woocommerce_format_sale_price', 'custom_format_sale_price_suffixes', 20, 3 );
function custom_format_sale_price_suffixes( $price, $regular_price, $sale_price ) {
    $formatted_regular_price = is_numeric( $regular_price ) ? wc_price( $regular_price ) : $regular_price;
    $formatted_sale_price    = is_numeric( $sale_price ) ? wc_price( $sale_price ) : $sale_price;
    $suffix  = ' ' . esc_html__('/SQFT');
    $suffix2 = $suffix . ' ' . esc_html__('with 315 sqft (pallet) minimum purchase');

    // Strikethrough pricing.
    $price = '<del aria-hidden = "true">' . $formatted_regular_price . $suffix . '</del> ';

    // For accessibility (a11y) we'll also display that information to screen readers.
    $price .= '<span class = "screen-reader-text">';
    // translators: %s is a product's regular price.
    $price .= esc_html( sprintf( __( 'Original price was: %s.', 'woocommerce' ), wp_strip_all_tags( $formatted_regular_price ) ) );
    $price .= $suffix . '</span>';

    // Add the sale price.
    $price .= '<ins aria-hidden = "true">' . $formatted_sale_price . $suffix2 . '</ins>';

    // For accessibility (a11y) we'll also display that information to screen readers.
    $price .= '<span class = "screen-reader-text">';
    // translators: %s is a product's current (sale) price.
    $price .= esc_html( sprintf( __( 'Current price is: %s.', 'woocommerce' ), wp_strip_all_tags( $formatted_sale_price ) ) );
    $price .= $suffix2 . '</span>';
    return $price;
}

// Handle price suffix for other cases
add_filter( 'woocommerce_get_price_suffix', 'custom_price_suffix', 20, 4 );
function custom_price_suffix( $suffix, $product, $price, $qty ) {
    if ( $product->is_on_sale() ) {
        return ''; // Return no suffix as prices are already suffixed
    } elseif ( $product->is_type('variable') ) {
        $prices    = $product->get_variation_prices( true );
        $min_price = current( $prices['price'] );
        $max_price = end( $prices['price'] );

        if ( ! empty($prices['price']) && $min_price !== $max_price ) {
            return ''; // Return no suffix as prices are already suffixed
        }
    }
    return ' ' . esc_html__('/SQFT') . ' ' . esc_html__('with 315 sqft (pallet) minimum purchase');
}

Код находится в файле function.php вашей дочерней темы (или в плагине). Должно работать лучше.

Другие вопросы по теме