Reputation: 111
I'm busy with a wordpress/woocommerce site and I'd like to hide the price of an item when it's zero on the product category/archive page.
I've tried looking on the web and in the php files but couldn't find where I should add the if statement.
My php knowledge is pretty limited. I was wondering if someone else has experience with this or could help me in the right way
Thanks!
Upvotes: 4
Views: 18152
Reputation: 11
!is_admin()
add_filter( 'woocommerce_get_price_html','maybe_hide_price',10,2);
function maybe_hide_price($price_html, $product){
if( $product->get_price() == 0 && !is_admin() ){
return ''; //or return 'Any text'
}
return $price_html;
}
Upvotes: 1
Reputation: 9455
Tried Jared's answer but just as someone stated, it removed every price once the condition was met. Ultimately I went this solution where it removed the action if the price was 0 and added it back if it wasn't. Seems to work.
public function woocommerce_after_shop_loop_item_title_remove_product_price(){
global $product;
$price = floatval( $product->get_price() );
if( $price <= 0 ){
remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10);
}else{
add_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10);
}
}
add_action( 'woocommerce_after_shop_loop_item_title', 'category_page_changes', 0 );
Upvotes: 0
Reputation: 848
Here's another approach:
add_filter( 'woocommerce_get_price_html','maybe_hide_price',10,2);
function maybe_hide_price($price_html, $product){
if($product->get_price()>0){
return $price_html;
}
return '';
}
Upvotes: 6
Reputation: 365
This code works with Woocommerce 3.6.3. Copy into your functions.php
//Hide Price when Price is Zero
add_filter( 'woocommerce_get_price_html','maybe_hide_price',10,2);
function maybe_hide_price($price_html, $product){
if($product->get_price()>0){
return $price_html;
}
return '';
}
// End of above code
Upvotes: 10
Reputation: 993
This one finally did it for me (using woocommerce 3.0.8):
function cw_change_product_price_display( $price ) {
$clear = trim(preg_replace('/ +/', ' ', preg_replace('/[^A-Za-z0-9 ]/', ' ', urldecode(html_entity_decode(strip_tags($price))))));
if($clear == "0 00"){
return '';
}
return $price;
}
add_filter( 'woocommerce_get_price_html', 'cw_change_product_price_display' );
add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_display' );
Upvotes: 2
Reputation: 758
I haven't tested it but I expect something like this should do the job. Add this to your functions.php file.
add_action('woocommerce_before_shop_loop_item','custom_remove_loop_price');
function custom_remove_loop_price(){
global $product;
if(!$product->price){
remove_action('woocommerce_after_shop_loop_item_title','woocommerce_template_loop_price',10);
}
}
Upvotes: 3