Skip to:
Content
Pages
Categories
Search
Top
Bottom

Subscribe to all forums button


  • lumisdev
    Participant

    @lumisdev

    Hello everyone!

    I’m a new user of bbpress and I’m looking for a way for logged in users to subscribe/unsubscribe to all forums by clicking a button.

    I’ve managed to do it by myself, but I’d like to know if there is an easier way to do it.

    Here is the code in my loop-forums.php file:

    
    <?php
    
    /**
     * Forums Loop
     *
     * @package bbPress
     * @subpackage Theme
     */
    
    // Exit if accessed directly
    defined('ABSPATH') || exit;
    
    do_action('bbp_template_before_forums_loop'); ?>
    
    <?php
    $current_user = get_userdata(get_current_user_id());
    
    if (isset($current_user) && $current_user->ID > 0) :
      $user_subscribed_forum_ids = bbp_get_user_subscribed_forum_ids($current_user->ID);
      $forum_ids_list = array();
    
      while (bbp_forums()) : bbp_the_forum();
        if (bbp_get_forum_type() === 'category') :
    
          foreach (bbp_forum_get_subforums() as $subforum) :
            $forum_ids_list[] = $subforum->ID;
          endforeach;
        else :
          $forum_ids_list[] = bbp_get_forum_id();
        endif;
      endwhile;
    
      $check = sizeof($forum_ids_list) === sizeof($user_subscribed_forum_ids);
      $bbp_action = $check ? "bbp_unsubscribe" : 'bbp_subscribe';
      $label = $check ? "Unsubscribe of all forums" : "Subscribe of all forums";
      $label .= bbp_get_forum_type() === 'category' ? " of this category" : "";
    
      if (isset($_POST) && $_POST['action']) :
        foreach ($forum_ids_list as $forum_id) :
          $q_args = array(
            'action'      => $bbp_action,
            'object_id'   => $forum_id,
            'object_type' => 'post'
          );
    
          $permalink = bbp_get_forum_permalink($forum_id);
          $wp_nonce_url = esc_url(wp_nonce_url(add_query_arg($q_args), 'toggle-subscription_' . $forum_id));
          $wp_nonce_url = substr($wp_nonce_url, strlen('/'));
          $url = html_entity_decode($permalink . $wp_nonce_url);
    
          $ch = curl_init($url);
          curl_setopt($ch, CURLOPT_COOKIE, LOGGED_IN_COOKIE . '=' . $_COOKIE[LOGGED_IN_COOKIE]);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
          $response = curl_exec($ch);
          curl_close($ch);
        endforeach;
    
        $user_subscribed_forum_ids = bbp_get_user_subscribed_forum_ids($current_user->ID);
        $check = sizeof($forum_ids_list) === sizeof($user_subscribed_forum_ids);
        $bbp_action = $check ? "bbp_unsubscribe" : 'bbp_subscribe';
        $label = $check ? "Unsubscribe of all forums" : "Subscribe of all forums";
        $label .= bbp_get_forum_type() === 'category' ? " of this category" : "";
      endif; // isset($_POST) && $_POST['action']
    endif; // isset($current_user) && $current_user->ID > 0
    ?>
    
    <?php if (isset($_POST) && $_POST['action']) : ?>
      <script id="prevent-form-resubmission-when-page-is-refreshed" type="text/javascript">
        // source: https://stackoverflow.com/questions/6320113/how-to-prevent-form-resubmission-when-page-is-refreshed-f5-ctrlr
        if (window.history.replaceState) {
          window.history.replaceState(null, null, window.location.href);
          document.getElementById('prevent-form-resubmission-when-page-is-refreshed').remove();
        }
      </script>
    <?php endif; ?>
    
    <?php if (isset($current_user) && $current_user->ID > 0 && !bbp_is_single_user()) : ?>
      <form action="" method="POST">
        <input type="hidden" name="action" value="<?= $bbp_action ?>">
        <button type="submit" style="color: black;"><?= __($label, 'ls') ?></button>
      </form>
    <?php endif; ?>
    
    <table id="forums-list-<?php bbp_forum_id(); ?>" class="table table-bordered forums-list">
    
      <thead>
        <tr>
    
          <th class="forum-title-column">
            <?php esc_html_e('Forum', 'ls'); ?>
          </th>
    
          <th class="posts-count-column">
            <?php bbp_show_lead_topic() ? esc_html_e('Replies', 'ls') : esc_html_e('Posts', 'ls'); ?>
          </th>
    
          <th class="last-post-column">
            <?php esc_html_e('Last Post', 'ls'); ?>
          </th>
    
        </tr>
      </thead>
    
      <tbody>
    
        <?php while (bbp_forums()) : bbp_the_forum(); ?>
          <?php bbp_get_template_part('loop', 'single-forum'); ?>
        <?php endwhile; ?>
    
      </tbody>
    
    </table>
    
    <?php do_action('bbp_template_after_forums_loop');
    
Viewing 2 replies - 1 through 2 (of 2 total)
Viewing 2 replies - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.
Skip to toolbar