wordpress/woocommerce: Remove price if zero

前端 未结 5 1618
庸人自扰
庸人自扰 2021-02-04 22:38

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

相关标签:
5条回答
  • 2021-02-04 22:49

    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);
        }
    }
    
    0 讨论(0)
  • 2021-02-04 22:55

    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
    
    0 讨论(0)
  • 2021-02-04 22:57

    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 '';
     }
    
    0 讨论(0)
  • 2021-02-04 23:01

    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' );
    
    0 讨论(0)
  • 2021-02-04 23:13

    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 );
    
    0 讨论(0)
提交回复
热议问题