Recentemente um cliente teve a necessidade de bloquear algumas informações na loja feita em woocommerce e deixar os dados visíveis apenas para usuários que ele havia concedido acesso através do registro do próprio wordpress (membros cadastrados).

A função abaixo (que deve ser colocada no arquivo functions.php do tema) executa isso com exatidão e você pode escolher quais dados quer esconder/mostrar para os usuários.

 


add_filter('woocommerce_get_price_html','show_price_logged');
function show_price_logged($price){
if( is_user_logged_in() ){
return $price;
}
}
function remove_add_cart(){

       global $product;
       if ( !is_user_logged_in() ) { 

       // removing the purchase buttons
       
       remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart' );
       remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
       remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');
       remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
       remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );
       remove_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 );
       remove_action( 'woocommerce_variable_add_to_cart', 'woocommerce_variable_add_to_cart', 30 );
       remove_action( 'woocommerce_external_add_to_cart', 'woocommerce_external_add_to_cart');
       remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_external_add_to_cart', 30 );
       remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation', 10 );
	   remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );

	   remove_action( 'woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_button_view_cart', 10 );
	   remove_action( 'woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_proceed_to_checkout', 20 );

       remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); 
       // Remove price
       remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
       remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price' );
       return WooCommerce::instance();
   }

}
add_action( 'wp', 'remove_add_cart' );

Warning: Trying to access array offset on value of type bool in /home/wwruda/public_html/web/wp-content/themes/rudalov/theme-admin/functions/theme-general-features.php on line 311
Share
4 Comments
  • Helio Richter
    Responder
    junho 7, 2021

    Boa noite… Vi seu post e ainda tenho pouco conhecimento em desenvolvimento de sites, gostaria de saer onde coloco essa função? Obrigado

    • rudalov
      Responder
      junho 7, 2021

      Olá Helio. Você precisa colocar esses filtros no arquivo function.php do seu tema!

  • Renato Prado
    Responder
    outubro 6, 2021

    Olá Rudalov, tudo bem?

    Estou desenvolvendo localhost.

    Eu tentei editar o seu script, removendo essas linhas, mas não funcionou:
    remove_action( ‘woocommerce_after_shop_loop_item_title’, ‘woocommerce_template_loop_price’, 10 );
    // Remove price
    remove_action( ‘woocommerce_single_product_summary’, ‘woocommerce_template_single_price’, 10 );
    remove_action( ‘woocommerce_after_shop_loop_item_title’, ‘woocommerce_template_loop_price’ );

    Na verdade eu gostaria de remover apenas o carrinho e o checkout, mas mantendo o preço. Ficaria como uma vitrine eletrônica, com todos produtos cadastrados, porem apenas com o preço e descrição.

    Obrigado.

    • rudalov
      Responder
      julho 14, 2022

      Renato, em uma oportunidade que precisei esconder dessa forma eu usei apenas o css (display: none) pro elemento que queria esconder do usuário, foi mais simples assim!

Deixe um comentário