Skip to:
Content
Pages
Categories
Search
Top
Bottom

Get Number of Favorites & Subscription to a topic


  • Babblebey
    Participant

    @babblebey

    I am trying to make up my own topic description/summary area, so I would like to display the current number of favourites and subscriptions the current topic has.

    I have done successfully some other part of the area

    
    <?php !bbp_show_lead_topic() ? bbp_topic_reply_count() : bbp_topic_post_count(); // Display No. of replies in current topic ?>
    <?php bbp_topic_voice_count(); //Display No of Users in current topic ?>
    <?php bbp_author_link( array( 'post_id' => bbp_get_topic_last_active_id(), 'type' => 'avatar', 'size' => 20 ) ); //Display Last Reply User ?>
    <?php bbp_topic_freshness_link(); //Display Last Reply Time ?>
    

    So I currently want a function that will display the number of favourites(priority) and subscriptions(not much priority).

    Thanking you in anticipation of any working response.

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

  • Robin W
    Moderator

    @robin-w

    under 2.5.14 favorites are stored in usermeta under ‘wp__bbp_favorites’ as a list of topics

    so to get a count for a topic, you would need to loop through all users and for each one count if the current topic was in it.

    so something like (not tested as am tied up elsewhere, so just spending 5 mins on this)

    $topic = some function to get current topic number if not already there
    $users = get_users() ;
    $count = 0 ;
    foreach ($users as $user) {
    	$topic_list = get_usermeta ($user->id, 'wp__bbp_favorites', false) ;
    	if (in_array ($topic , $topic_list) $count++ ;
    }
    echo $count ;

    Babblebey
    Participant

    @babblebey

    I guess I will be patient for you to test this Robin

    
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $count = 0;
    foreach ($users as $user) {
        $topic_list = get_usermeta ($user->id, 'wp__bbp_favorites', false) ;
        if (in_array ($topic , $topic_list))  $count++ ;
    }
    echo $count;
    

    I am getting the error

    Warning: in_array() expects parameter 2 to be array, string given in C:\wamp\www\omna\wp-content\themes\omna2\bbpress\content-single-topic-lead.php on line 134


    Babblebey
    Participant

    @babblebey

    
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $count = 0;
    foreach ($users as $user) {
        $topic_list = array(get_usermeta ($user->id, 'wp__bbp_favorites', false)) ;
        if (in_array ($topic , $topic_list))  $count++ ;
    }
    echo $count;
    

    And this one worked Robin! Thank you!


    Robin W
    Moderator

    @robin-w

    great – I think subscriptions works the same way but with ‘wp__bbp_subscriptions’


    Babblebey
    Participant

    @babblebey

    
    <?php
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $countsub = 0;
    foreach ($users as $user) {
        $topicsub_list = array(get_usermeta ($user->id, 'wp__bbp_subscriptions', false)) ;
        if (in_array ($topic , $topicsub_list))  $countsub++ ;
    }
    echo $countsub;
    ?>
    

    It didn’t work that way, Robin!

    I got a 0 in the result, even as i was sure there’s a subscription


    Robin W
    Moderator

    @robin-w

    hmm, can’t see why it shoudln’t work

    try for test purposes

    <?php
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $countsub = 0;
    foreach ($users as $user) {
        $topicsub_list = array(get_usermeta ($user->id, 'wp__bbp_subscriptions', false)) ;
    echo '<br>Topic : '.$topic ;
    echo '<br>user_id: '.$user->id.'<br>' ;
    var_dump ($topicsub_list) ;
        if (in_array ($topic , $topicsub_list))  $countsub++ ;
    }
    echo $countsub;
    ?>

    that should help you find out where the problem is


    Babblebey
    Participant

    @babblebey

    Ok, so I’ve got this result, Robin!

    
    Topic : 65
    user_id: 1
    array (size=1)
      0 => string '149,65' (length=6)
    
    Topic : 65
    user_id: 2
    array (size=1)
      0 => string '145,146,65' (length=10)
    
    0
    

    I believe that should mean that User 1 and User 2 and currently subscribed to the topic But I still get a 0. The Replica of the Favorite should actually work but I don’t know..


    Robin W
    Moderator

    @robin-w

    looks like it hasn’t converted to an array basically it should read

    array (size = 2)
    0 => 149
    1 => 65

    etc.

    ok so let’s try replacing

    $topicsub_list = array(get_usermeta ($user->id, 'wp__bbp_subscriptions', false)) ;

    with

    $topicsub_lista = get_usermeta ($user->id, 'wp__bbp_subscriptions', true) ;
    $topicsub_list = explode (',' , $topicsub_lista) ; 

    Babblebey
    Participant

    @babblebey

    That was a hit, Robin!

    
    <?php
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $countsub = 0;
    foreach ($users as $user) {
        $topicsub_listarray = get_usermeta ($user->id, 'wp__bbp_subscriptions', true) ;
        $topicsub_list = explode (',' , $topicsub_listarray) ;
        if (in_array ($topic , $topicsub_list))  $countsub++ ;
    }
    echo $countsub;
    ?>
    

    That worked it….. Thank you.


    Robin W
    Moderator

    @robin-w

    great – you may want to check the favorites for if a user has more than one favorite topic – I am suspecting your code was only tested with 1 favorite – if so same principal, if not I don’t know why one works and then other doesn’t !!


    Babblebey
    Participant

    @babblebey

    My Code was to test it for how many User has favourited a particular topic (Like, check how many likes a post has)…

    shots

    But I guess like you said, If I understand you very well, I am testing in a scenario where User has only one topic listed in the wp__bbp_favorites meta area…

    I think that fact has returned to haunt me now Robin… The picture above shows that the Currently logged in User (Who is a keymaster) has favorited the current topic but, his Favorite doesn’t count, the displayed 1 is for that of the second user who also favorites the same topic and happens to be the only topic he has favorited.

    Look at the shot below then:

    screenshot-localhost-2019-11-07-17-12-45

    Now I have added more topics to the user’s wp__bbp_favorites by favouriting more topics but Its not displaying the favourites in those topics.

    Another scenario on a different topic here:

    screenshot-localhost-2019-11-07-17-22-30

    Not displaying the number of favorite for the topic.

    I added a new user and it was able to successfully favourite and increase the count on one of those topics that didn’t get from the previous two users.

    So I think the favorite count only work if a certain user has only one topic inside their wp__bbp_favorites

    Here’s the favourite count code again as I have used:

    
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $count = 0;
    foreach ($users as $user) {
        $topic_list = array(get_usermeta ($user->id, 'wp__bbp_favorites', false)) ;
        if (in_array ($topic , $topic_list))  $count++ ;
    }
    echo $count;
    

    What do you suggest I do now Robin? Should I try explode explosion???


    Babblebey
    Participant

    @babblebey

    Now I guess if Each User has already one topic in his wp__bbp_favorites the topic stays favorited and counted but No counts is allowed for another topic again.

    So the if (in_array ($topic , $topic_list)) $count++ is being a Jealous line i.e: It Only counts a user’s favorite if the user favorites only the currents topics else it doesn’t. because there exists more than one topic inside the $topic_list = array(get_usermeta ($user->id, 'wp__bbp_favorites', false)) ;

    What do I do?


    Babblebey
    Participant

    @babblebey

    
    <?php
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $countfav = 0;
    foreach ($users as $user) {
        $topicfav_listarray = get_usermeta ($user->id, 'wp__bbp_subscriptions', true) ;
        $topicfav_list = explode (',' , $topicfav_listarray) ;
        if (in_array ($topic , $topicfav_list))  $countsub++ ;
    }
    echo $countfav;
    ?>
    

    This worked now Robin! Thank you!


    Babblebey
    Participant

    @babblebey

    
    <?php
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $countsub = 0;
    foreach ($users as $user) {
        $topicsub_list = array(get_usermeta ($user->id, 'wp__bbp_subscriptions', false)) ;
        if (in_array ($topic , $topicsub_list))  $countsub++ ;
    }
    echo $countsub;
    ?>
    

    Now it’s understandable that this also didn’t work on the topic I tested it with, because the user has subscribed to multiple topics.

    Oh wow!


    Babblebey
    Participant

    @babblebey

    Counting Topic Favorites:

    
    <?php
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $countfav = 0;
    foreach ($users as $user) {
        $topicfav_listarray = get_usermeta ($user->id, 'wp__bbp_subscriptions', true) ;
        $topicfav_list = explode (',' , $topicfav_listarray) ;
        if (in_array ($topic , $topicfav_list))  $countfav++ ;
    }
    echo $countfav;
    ?>;
    

    Counting Topic Subscriptions:

    
    <?php
    $topic = bbp_get_topic_id();
    $users = get_users() ;
    $countsub = 0;
    foreach ($users as $user) {
        $topicsub_listarray = get_usermeta ($user->id, 'wp__bbp_subscriptions', true) ;
        $topicsub_list = explode (',' , $topicsub_listarray) ;
        if (in_array ($topic , $topicsub_list))  $countsub++ ;
    }
    echo $countsub;
    ?>;
    

    Now those are the things that worked.

    Thank you, Robin! I hope this helps someone in the future


    Robin W
    Moderator

    @robin-w

    great – and thanks for posting the final solutions – I’m sure it will help someone else

Viewing 16 replies - 1 through 16 (of 16 total)
  • You must be logged in to reply to this topic.
Skip to toolbar