I am trying to edit the price value for a single product.
In single-product/price.php there is a template call to $product->get_price_html. How can I edit that function/method to change the way the HTML is presented?
At the moment even if I delete all the contents of the function located in class-wc-product it still miraculously displays? Anyone know why?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Core and plugin files should never be edited directly, as any updates could overwrite your changes. If you look in WooCommerce source at the get_price_html method, there are a number of filters available to modify the output of the function.
See add_filter in Codex for more info on adding filters to apply_filters calls.
From get_price_html in class-wc-product:
return apply_filters('woocommerce_get_price_html', $price, $this);
So to add your own filter:
add_filter( 'woocommerce_get_price_html', 'wpa83367_price_html', 100, 2 );
function wpa83367_price_html( $price, $product ){
return 'Was:' . str_replace( '<ins>', ' Now:<ins>', $price );
}
Method 2
function wpa83368_price_html( $price,$product ){
// return $product->price;
if ( $product->price > 0 ) {
if ( $product->price && isset( $product->regular_price ) ) {
$from = $product->regular_price;
$to = $product->price;
return '<div class="old-colt"><del>'. ( ( is_numeric( $from ) ) ? woocommerce_price( $from ) : $from ) .' Retail </del> | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Our Price</div>';
} else {
$to = $product->price;
return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Our Price</div>';
}
} else {
return '<div class="live-colst">0 Our Price</div>';
}
}
Method 3
in the functions.php
function h08831n_get_price($product){
$price_html = '<div class="product-price">';
if ( $product->get_price() > 0 ) {
if ($product->get_price() && $product->get_regular_price()) {
$from = $product->get_regular_price();
$to = $product->get_price();
$price_html .= '<del>'. ( ( is_numeric( $from ) ) ? wc_price( $from ) : $from ) .'</del><ins>'.( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) .'</ins>';
}else{
$to = $product->get_price();
$price_html .= '<ins>' . ( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) . '</ins>';
}
}else{
$price_html .= '<div class="free">free</div>';
}
$price_html .= '</div>';
return $price_html;
}
in the where you want to display the price like single-product.php
global $product; echo h08831n_get_price($product);
you can also remove wc_price in the function to remove woocommerce default HTML formats
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0