Hoping to get some assistance in removing this "add to cart" button along with the pricing shown here. Documentation on the plugin can be found here as well.
What I currently have to remove pricing within WooCommerce is:
add_filter('woocommerce_get_price_html','members_only_price');
function members_only_price($price){
if(is_user_logged_in() ){
return $price;
} else {
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
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', 30 );
return 'Only Registered Users are able to view pricing.';
}
}
IIRC this was the original question which I was able to use the code from until we required Composite Products.
The solution to your problem is that you just need to add one more "remove_action" for the composite type of products.
To achieve this you need to remove the action woocommerce_composited_add_to_cart
The trick is that if you search this action you will get to know that this action is added by using class object so you need to remove the same using the same class object.
Tutorials regarding how to remove actions using class object is already on the net which you need to research.
This will surely help you to achieve your solution.
Related
I cannot remove the default title of WooCommerce product on single page.
The title doesn't have any tags for me to hide it via css.
I also tried using
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
but still not working.
Does anyone have a solution on this?
Give it a try in the following way
function customise_product_page() {
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
}
add_action( 'woocommerce_before_single_product', 'customise_product_page' );
I am trying to remove or edit the "sale!" badge is in woocommrce loop
In the content-product.php,
the comment block says the woocommerce_show_product_loop_sale_flash is hooked with woocommerce_before_shop_loop_item.
However it actually works with woocommerce_after_shop_loop_item_title.
I tried to remove everything from the hook, still, the sales badge still appears:
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating' );
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price' );
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash' );
The following is also not working:
remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash' );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash' );
So I really have no idea where the sales badge function is being called from?
I'm not sure why it's not working for you, because all you have to do is use remove_action, the parameters are the hook location being used and the action name. In this case:
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );
This works, I checked. I was looking for the same thing. Just add it to your functions.php file. It removes the action called woocommerce_show_product_loop_sale_flash from being hooked into the woocommerce_before_shop_loop_item_title hook location.
Perhaps there is a plugin putting it there as well?
In my case, I did not want the sale flash to be inside of the link so I moved it up to be a direct child of the li instead. I did this by first removing the action via the above, and then adding a new action with a new hook location. The new hook location is the same as the one used to open the link, so I had to modify the priority number to make sure it was executed before the link action sharing the hook.
add_action( 'woocommerce_before_shop_loop_item', 'woocommerce_show_product_loop_sale_flash', 5 );
I have added the following code snippet to functions.php after reseaching a lot:
remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
This snippet seems to work for a lot of people.
I'm using the Salient wordpress theme, and this code snippet has no effect on the hyperlink wrap on single product grids.
Please HELP!
You should add it to a hook that proceeds when the actions have been set otherwise you won't be able to remove them. The actions should exist after the 'after_setup_theme' hook. Also ensure the hooks are removed with the same priority as they were set with.
function add_remove_hooks() {
remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
}
add_action( 'after_setup_theme', 'add_remove_hooks' );
I'm trying to redesign a Woccommerce single product page with the elements in the following order:
title
product tabs (description/reviews)
price
add to cart button
meta
As I understand it, I can simply remove the actions in my theme's functions.php file and then re-add them with the priorities I want, so I've done this:
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 6 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 8 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 10 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 99 );
However, no matter what I do with the priority numbers, the product tabs appear at the end. There's obviously something I don't know. Can someone enlighten me?
Aha!
Funny how often you spend ages trying to solve a problem and then as soon as you ask for help you realise what the answer.
The secret is in the question, really...
I have been adding this action
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 6 );
when I should have been adding this:
add_action( 'woocommerce_single_product_summary', 'woocommerce_output_product_data_tabs', 6 );
The crucial difference is the "_after".
It was that simple. Naturally it was adding this action after all the woocommerce_single_product_summary template hooks had been done.
I was trying to move the product title at Woocommerce single product page to different location. The accepted location is just under itemscope itemtype="http://schema.org/Product" and i was trying to remove first the title from current location which is remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 50); but not removed the title from current location.
Another problem is I can't add product title to new location which I have used do_action( 'woocommerce_moved_product_title_position' ); and then add_action('woocommerce_moved_product_title_position', 'woocommerce_template_single_title', 60);
I am using Woocommerce 2.4.13 and WordPress 4.4.1
Please help me to solve this. It'll be great for me.
Weirdly, you must call remove_action from inside a function.
function so_34845641_move_title(){
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 50);
add_action('woocommerce_moved_product_title_position', 'woocommerce_template_single_title', 60);
}
add_action( 'woocommerce_before_single_product', 'so_34845641_move_title' );
Just a suggestion that there are probably enough hooks without needing to add a custom do_action() in the templates.
Run the remove_action inside a function doesn't change anything , but change the priority work for me.
I give you an example:
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20);
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 15 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 10 );
Pay attention and try with differents priorities.