Skip to:
Content
Pages
Categories
Search
Top
Bottom

New Users Auto Subscribe to One Forum


  • nhadsall
    Participant

    @nhadsall

    Hi,
    I would like to hook in so any new user is automatically subscribed to a forum. I know the user ID and forum ID, but I do not know what function I should call to subscribe that user to the forum. Thanks for the help!

    bbPress 2.5.3

    - Nathan

Viewing 11 replies - 1 through 11 (of 11 total)

  • Robin W
    Moderator

    @robin-w

    The function is

    bbp_add_user_forum_subscription

    it is in

    bbpress/includes/users/functions.php

    you pass it user-id and forum_id


    iclimb
    Participant

    @iclimb

    Hi nhadsall.

    This is just the function i’mo looking for. have you made something that works? I need all future users to be subscribed to a specific forum, but still be able to unsubscribe afterwards.

    My php skills are wery sparse, so i hope you might share your solution or help me one the way.
    I know my way around wordpress and coding in general so i won’t take hours of guidance :)

    Thanks in advance.

    Regards Christian


    Robin W
    Moderator

    @robin-w

    @iclimb hopefully Nathan will share his solution with us.


    nhadsall
    Participant

    @nhadsall

    @robin-w thanks for the function. This is not going to be as easy as I expected.

    It was easy to hook into the new user creation with “user_register”, but WordPress is gives me a “Fatal error: Call to undefined function” when I try to call bbp_add_user_forum_subscription from this hook (my theme’s function.php).

    I saw somewhere else that some functions need to be run within a bbpress loop?

    @iclimb, I’ll be happy to share if I get it working.


    nhadsall
    Participant

    @nhadsall

    Okay,
    It looks like I am running into problems because the hook is executing on wp-activate.php, which does not load plugins. This may be more of a problem than I thought…


    Robin W
    Moderator

    @robin-w

    keep us updated, this is not my field of expertise, so can’t directly help you !


    palmdoc
    Participant

    @palmdoc

    I’d like to see an auto-subscribe feature for forums too!


    nhadsall
    Participant

    @nhadsall

    So, after DAYS of working on this I finally have a solution. I have not done a lot of testing, but this has worked so far.

    Basically what is happening is that for forums (not replies) the logic is inverted. This means that users are subscribed to a forum unless they unsubscribe (ie. are added to the DB).

    Just add this to your theme’s function.php and it should work.

    I hope this helps someone, because it has taken a LOT of work!

    add_filter( 'bbp_get_user_subscribe_link', 'invert_get_user_subscribe_link', 10, 4 ); //invert forum subscription
    add_filter( 'bbp_is_user_subscribed_to_forum', 'invert_is_user_subscribed_to_forum', 10, 4 ); //invert forum subscription
    add_filter( 'bbp_get_forum_subscribers', 'invert_get_forum_subscribers' ); //invert forum subscription
    add_filter( 'bbp_is_user_subscribed', 'invert_is_user_subscribed', 10, 4 ); //invert forum subscription
    
    function invert_is_user_subscribed($retval, $user_id, $object_id, $subscribed_ids) {
    	if (get_post_type( $object_id ) == bbp_get_forum_post_type())
    		return !$retval;
    	else	
    		return $retval;
    }
    
    function strContains($needle, $haystack) {
    	if (strpos($haystack, $needle) !== false) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    function invert_get_user_subscribe_link ($html, $r, $user_id, $topic_id) {
    	if (strContains( "bbp_unsubscribe", $html )) {
    		$html = str_replace("bbp_unsubscribe", "bbp_subscribe", $html);
    	} else {
    		$html = str_replace("bbp_subscribe", "bbp_unsubscribe", $html);
    	}
    	return $html;
    }
    
    function invert_get_forum_subscribers( $users ) {
    	$args = array('fields' => 'id');
    	$all_users = get_users($args);
    	$send_to_users    = array_diff($all_users, $users);
    	return $send_to_users;
    }
    
    function invert_is_user_subscribed_to_forum( $retval, $user_id, $forum_id, $subscribed_ids ) {
    	return !$retval;
    }
    

    I also include make users “subscribed” to anything they write by default. All they have to do is uncheck the box. The following code is also added to function.php.

    add_action('bbp_theme_after_topic_form_subscriptions', 'subscribed_by_default'); //default subscribe
    add_action('bbp_theme_after_reply_form_subscription', 'subscribed_by_default'); //default subscribe
    
    function subscribed_by_default() 
    	echo '<script type="text/javascript">jQuery("#bbp_topic_subscription").prop("checked","checked");</script>';
    }

    Robin W
    Moderator

    @robin-w

    Great stuff !

    It always amazes me how long I spend to produce so little code :-)

    Bet you learned a lot along the way though!


    iclimb
    Participant

    @iclimb

    nhadsall, this is great..! thumbs up and great work. i’ve tested it a little bit and it seems to work when a new forum i created.

    I really don’t want to sound demanding, because i’m really appreciating the work you’re doing!
    But one thing i think it is missing, is when a new user is created, he is not subscribed to existing forums. He will only be subscribed to new ones. Do you think it would be possible to make new users subscribed to all forums when created? i realize that it probably means some work, but i think it will make most sense that way.

    Best regards, Christian


    nhadsall
    Participant

    @nhadsall

    Hi Christian,
    The code I ended up using was not my original idea. I didn’t hook into a new user creation. What this does is inverts the subscribe list. It turns it into an unsubscribe list. So any user should be subscribed to any new forum by default. Let me know if something is not working for you, and I’ll see what I can do!

    - Nathan

Viewing 11 replies - 1 through 11 (of 11 total)

You must be logged in to reply to this topic.