Your cart is currently empty!
Toggle Buy Button by Group
—
by
I have a membership site using Groups and Groups For Woocommerce. Is there a way to hide the Buy Now / Add to Cart button on a per product basis if a user is in certain Groups?
Posted in Affiliates by Username
Comments
27 responses to “Toggle Buy Button by Group”
Hi Robert,
Try the following snippet, with this you should be ok with your configuration.
The snippet is here, copy and paste it in your functions.php file replacing the previous snippet i have sent you.
Cheers
I’m sorry. I was hoping to save you time. My current products are as follows:
Monthly Sermon Partner
A Celebration of Discipline Guidance
Achieving True Kingdom Greatness
Circle Maker Dream Big
Circle Maker Keep Circling Jericho
Circle Maker Pray Hard
Circle Maker What Is Your Jericho
Circle Maker: Circle Makers Overcoming Obstacles And Hindrances in Prayer
Circle Maker: Think Long
Four Year Master Plan
How to Use The Weapons of God for Victory
Money vs Treasure The Pursuit of the Glory
My Father’s Name Sake
The House That Sin Built
Each product above has an associated group of the same name.
The first product is the monthly membership product. This is the only product that when purchased will place the user in the group that will make all products unpurchasable.
All the other products, when purchased, will place the user in a unique group of the same name as the product. All users in that group will see that product as unpurchasable.
So there will only be 2 groups that make any given product unpurchasable. The first is the Monthly Sermon Partner. That group will make all products unpurchasable. The second group that will make any single product unpurchasable is the group for that single product only, and it has the same name as the product.
Does that information help you?
Hi Robert,
You didn’t put it the right way.
Do this
f ( $is_a_member_Monthly_Sermon_Partner || $is_a_member_A_Celebration_of_Discipline_Guidance || put all the rest here seperated by || ) {
$purchaseable = false;
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 );
}
The last two lines will also remove the Read more/Buy buttons.
It would be a lot easier for both of us though, if you have stated all your requirements from the beginning.
Kind regards,
George
I see. But seems like my code is a bit off. Now all the products are unpurchasable. I’ll show you my code below, but here is another issue that code is causing. While it hides the Buy button on the single products pages, it is causing the Add To Cart button on the shop page (which I customized to say Access Full Sermon, and to have a different color) to revert back to the default styling and to say Read More. I need the Add To Cart / Read More button to also be hidden from the shop page. Here is my code, which I’m sure is wrong. I’m hoping you’ll be able to immediately see what is wrong and tell me how to fix it.
Looking forward to your correction, or is that I need a separate function for each product I need to make unpurchasable based on its unique group?
add_filter(‘woocommerce_is_purchasable’, ‘your_custom_function’, 10, 2);
function your_custom_function( $purchaseable, $product ) {
$purchaseable = true;
$is_a_member_Monthly_Sermon_Partner = false;
$is_a_member_A_Celebration_of_Discipline_Guidance = false;
$is_a_member_Circle_Maker_Pray_Hard = false;
$is_a_member_Achieving_True_Kingdom_Greatness = false;
require_once( ABSPATH . ‘wp-includes/pluggable.php’ );
if ( $group = Groups_Group::read_by_name( ‘Monthly Sermon Partner’ ) ) {
$is_a_member_Monthly_Sermon_Partner = Groups_User_Group::read( get_current_user_id() , $group->group_id );
}
if ( $group = Groups_Group::read_by_name( ‘A Celebration of Discipline Guidance’ ) ) {
$is_a_member_A_Celebration_of_Discipline_Guidance = Groups_User_Group::read( get_current_user_id() , $group->group_id );
}
if ( $group = Groups_Group::read_by_name( ‘Circle Maker Pray Hard’ ) ) {
$is_a_member_Circle_Maker_Pray_Hard = Groups_User_Group::read( get_current_user_id() , $group->group_id );
}
if ( $group = Groups_Group::read_by_name( ‘Achieving True Kingdom Greatness’ ) ) {
$is_a_member_Achieving_True_Kingdom_Greatness = Groups_User_Group::read( get_current_user_id() , $group->group_id );
}
if ( $is_a_member_Monthly_Sermon_Partner ) {
$purchaseable = false;
}
if ( $is_a_member_A_Celebration_of_Discipline_Guidance ) {
$purchaseable = false;
}
if ( $is_a_member_Circle_Maker_Pray_Hard ) {
$purchaseable = false;
}
if ( $is_a_member_Achieving_True_Kingdom_Greatness ) {
$purchaseable = false;
}
return $purchaseable;
}
Yes exactly.
If there is a logic connection between group name and product name like this
ie
product 1 would belong to group 1
.
.
product 343 would belong to group 343.
Then you can check for the names easily.
Cheers
The name of the group for each product is the same as the product, with rare exception, but when I’m done, all groups will have the same name as the product you have to buy to access that group.
Are you saying I can just add a new line or code or 2 to the piece of code in functions.php to create an if then statement for every product I add…………to………:
Make Product 1 unpurchasable if user is a member of Group 1
Make Product 2 unpurchasable if user is a member of Group 2
Make Product 3 unpurchasable if user is a member of Group 3
Make Product 4 unpurchasable if user is a member of Group 4
Make Product 5 unpurchasable if user is a member of Group 5
etc……
Is that what you are thinking about?
Hi Robert,
If you have a predefined list of groups for the products, please put it in a comment here.
Thanks.
ok thanks. And yes that is the part that I was afraid I wasn’t communicating properly to you.
Each product has its own group that will make that product unpurchasable for logged in uses that have already paid for it. Basically, the product short description has the audio player in it, unlocked only for users who have purchased it. So they can access the file without have to “buy” it again for free (since I’m using a Groups Pricing plugin that I set to make the price of each product $0 for users who have already bought it based on the group that purchase put them in.
The only Monthly Membership product is the only group that will make products free (or unpurchasable with no add to cart button) site wide.
I look forward to your reply of what options you find for what I am buliding.
Thanks again,
Rob
Hi Robert,
Since the group for every product will be different, then the second part won’t work for you. Let me check if there is another solution for that.
Cheers
George,
2 questions:
1. My monthly membership plan that will will hide Add to Cart buttons site-wide is called “Monthly Sermon Partner”. So is my syntax correct below?
add_filter(‘woocommerce_is_purchasable’, ‘group_hide_add_to_cart_button’, 10, 2);
function group_hide_add_to_cart_button( $purchaseable, $product ) {
$purchaseable = true;
$is_a_member_Monthly_Sermon_Partner = false;
$is_a_member_red = false;
require_once( ABSPATH . ‘wp-includes/pluggable.php’ );
if ( $group = Groups_Group::read_by_name( ‘Monthly Sermon Partner’ ) ) {
$is_a_member_Monthly_Sermon_Partner = Groups_User_Group::read( get_current_user_id() , $group->group_id );
}
if ( $group = Groups_Group::read_by_name( ‘Red Members’ ) ) {
$is_a_member_red = Groups_User_Group::read( get_current_user_id() , $group->group_id );
}
if ( $is_a_member_Monthly_Sermon_Partner && $is_a_member_red ) {
$purchaseable = false;
}
return $purchaseable;
}
2. The second group you have here is Red Group. The problem for me is that the second group that will hide the Add To Cart button will be different for every product. So is there a way for me to make the code do something like this:
A. First check if user if in Monthly Sermon Group. If so, hide Add to Cart button (which I see in your code)…but then…
B. If Product is Red, and if user is member of Red Group, then hide Add to Cart Button.
Of course that code will get very long as I add 1 or 2 products and groups per week, but it’s not too much to manage, and if that code is possible, that will be my ideal situation. Can it be done?
Hi Robert,
You can replace the previous snippet i’ve sent you with this one here.
You can delete the previous snippet in your functions.php file and put the new one from the link above.
Hope it fits your configuration.
Cheers
Ah, so are you saying that I apply the code you gave me to each product? I thought it went in functions.php.
But how would I apply that code to each product separately, or am I misunderstanding what you are saying?
Thanks again for all you help!
So since each customer is placed to the product Group after purchasing the product, then you can check for this group the same way we did for the previous group.
Cheers
Thanks so much. I will use your code.
However, there is only 1 group that will make product unpurchasable site wide. We’ll call that group “Monthly Member”
But each product also has its own group that all customers who purchase each product are placed in.
So each product will be unpurchasable by the “Monthly Member” group, but also be one more group that will unique to each product.
How do I accomplish that with your code? Is that what you are referring to by excluding products?
Thanks,
Rob
Hi Robert,
Please check the filter here and paste it in your functions.php file of your child theme. The only thing you have to change is “Blue Members” to your desired group.
As for the products, it depends on how you want to exclude products, ie by id or category.
Kind regards,
George
Hi Robert,
No worries, I will prepare it for you and reply the snippet here.
Kind regards,
George
George,
That would be very gracious of you and much appreciated! I will await your reply.
George,
Thanks so much for this, but unfortunately, my skill at php is insufficient to understand how to properly edit the code you gave me.
It looks like I’m supposed to create a custom function name, and set the group the filter checks for. But I’m not sure in which all places I need to make these edits.
Also, how do I make the code filter for a different group for each product?
If this is too much for you to support, I understand. If you cannot guide me through the process, I guess I will have to seek a developer, or forego this this feature for now.
Hi Robert,
The filter will help you set the product as purchaseable or not. Here is an example:
http://pastebin.com/raw.php?i=j2kau5dN
Kind regards,
George
Perhaps this is just above my head, but I still don’t see how can use this filter to check if the buyer is a member of a specific group for each and every product. Each product has its own group, so the filter will need to check for a different group for each and every product we sell. Is that possible with the filter?
Yes Robert, the result is the same.
If the user belongs to a group, then he doesn’t have the ability/capability to buy the product.
Cheers
Since you are trying to sell a product based on who is trying to buy it, i believe it is better to check if the user belongs to the specific group.
Cheers
I didn’t tell you fully what I’m trying to do. It’s not that I’m trying to sell a product only to certain people. My product short description has content in it that is displayed to members of certain groups. And I have edited functions.php to display product short description on the shop page. Once someone buys a particular product, they are placed in a particular group exclusively for that product. From then on, I want them to no longer see the buy button on the shop page for that product. Instead they only see the unlocked content.
I hope I am being clear. With that being said, do you think your suggestion will work for me?
Well I don’t want to hide the actual products from anyone. All products are to always be visible. But I want the Add To Cart button for each product to be hidden from certain people depending which group they are in. Will that be possible?
Well Robert,
If you restrict access to a product, then if the user belongs to the group they cannot purchase, then they will not be able to even see the product, so its easier like that and you don’t have to use the filter to recheck.
Kind regards,
George
Hi Robert,
Although i haven’t tried it myself, there is this filter
add_filter('woocommerce_is_purchasable', 'your_custom_function', 10, 2);
where you can check if the current user belongs to foobar group, then the product is purchasable. Otherwise if not or if he/she is still a visitor/guest then the product is not purchasable.
Kind regards,
George
Os it possible to use that filter so that each product has a different group the filter checks for.
In other words, there is only one group that if a user is a member of, they cannot purchase anything on the site.
Other than that, each and every product on the site is associated with its own unique group that the members of should not be able to buy that particular product.
Could that filter do that?