向 WooCommerce 显示的产品价格添加多个后缀

问题描述 投票:0回答:2

我一直在尝试找到一种方法来为我的零售价和销售价添加不同的后缀。 我要卖石头,我希望我的产品页面显示以下内容......

12.99 美元/平方英尺

9.99 美元/平方英尺,最低购买量为 315 平方英尺(托盘)

当我将 PHP 代码添加到 function.php 文件时,它会显示

0.00 美元/平方英尺

最低购买量为 315 平方英尺(托盘),每平方英尺 0.00 美元

我尝试了许多不同的插件,但还没有找到一个可以让我以我想要的方式显示它的插件。 我尝试添加到我的functions.php页面的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 wordpress woocommerce product hook-woocommerce
2个回答
0
投票
// 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;
}

我对代码做了一些小修正,包括在串联运算符 (.) 周围添加空格以提高可读性。


0
投票

您的代码存在一些错误和缺失的情况。以下将处理所有产品类型和案例的自定义价格后缀:

// 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>';
}

// Handle 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');
}

代码位于子主题的functions.php 文件中(或插件中)。效果应该会更好。

© www.soinside.com 2019 - 2024. All rights reserved.