Я пытался найти способ добавить разные суффиксы как к розничным ценам, так и к ценам продажи. Я собираюсь продавать камень и хочу, чтобы на моей странице продукта отображалось следующее.....
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, и он извлекает цену. По какой-то причине это не тянет мою цену. У моих продуктов есть варианты. Не знаете, в этом ли проблема? Я думаю, что есть способ добавить разные суффиксы к каждой цене.
// 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 – %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 вашей дочерней темы (или в плагине). Должно работать лучше.