Nathan (@nhadsall)

Forum Replies Created

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

  • Nathan
    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


    Nathan
    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>';
    }

    Nathan
    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…


    Nathan
    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.

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