function kleo_bbpress_favorites_fix($r) { if (bbp_is_favorites() || bbp_is_subscriptions()) { $r['post_author'] = 0; $r['author'] = 0; } return $r; }
/** * Possibly intercept the template being loaded * * Listens to the 'template_include' filter and waits for any bbPress specific * template condition to be met. If one is met and the template file exists, * it will be used; otherwise * * Note that the _edit() checks are ahead of their counterparts, to prevent them * from being stomped on accident. * * @since bbPress (r3032) * * @param string $template * * @uses bbp_is_single_user() To check if page is single user * @uses bbp_get_single_user_template() To get user template * @uses bbp_is_single_user_edit() To check if page is single user edit * @uses bbp_get_single_user_edit_template() To get user edit template * @uses bbp_is_single_view() To check if page is single view * @uses bbp_get_single_view_template() To get view template * @uses bbp_is_search() To check if page is search * @uses bbp_get_search_template() To get search template * @uses bbp_is_forum_edit() To check if page is forum edit * @uses bbp_get_forum_edit_template() To get forum edit template * @uses bbp_is_topic_merge() To check if page is topic merge * @uses bbp_get_topic_merge_template() To get topic merge template * @uses bbp_is_topic_split() To check if page is topic split * @uses bbp_get_topic_split_template() To get topic split template * @uses bbp_is_topic_edit() To check if page is topic edit * @uses bbp_get_topic_edit_template() To get topic edit template * @uses bbp_is_reply_move() To check if page is reply move * @uses bbp_get_reply_move_template() To get reply move template * @uses bbp_is_reply_edit() To check if page is reply edit * @uses bbp_get_reply_edit_template() To get reply edit template * @uses bbp_set_theme_compat_template() To set the global theme compat template * * @return string The path to the template file that is being used */ function bbp_template_include_theme_supports($template = '') { // Editing a user if (bbp_is_single_user_edit() && ($new_template = bbp_get_single_user_edit_template())) { // User favorites } elseif (bbp_is_favorites() && ($new_template = bbp_get_favorites_template())) { // User favorites } elseif (bbp_is_subscriptions() && ($new_template = bbp_get_subscriptions_template())) { // Viewing a user } elseif (bbp_is_single_user() && ($new_template = bbp_get_single_user_template())) { // Single View } elseif (bbp_is_single_view() && ($new_template = bbp_get_single_view_template())) { // Search } elseif (bbp_is_search() && ($new_template = bbp_get_search_template())) { // Forum edit } elseif (bbp_is_forum_edit() && ($new_template = bbp_get_forum_edit_template())) { // Single Forum } elseif (bbp_is_single_forum() && ($new_template = bbp_get_single_forum_template())) { // Forum Archive } elseif (bbp_is_forum_archive() && ($new_template = bbp_get_forum_archive_template())) { // Topic merge } elseif (bbp_is_topic_merge() && ($new_template = bbp_get_topic_merge_template())) { // Topic split } elseif (bbp_is_topic_split() && ($new_template = bbp_get_topic_split_template())) { // Topic edit } elseif (bbp_is_topic_edit() && ($new_template = bbp_get_topic_edit_template())) { // Single Topic } elseif (bbp_is_single_topic() && ($new_template = bbp_get_single_topic_template())) { // Topic Archive } elseif (bbp_is_topic_archive() && ($new_template = bbp_get_topic_archive_template())) { // Reply move } elseif (bbp_is_reply_move() && ($new_template = bbp_get_reply_move_template())) { // Editing a reply } elseif (bbp_is_reply_edit() && ($new_template = bbp_get_reply_edit_template())) { // Single Reply } elseif (bbp_is_single_reply() && ($new_template = bbp_get_single_reply_template())) { // Editing a topic tag } elseif (bbp_is_topic_tag_edit() && ($new_template = bbp_get_topic_tag_edit_template())) { // Viewing a topic tag } elseif (bbp_is_topic_tag() && ($new_template = bbp_get_topic_tag_template())) { } // A bbPress template file was located, so override the WordPress template // and use it to switch off bbPress's theme compatibility. if (!empty($new_template)) { $template = bbp_set_template_included($new_template); } return apply_filters('bbp_template_include_theme_supports', $template); }
/** * Possibly intercept the template being loaded * * Listens to the 'template_include' filter and waits for any bbPress specific * template condition to be met. If one is met and the template file exists, * it will be used; otherwise * * Note that the _edit() checks are ahead of their counterparts, to prevent them * from being stomped on accident. * * @since bbPress (r3032) * * @param string $template * * @uses bbp_is_single_user() To check if page is single user * @uses bbp_get_single_user_template() To get user template * @uses bbp_is_single_user_edit() To check if page is single user edit * @uses bbp_get_single_user_edit_template() To get user edit template * @uses bbp_is_single_view() To check if page is single view * @uses bbp_get_single_view_template() To get view template * @uses bbp_is_forum_edit() To check if page is forum edit * @uses bbp_get_forum_edit_template() To get forum edit template * @uses bbp_is_topic_merge() To check if page is topic merge * @uses bbp_get_topic_merge_template() To get topic merge template * @uses bbp_is_topic_split() To check if page is topic split * @uses bbp_get_topic_split_template() To get topic split template * @uses bbp_is_topic_edit() To check if page is topic edit * @uses bbp_get_topic_edit_template() To get topic edit template * @uses bbp_is_reply_edit() To check if page is reply edit * @uses bbp_get_reply_edit_template() To get reply edit template * @uses bbp_set_theme_compat_template() To set the global theme compat template * * @return string The path to the template file that is being used */ function bbp_template_include_theme_supports($template = '') { // Editing a user if (bbp_is_single_user_edit() && ($new_template = bbp_get_single_user_edit_template())) { // User favorites } elseif (bbp_is_favorites() && ($new_template = bbp_get_favorites_template())) { // User favorites } elseif (bbp_is_subscriptions() && ($new_template = bbp_get_subscriptions_template())) { // Viewing a user } elseif (bbp_is_single_user() && ($new_template = bbp_get_single_user_template())) { // Single View } elseif (bbp_is_single_view() && ($new_template = bbp_get_single_view_template())) { // Forum edit } elseif (bbp_is_forum_edit() && ($new_template = bbp_get_forum_edit_template())) { // Single Forum } elseif (bbp_is_single_forum() && ($new_template = bbp_get_single_forum_template())) { // Forum Archive } elseif (bbp_is_forum_archive() && ($new_template = bbp_get_forum_archive_template())) { // Topic merge } elseif (bbp_is_topic_merge() && ($new_template = bbp_get_topic_merge_template())) { // Topic split } elseif (bbp_is_topic_split() && ($new_template = bbp_get_topic_split_template())) { // Topic edit } elseif (bbp_is_topic_edit() && ($new_template = bbp_get_topic_edit_template())) { // Single Topic } elseif (bbp_is_single_topic() && ($new_template = bbp_get_single_topic_template())) { // Topic Archive } elseif (bbp_is_topic_archive() && ($new_template = bbp_get_topic_archive_template())) { // Editing a reply } elseif (bbp_is_reply_edit() && ($new_template = bbp_get_reply_edit_template())) { // Single Reply } elseif (bbp_is_single_reply() && ($new_template = bbp_get_single_reply_template())) { // Editing a topic tag } elseif (bbp_is_topic_tag_edit() && ($new_template = bbp_get_topic_tag_edit_template())) { // Viewing a topic tag } elseif (bbp_is_topic_tag() && ($new_template = bbp_get_topic_tag_template())) { } // bbPress template file exists if (!empty($new_template)) { // Override the WordPress template with a bbPress one $template = $new_template; // @see: bbp_template_include_theme_compat() bbpress()->theme_compat->bbpress_template = true; } return apply_filters('bbp_template_include_theme_supports', $template); }
<ul id="bbp-topic-<?php bbp_topic_id(); ?> " <?php bbp_topic_class(); ?> > <li class="bbp-topic-title"> <?php if (bbp_is_user_home()) { ?> <?php if (bbp_is_favorites()) { ?> <span class="bbp-topic-action"> <?php do_action('bbp_theme_before_topic_favorites_action'); ?> <?php bbp_user_favorites_link(array('before' => '', 'favorite' => '+', 'favorited' => '×')); ?> <?php do_action('bbp_theme_after_topic_favorites_action'); ?>
/** * User favorites link * * Return the link to make a topic favorite/remove a topic from * favorites * * @since bbPress (r2652) * * @param mixed $args This function supports these arguments: * - subscribe: Favorite text * - unsubscribe: Unfavorite text * - user_id: User id * - topic_id: Topic id * - before: Before the link * - after: After the link * @param int $user_id Optional. User id * @param int $topic_id Optional. Topic id * @param bool $wrap Optional. If you want to wrap the link in <span id="favorite-toggle">. See ajax_favorite() * @uses bbp_get_user_id() To get the user id * @uses current_user_can() If the current user can edit the user * @uses bbp_get_topic_id() To get the topic id * @uses bbp_is_user_favorite() To check if the topic is user's favorite * @uses bbp_get_favorites_permalink() To get the favorites permalink * @uses bbp_get_topic_permalink() To get the topic permalink * @uses bbp_is_favorites() Is it the favorites page? * @uses apply_filters() Calls 'bbp_get_user_favorites_link' with the * html, add args, remove args, user & topic id * @return string User favorites link */ function stachestack_bbp_get_user_favorites_link($args = '', $user_id = 0, $wrap = true) { if (!bbp_is_favorites_active()) { return false; } // Parse arguments against default values $r = bbp_parse_args($args, array('favorite' => __('Favorite', 'bbpress'), 'favorited' => __('Favorited', 'bbpress'), 'user_id' => 0, 'topic_id' => 0, 'before' => '', 'after' => ''), 'get_user_favorites_link'); // Validate user and topic ID's $user_id = bbp_get_user_id($r['user_id'], true, true); $topic_id = bbp_get_topic_id($r['topic_id']); if (empty($user_id) || empty($topic_id)) { return false; } // No link if you can't edit yourself if (!current_user_can('edit_user', (int) $user_id)) { return false; } // Decide which link to show $is_fav = bbp_is_user_favorite($user_id, $topic_id); if (!empty($is_fav)) { $text = $r['favorited']; $query_args = array('action' => 'bbp_favorite_remove', 'topic_id' => $topic_id); } else { $text = $r['favorite']; $query_args = array('action' => 'bbp_favorite_add', 'topic_id' => $topic_id); } // Create the link based where the user is and if the topic is // already the user's favorite if (bbp_is_favorites()) { $permalink = bbp_get_favorites_permalink($user_id); } elseif (bbp_is_single_topic() || bbp_is_single_reply()) { $permalink = bbp_get_topic_permalink($topic_id); } else { $permalink = get_permalink(); } $url = esc_url(wp_nonce_url(add_query_arg($query_args, $permalink), 'toggle-favorite_' . $topic_id)); $sub = $is_fav ? ' class="is-favorite"' : ''; $html = sprintf('%s<span id="favorite-%d" %s><a href="%s" class="btn btn-success btn-xs favorite-toggle" data-topic="%d">%s</a></span>%s', $r['before'], $topic_id, $sub, $url, $topic_id, $text, $r['after']); // Initial output is wrapped in a span, ajax output is hooked to this if (!empty($wrap)) { $html = '<span id="favorite-toggle">' . $html . '</span>'; } // Return the link return apply_filters('bbp_get_user_favorites_link', $html, $r, $user_id, $topic_id); }
/** * The main topic loop. WordPress makes this easy for us * * @since 2.0.0 bbPress (r2485) * * @param array $args All the arguments supported by {@link WP_Query} * @uses current_user_can() To check if the current user can edit other's topics * @uses bbp_get_topic_post_type() To get the topic post type * @uses WP_Query To make query and get the topics * @uses is_page() To check if it's a page * @uses bbp_is_single_forum() To check if it's a forum * @uses bbp_get_forum_id() To get the forum id * @uses bbp_get_paged() To get the current page value * @uses bbp_get_super_stickies() To get the super stickies * @uses bbp_get_stickies() To get the forum stickies * @uses bbp_use_pretty_urls() To check if the site is using pretty URLs * @uses get_permalink() To get the permalink * @uses add_query_arg() To add custom args to the url * @uses apply_filters() Calls 'bbp_topics_pagination' with the pagination args * @uses paginate_links() To paginate the links * @uses apply_filters() Calls 'bbp_has_topics' with * bbPres::topic_query::have_posts() * and bbPres::topic_query * @return object Multidimensional array of topic information */ function bbp_has_topics($args = array()) { /** Defaults **************************************************************/ // Other defaults $default_topic_search = !empty($_REQUEST['ts']) ? $_REQUEST['ts'] : false; $default_show_stickies = (bool) (bbp_is_single_forum() || bbp_is_topic_archive()) && false === $default_topic_search; $default_post_parent = bbp_is_single_forum() ? bbp_get_forum_id() : 'any'; // Default argument array $default = array('post_type' => bbp_get_topic_post_type(), 'post_parent' => $default_post_parent, 'meta_key' => '_bbp_last_active_time', 'meta_type' => 'DATETIME', 'orderby' => 'meta_value', 'order' => 'DESC', 'posts_per_page' => bbp_get_topics_per_page(), 'paged' => bbp_get_paged(), 'show_stickies' => $default_show_stickies, 'max_num_pages' => false); // Only add 's' arg if searching for topics // See https://bbpress.trac.wordpress.org/ticket/2607 if (!empty($default_topic_search)) { $default['s'] = $default_topic_search; } // What are the default allowed statuses (based on user caps) if (bbp_get_view_all()) { // Default view=all statuses $post_statuses = array(bbp_get_public_status_id(), bbp_get_closed_status_id(), bbp_get_spam_status_id(), bbp_get_trash_status_id(), bbp_get_pending_status_id()); // Add support for private status if (current_user_can('read_private_topics')) { $post_statuses[] = bbp_get_private_status_id(); } // Join post statuses together $default['post_status'] = implode(',', $post_statuses); // Lean on the 'perm' query var value of 'readable' to provide statuses } else { $default['perm'] = 'readable'; } // Maybe query for topic tags if (bbp_is_topic_tag()) { $default['term'] = bbp_get_topic_tag_slug(); $default['taxonomy'] = bbp_get_topic_tag_tax_id(); } /** Setup *****************************************************************/ // Parse arguments against default values $r = bbp_parse_args($args, $default, 'has_topics'); // Get bbPress $bbp = bbpress(); // Call the query $bbp->topic_query = new WP_Query($r); // Set post_parent back to 0 if originally set to 'any' if ('any' === $r['post_parent']) { $r['post_parent'] = 0; } // Limited the number of pages shown if (!empty($r['max_num_pages'])) { $bbp->topic_query->max_num_pages = $r['max_num_pages']; } /** Stickies **************************************************************/ // Put sticky posts at the top of the posts array if (!empty($r['show_stickies']) && $r['paged'] <= 1) { // Get super stickies and stickies in this forum $stickies = bbp_get_super_stickies(); // Get stickies for current forum if (!empty($r['post_parent'])) { $stickies = array_merge($stickies, bbp_get_stickies($r['post_parent'])); } // Remove any duplicate stickies $stickies = array_unique($stickies); // We have stickies if (is_array($stickies) && !empty($stickies)) { // Start the offset at -1 so first sticky is at correct 0 offset $sticky_offset = -1; // Loop over topics and relocate stickies to the front. foreach ($stickies as $sticky_index => $sticky_ID) { // Get the post offset from the posts array $post_offsets = wp_filter_object_list($bbp->topic_query->posts, array('ID' => $sticky_ID), 'OR', 'ID'); // Continue if no post offsets if (empty($post_offsets)) { continue; } // Loop over posts in current query and splice them into position foreach (array_keys($post_offsets) as $post_offset) { $sticky_offset++; $sticky = $bbp->topic_query->posts[$post_offset]; // Remove sticky from current position array_splice($bbp->topic_query->posts, $post_offset, 1); // Move to front, after other stickies array_splice($bbp->topic_query->posts, $sticky_offset, 0, array($sticky)); // Cleanup unset($stickies[$sticky_index]); unset($sticky); } // Cleanup unset($post_offsets); } // Cleanup unset($sticky_offset); // If any posts have been excluded specifically, Ignore those that are sticky. if (!empty($stickies) && !empty($r['post__not_in'])) { $stickies = array_diff($stickies, $r['post__not_in']); } // Fetch sticky posts that weren't in the query results if (!empty($stickies)) { // Query to use in get_posts to get sticky posts $sticky_query = array('post_type' => bbp_get_topic_post_type(), 'post_parent' => 'any', 'meta_key' => '_bbp_last_active_time', 'meta_type' => 'DATETIME', 'orderby' => 'meta_value', 'order' => 'DESC', 'include' => $stickies); // Cleanup unset($stickies); // Conditionally exclude private/hidden forum ID's $exclude_forum_ids = bbp_exclude_forum_ids('array'); if (!empty($exclude_forum_ids)) { $sticky_query['post_parent__not_in'] = $exclude_forum_ids; } // What are the default allowed statuses (based on user caps) if (bbp_get_view_all()) { $sticky_query['post_status'] = $r['post_status']; // Lean on the 'perm' query var value of 'readable' to provide statuses } else { $sticky_query['post_status'] = $r['perm']; } // Get all stickies $sticky_posts = get_posts($sticky_query); if (!empty($sticky_posts)) { // Get a count of the visible stickies $sticky_count = count($sticky_posts); // Merge the stickies topics with the query topics . $bbp->topic_query->posts = array_merge($sticky_posts, $bbp->topic_query->posts); // Adjust loop and counts for new sticky positions $bbp->topic_query->found_posts = (int) $bbp->topic_query->found_posts + (int) $sticky_count; $bbp->topic_query->post_count = (int) $bbp->topic_query->post_count + (int) $sticky_count; // Cleanup unset($sticky_posts); } } } } // If no limit to posts per page, set it to the current post_count if (-1 === $r['posts_per_page']) { $r['posts_per_page'] = $bbp->topic_query->post_count; } // Add pagination values to query object $bbp->topic_query->posts_per_page = $r['posts_per_page']; $bbp->topic_query->paged = $r['paged']; // Only add pagination if query returned results if (((int) $bbp->topic_query->post_count || (int) $bbp->topic_query->found_posts) && (int) $bbp->topic_query->posts_per_page) { // Limit the number of topics shown based on maximum allowed pages if (!empty($r['max_num_pages']) && $bbp->topic_query->found_posts > $bbp->topic_query->max_num_pages * $bbp->topic_query->post_count) { $bbp->topic_query->found_posts = $bbp->topic_query->max_num_pages * $bbp->topic_query->post_count; } // If pretty permalinks are enabled, make our pagination pretty if (bbp_use_pretty_urls()) { // User's topics if (bbp_is_single_user_topics()) { $base = bbp_get_user_topics_created_url(bbp_get_displayed_user_id()); // User's favorites } elseif (bbp_is_favorites()) { $base = bbp_get_favorites_permalink(bbp_get_displayed_user_id()); // User's subscriptions } elseif (bbp_is_subscriptions()) { $base = bbp_get_subscriptions_permalink(bbp_get_displayed_user_id()); // Root profile page } elseif (bbp_is_single_user()) { $base = bbp_get_user_profile_url(bbp_get_displayed_user_id()); // View } elseif (bbp_is_single_view()) { $base = bbp_get_view_url(); // Topic tag } elseif (bbp_is_topic_tag()) { $base = bbp_get_topic_tag_link(); // Page or single post } elseif (is_page() || is_single()) { $base = get_permalink(); // Forum archive } elseif (bbp_is_forum_archive()) { $base = bbp_get_forums_url(); // Topic archive } elseif (bbp_is_topic_archive()) { $base = bbp_get_topics_url(); // Default } else { $base = get_permalink((int) $r['post_parent']); } // Use pagination base $base = trailingslashit($base) . user_trailingslashit(bbp_get_paged_slug() . '/%#%/'); // Unpretty pagination } else { $base = add_query_arg('paged', '%#%'); } // Pagination settings with filter $bbp_topic_pagination = apply_filters('bbp_topic_pagination', array('base' => $base, 'format' => '', 'total' => $r['posts_per_page'] === $bbp->topic_query->found_posts ? 1 : ceil((int) $bbp->topic_query->found_posts / (int) $r['posts_per_page']), 'current' => (int) $bbp->topic_query->paged, 'prev_text' => is_rtl() ? '→' : '←', 'next_text' => is_rtl() ? '←' : '→', 'mid_size' => 1)); // Add pagination to query object $bbp->topic_query->pagination_links = paginate_links($bbp_topic_pagination); // Remove first page from pagination $bbp->topic_query->pagination_links = str_replace(bbp_get_paged_slug() . "/1/'", "'", $bbp->topic_query->pagination_links); } // Return object return apply_filters('bbp_has_topics', $bbp->topic_query->have_posts(), $bbp->topic_query); }
/** * Use the above is_() functions to return if in any bbPress page * * @since bbPress (r3344) * * @uses bbp_is_single_forum() * @uses bbp_is_single_topic() * @uses bbp_is_topic_edit() * @uses bbp_is_topic_merge() * @uses bbp_is_topic_split() * @uses bbp_is_single_reply() * @uses bbp_is_reply_edit() * @uses bbp_is_reply_edit() * @uses bbp_is_single_view() * @uses bbp_is_single_user_edit() * @uses bbp_is_single_user() * @uses bbp_is_user_home() * @uses bbp_is_subscriptions() * @uses bbp_is_favorites() * @uses bbp_is_topics_created() * @return bool In a bbPress page */ function is_bbpress() { // Defalt to false $retval = false; /** Archives **************************************************************/ if (bbp_is_forum_archive()) { $retval = true; } elseif (bbp_is_topic_archive()) { $retval = true; } elseif (bbp_is_topic_tag()) { $retval = true; } elseif (bbp_is_topic_tag_edit()) { $retval = true; } elseif (bbp_is_single_forum()) { $retval = true; } elseif (bbp_is_single_topic()) { $retval = true; } elseif (bbp_is_single_reply()) { $retval = true; } elseif (bbp_is_topic_edit()) { $retval = true; } elseif (bbp_is_topic_merge()) { $retval = true; } elseif (bbp_is_topic_split()) { $retval = true; } elseif (bbp_is_reply_edit()) { $retval = true; } elseif (bbp_is_single_view()) { $retval = true; } elseif (bbp_is_single_user_edit()) { $retval = true; } elseif (bbp_is_single_user()) { $retval = true; } elseif (bbp_is_user_home()) { $retval = true; } elseif (bbp_is_user_home_edit()) { $retval = true; } elseif (bbp_is_topics_created()) { $retval = true; } elseif (bbp_is_favorites()) { $retval = true; } elseif (bbp_is_subscriptions()) { $retval = true; } /** Done ******************************************************************/ return (bool) apply_filters('is_bbpress', $retval); }
/** * Handles the front end adding and removing of favorite topics * * @uses bbp_get_user_id() To get the user id * @uses bbp_verify_nonce_request() To verify the nonce and check the request * @uses current_user_can() To check if the current user can edit the user * @uses bbPress:errors:add() To log the error messages * @uses bbp_is_user_favorite() To check if the topic is in user's favorites * @uses bbp_remove_user_favorite() To remove the user favorite * @uses bbp_add_user_favorite() To add the user favorite * @uses do_action() Calls 'bbp_favorites_handler' with success, user id, topic * id and action * @uses bbp_is_favorites() To check if it's the favorites page * @uses bbp_get_favorites_link() To get the favorites page link * @uses bbp_get_topic_permalink() To get the topic permalink * @uses wp_safe_redirect() To redirect to the url */ function bbp_favorites_handler() { if (!bbp_is_favorites_active()) { return false; } // Bail if not a GET action if ('GET' !== strtoupper($_SERVER['REQUEST_METHOD'])) { return; } // Bail if required GET actions aren't passed if (empty($_GET['topic_id']) || empty($_GET['action'])) { return; } // Setup possible get actions $possible_actions = array('bbp_favorite_add', 'bbp_favorite_remove'); // Bail if actions aren't meant for this function if (!in_array($_GET['action'], $possible_actions)) { return; } // What action is taking place? $action = $_GET['action']; $topic_id = intval($_GET['topic_id']); $user_id = bbp_get_user_id(0, true, true); // Check for empty topic if (empty($topic_id)) { bbp_add_error('bbp_favorite_topic_id', __('<strong>ERROR</strong>: No topic was found! Which topic are you marking/unmarking as favorite?', 'bbpress')); // Check nonce } elseif (!bbp_verify_nonce_request('toggle-favorite_' . $topic_id)) { bbp_add_error('bbp_favorite_nonce', __('<strong>ERROR</strong>: Are you sure you wanted to do that?', 'bbpress')); // Check current user's ability to edit the user } elseif (!current_user_can('edit_user', $user_id)) { bbp_add_error('bbp_favorite_permissions', __('<strong>ERROR</strong>: You don\'t have the permission to edit favorites of that user!', 'bbpress')); } // Bail if errors if (bbp_has_errors()) { return; } /** No errors *************************************************************/ $is_favorite = bbp_is_user_favorite($user_id, $topic_id); $success = false; if (true == $is_favorite && 'bbp_favorite_remove' == $action) { $success = bbp_remove_user_favorite($user_id, $topic_id); } elseif (false == $is_favorite && 'bbp_favorite_add' == $action) { $success = bbp_add_user_favorite($user_id, $topic_id); } // Do additional favorites actions do_action('bbp_favorites_handler', $success, $user_id, $topic_id, $action); // Success! if (true == $success) { // Redirect back from whence we came if (bbp_is_favorites()) { $redirect = bbp_get_favorites_permalink($user_id); } elseif (bbp_is_single_user()) { $redirect = bbp_get_user_profile_url(); } elseif (is_singular(bbp_get_topic_post_type())) { $redirect = bbp_get_topic_permalink($topic_id); } elseif (is_single() || is_page()) { $redirect = get_permalink(); } wp_safe_redirect($redirect); // For good measure exit; // Fail! Handle errors } elseif (true == $is_favorite && 'bbp_favorite_remove' == $action) { bbp_add_error('bbp_favorite_remove', __('<strong>ERROR</strong>: There was a problem removing that topic from favorites!', 'bbpress')); } elseif (false == $is_favorite && 'bbp_favorite_add' == $action) { bbp_add_error('bbp_favorite_add', __('<strong>ERROR</strong>: There was a problem favoriting that topic!', 'bbpress')); } }
<?php bbp_get_template_part('loop', 'single-topic'); ?> <?php } ?> </li> <li class="bbp-footer"> <div class="tr"> <p> <span class="td colspan<?php echo bbp_is_user_home() && (bbp_is_favorites() || bbp_is_subscriptions()) ? '5' : '4'; ?> "> </span> </p> </div><!-- .tr --> </li> </ul><!-- #bbp-forum-<?php bbp_forum_id(); ?> --> <?php do_action('bbp_template_after_topics_loop');
/** * Custom page title for bbPress pages * * @since bbPress (r2788) * * @param string $title Optional. The title (not used). * @param string $sep Optional, default is '»'. How to separate the * various items within the page title. * @param string $seplocation Optional. Direction to display title, 'right'. * @uses bbp_is_single_user() To check if it's a user profile page * @uses bbp_is_single_user_edit() To check if it's a user profile edit page * @uses bbp_is_user_home() To check if the profile page is of the current user * @uses get_query_var() To get the user id * @uses get_userdata() To get the user data * @uses bbp_is_single_forum() To check if it's a forum * @uses bbp_get_forum_title() To get the forum title * @uses bbp_is_single_topic() To check if it's a topic * @uses bbp_get_topic_title() To get the topic title * @uses bbp_is_single_reply() To check if it's a reply * @uses bbp_get_reply_title() To get the reply title * @uses is_tax() To check if it's the tag page * @uses get_queried_object() To get the queried object * @uses bbp_is_single_view() To check if it's a view * @uses bbp_get_view_title() To get the view title * @uses apply_filters() Calls 'bbp_raw_title' with the title * @uses apply_filters() Calls 'bbp_profile_page_wp_title' with the title, * separator and separator location * @return string The tite */ function bbp_title($title = '', $sep = '»', $seplocation = '') { // Title array $new_title = array(); /** Archives **************************************************************/ // Forum Archive if (bbp_is_forum_archive()) { $new_title['text'] = bbp_get_forum_archive_title(); // Topic Archive } elseif (bbp_is_topic_archive()) { $new_title['text'] = bbp_get_topic_archive_title(); /** Edit ******************************************************************/ // Forum edit page } elseif (bbp_is_forum_edit()) { $new_title['text'] = bbp_get_forum_title(); $new_title['format'] = esc_attr__('Forum Edit: %s', 'bbpress'); // Topic edit page } elseif (bbp_is_topic_edit()) { $new_title['text'] = bbp_get_topic_title(); $new_title['format'] = esc_attr__('Topic Edit: %s', 'bbpress'); // Reply edit page } elseif (bbp_is_reply_edit()) { $new_title['text'] = bbp_get_reply_title(); $new_title['format'] = esc_attr__('Reply Edit: %s', 'bbpress'); // Topic tag edit page } elseif (bbp_is_topic_tag_edit()) { $new_title['text'] = bbp_get_topic_tag_name(); $new_title['format'] = esc_attr__('Topic Tag Edit: %s', 'bbpress'); /** Singles ***************************************************************/ // Forum page } elseif (bbp_is_single_forum()) { $new_title['text'] = bbp_get_forum_title(); $new_title['format'] = esc_attr__('Forum: %s', 'bbpress'); // Topic page } elseif (bbp_is_single_topic()) { $new_title['text'] = bbp_get_topic_title(); $new_title['format'] = esc_attr__('Topic: %s', 'bbpress'); // Replies } elseif (bbp_is_single_reply()) { $new_title['text'] = bbp_get_reply_title(); // Topic tag page } elseif (bbp_is_topic_tag() || get_query_var('bbp_topic_tag')) { $new_title['text'] = bbp_get_topic_tag_name(); $new_title['format'] = esc_attr__('Topic Tag: %s', 'bbpress'); /** Users *****************************************************************/ // Profile page } elseif (bbp_is_single_user()) { // User is viewing their own profile if (bbp_is_user_home()) { $new_title['text'] = esc_attr_x('Your', 'User viewing his/her own profile', 'bbpress'); // User is viewing someone else's profile (so use their display name) } else { $new_title['text'] = sprintf(esc_attr_x("%s's", 'User viewing another users profile', 'bbpress'), get_userdata(bbp_get_user_id())->display_name); } // User topics created if (bbp_is_single_user_topics()) { $new_title['format'] = esc_attr__("%s Topics", 'bbpress'); // User rueplies created } elseif (bbp_is_single_user_replies()) { $new_title['format'] = esc_attr__("%s Replies", 'bbpress'); // User favorites } elseif (bbp_is_favorites()) { $new_title['format'] = esc_attr__("%s Favorites", 'bbpress'); // User subscriptions } elseif (bbp_is_subscriptions()) { $new_title['format'] = esc_attr__("%s Subscriptions", 'bbpress'); // User "home" } else { $new_title['format'] = esc_attr__("%s Profile", 'bbpress'); } // Profile edit page } elseif (bbp_is_single_user_edit()) { // Current user if (bbp_is_user_home_edit()) { $new_title['text'] = esc_attr__('Edit Your Profile', 'bbpress'); // Other user } else { $new_title['text'] = get_userdata(bbp_get_user_id())->display_name; $new_title['format'] = esc_attr__("Edit %s's Profile", 'bbpress'); } /** Views *****************************************************************/ // Views } elseif (bbp_is_single_view()) { $new_title['text'] = bbp_get_view_title(); $new_title['format'] = esc_attr__('View: %s', 'bbpress'); /** Search ****************************************************************/ // Search } elseif (bbp_is_search()) { $new_title['text'] = bbp_get_search_title(); } // This filter is deprecated. Use 'bbp_before_title_parse_args' instead. $new_title = apply_filters('bbp_raw_title_array', $new_title); // Set title array defaults $new_title = bbp_parse_args($new_title, array('text' => $title, 'format' => '%s'), 'title'); // Get the formatted raw title $new_title = sprintf($new_title['format'], $new_title['text']); // Filter the raw title $new_title = apply_filters('bbp_raw_title', $new_title, $sep, $seplocation); // Compare new title with original title if ($new_title === $title) { return $title; } // Temporary separator, for accurate flipping, if necessary $t_sep = '%WP_TITILE_SEP%'; $prefix = ''; if (!empty($new_title)) { $prefix = " {$sep} "; } // sep on right, so reverse the order if ('right' === $seplocation) { $new_title_array = array_reverse(explode($t_sep, $new_title)); $new_title = implode(" {$sep} ", $new_title_array) . $prefix; // sep on left, do not reverse } else { $new_title_array = explode($t_sep, $new_title); $new_title = $prefix . implode(" {$sep} ", $new_title_array); } // Filter and return return apply_filters('bbp_title', $new_title, $sep, $seplocation); }
<?php get_header(); $cb_user_page = NULL; global $bb_current_user; $cb_breadcrumbs = ot_get_option('cb_breadcrumbs', 'on'); $cb_theme_style = ot_get_option('cb_theme_style', 'cb_boxed'); $cb_bbpress_sidebar = ot_get_option('cb_bbpress_sidebar', 'sidebar'); $cb_bbpress_global_color = ot_get_option('cb_bbpress_global_color', '#eb9812'); $cb_current_user = bbp_get_user_id(); $cb_forum_id = bbp_get_forum_id(); $cb_title = get_the_title(); if (bbp_is_single_user() == true || bbp_is_favorites() == true) { $cb_title = '<h1 id="cb-cat-title"><span>' . __('Member', 'cubell') . ' <i class="icon-long-arrow-right"></i></span> ' . get_the_title() . '</h1>'; $cb_user_page = 'cb-author-page '; } $cb_sidebar_position = NULL; if ($cb_bbpress_sidebar == 'sidebar_left') { $cb_sidebar_position = ' cb-sidebar-left '; } elseif ($cb_bbpress_sidebar == 'nosidebar') { $cb_sidebar_position = ' cb-full-width'; } ?> <div id="cb-content" class="<?php if ($cb_user_page != NULL) { echo $cb_user_page; } ?> wrap clearfix">
/** * Displays the output, the login form * * @since bbPress (r2827) * * @param mixed $args Arguments * @param array $instance Instance * @uses apply_filters() Calls 'bbp_login_widget_title' with the title * @uses get_template_part() To get the login/logged in form */ public function widget($args = array(), $instance = array()) { // Get widget settings $settings = $this->parse_settings($instance); // Typical WordPress filter $settings['title'] = apply_filters('widget_title', $settings['title'], $instance, $this->id_base); // bbPress filters $settings['title'] = apply_filters('bbp_login_widget_title', $settings['title'], $instance, $this->id_base); $settings['register'] = apply_filters('bbp_login_widget_register', $settings['register'], $instance, $this->id_base); $settings['lostpass'] = apply_filters('bbp_login_widget_lostpass', $settings['lostpass'], $instance, $this->id_base); echo $args['before_widget']; if (!empty($settings['title'])) { echo $args['before_title'] . $settings['title'] . $args['after_title']; } if (!is_user_logged_in()) { ?> <form method="post" action="<?php bbp_wp_login_action(array('context' => 'login_post')); ?> " class="bbp-login-form"> <fieldset> <legend><?php _e('Log In', 'bbpress'); ?> </legend> <div class="bbp-username form-group"> <label for="user_login" class="sr-only"><?php _e('Username', 'bbpress'); ?> : </label> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon ipt-icomoon-user"></span> </span> <input placeholder="<?php _e('Username', 'bbpress'); ?> " class="form-control" type="text" name="log" value="<?php bbp_sanitize_val('user_login', 'text'); ?> " size="20" id="user_login" tabindex="<?php bbp_tab_index(); ?> " /> </div> </div> <div class="bbp-password form-group"> <label for="user_pass" class="sr-only"><?php _e('Password', 'bbpress'); ?> : </label> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon ipt-icomoon-console"></span> </span> <input placeholder="<?php _e('Password', 'bbpress'); ?> " class="form-control" type="password" name="pwd" value="<?php bbp_sanitize_val('user_pass', 'password'); ?> " size="20" id="user_pass" tabindex="<?php bbp_tab_index(); ?> " /> </div> </div> <?php do_action('login_form'); ?> <div class="bbp-remember-me checkbox"> <input type="checkbox" name="rememberme" value="forever" <?php checked(bbp_get_sanitize_val('rememberme', 'checkbox'), true, true); ?> id="rememberme" tabindex="<?php bbp_tab_index(); ?> " /> <label for="rememberme"><?php _e('Remember Me', 'bbpress'); ?> </label> </div> <div class="bbp-submit-wrapper btn-group"> <?php if (!empty($settings['lostpass'])) { ?> <a href="<?php echo esc_url($settings['lostpass']); ?> " title="<?php esc_attr_e('Lost Password', 'bbpress'); ?> " class="bbp-lostpass-link btn btn-default"><span class="glyphicon ipt-icomoon-info"></span></a> <?php } ?> <?php if (!empty($settings['register'])) { ?> <a href="<?php echo esc_url($settings['register']); ?> " title="<?php esc_attr_e('Register', 'bbpress'); ?> " class="bbp-register-link btn btn-default"><span class="glyphicon ipt-icomoon-signup"></span> <?php _e('Register', 'bbpress'); ?> </a> <?php } ?> <button class="btn btn-primary" type="submit" name="user-submit" id="user-submit" tabindex="<?php bbp_tab_index(); ?> " class="button submit user-submit"><span class="glyphicon ipt-icomoon-switch"></span> <?php _e('Log In', 'bbpress'); ?> </button> </div> <?php bbp_user_login_fields(); ?> </fieldset> </form> <?php } else { ?> <div class="bbp-logged-in"> <a href="<?php bbp_user_profile_url(bbp_get_current_user_id()); ?> " class="submit user-submit thumbnail pull-left"><?php echo get_avatar(bbp_get_current_user_id(), '64'); ?> </a> <h4><?php bbp_user_profile_link(bbp_get_current_user_id()); ?> </h4> <div class="btn-group"> <a class="btn btn-default btn-sm" href="<?php bbp_user_profile_edit_url(bbp_get_current_user_id()); ?> " title="<?php printf(esc_attr__("Edit Your Profile", 'ipt_kb')); ?> "><span class="glyphicon glyphicon-edit"></span> <?php _e('Edit', 'bbpress'); ?> </a> <?php bbp_logout_link(); ?> </div> <div class="clearfix"></div> <div class="list-group"> <a href="<?php bbp_user_profile_url(bbp_get_current_user_id()); ?> " class="list-group-item bbp-user-forum-role <?php if (bbp_is_user_home() && bbp_is_single_user_profile()) { echo 'active'; } ?> "> <span class="glyphicon ipt-icomoon-user4"></span> <?php printf(__('%s Forum Role', 'ipt_kb'), '<span class="badge">' . bbp_get_user_display_role(bbp_get_current_user_id()) . '</span>'); ?> </a> <a href="<?php bbp_user_topics_created_url(bbp_get_current_user_id()); ?> " class="list-group-item bbp-user-topic-count <?php if (bbp_is_user_home() && bbp_is_single_user_topics()) { echo 'active'; } ?> "> <span class="glyphicon ipt-icomoon-bubbles4"></span> <?php printf(__('%s Topics Started', 'ipt_kb'), '<span class="badge">' . bbp_get_user_topic_count_raw(bbp_get_current_user_id()) . '</span>'); ?> </a> <a href="<?php bbp_user_replies_created_url(bbp_get_current_user_id()); ?> " class="list-group-item bbp-user-reply-count <?php if (bbp_is_user_home() && bbp_is_single_user_replies()) { echo 'active'; } ?> "> <span class="glyphicon ipt-icomoon-reply"></span> <?php printf(__('%s Replies Created', 'ipt_kb'), '<span class="badge">' . bbp_get_user_reply_count_raw(bbp_get_current_user_id()) . '</span>'); ?> </a> <?php if (bbp_is_favorites_active()) { ?> <a href="<?php bbp_favorites_permalink(bbp_get_current_user_id()); ?> " class="list-group-item bbp-user-favorite-count <?php if (bbp_is_user_home() && bbp_is_favorites()) { echo 'active'; } ?> " title="<?php printf(esc_attr__("Your Favorites", 'ipt_kb')); ?> "> <span class="glyphicon ipt-icomoon-heart"></span> <?php printf(__('%s Favorites', 'ipt_kb'), '<span class="badge">' . count(bbp_get_user_favorites_topic_ids(bbp_get_current_user_id())) . '</span>'); ?> </a> <?php } ?> <?php if (bbp_is_subscriptions_active()) { ?> <a href="<?php bbp_subscriptions_permalink(bbp_get_current_user_id()); ?> " class="list-group-item bbp-user-subscribe-count <?php if (bbp_is_user_home() && bbp_is_subscriptions()) { echo 'active'; } ?> " title="<?php printf(esc_attr__("Your Subscriptions", 'ipt_kb')); ?> "> <span class="glyphicon ipt-icomoon-bookmarks"></span> <?php printf(__('%s Subscriptions', 'ipt_kb'), '<span class="badge">' . count(bbp_get_user_subscribed_topic_ids(bbp_get_current_user_id())) . '</span>'); ?> </a> <?php } ?> </div> </div> <?php } echo $args['after_widget']; }
/** * User favorites link * * Return the link to make a topic favorite/remove a topic from * favorites * * @since bbPress (r2652) * * @param array $add Optional. Add to favorites args * @param array $rem Optional. Remove from favorites args * @param int $user_id Optional. User id * @param int $topic_id Optional. Topic id * @uses bbp_get_user_id() To get the user id * @uses current_user_can() If the current user can edit the user * @uses bbp_get_topic_id() To get the topic id * @uses bbp_is_user_favorite() To check if the topic is user's favorite * @uses bbp_get_favorites_permalink() To get the favorites permalink * @uses bbp_get_topic_permalink() To get the topic permalink * @uses bbp_is_favorites() Is it the favorites page? * @uses apply_filters() Calls 'bbp_get_user_favorites_link' with the * html, add args, remove args, user & topic id * @return string User favorites link */ function bbp_get_user_favorites_link($add = array(), $rem = array(), $user_id = 0, $topic_id = 0) { if (!bbp_is_favorites_active()) { return false; } // Validate user and topic ID's $user_id = bbp_get_user_id($user_id, true, true); $topic_id = bbp_get_topic_id($topic_id); if (empty($user_id) || empty($topic_id)) { return false; } if (!current_user_can('edit_user', (int) $user_id)) { return false; } if (empty($add) || !is_array($add)) { $add = array('mid' => __('Add this topic to your favorites', 'bbpress'), 'post' => __(' (%?%)', 'bbpress')); } if (empty($rem) || !is_array($rem)) { $rem = array('pre' => __('This topic is one of your %favorites% [', 'bbpress'), 'mid' => __('×', 'bbpress'), 'post' => __(']', 'bbpress')); } $is_fav = bbp_is_user_favorite($user_id, $topic_id); if (!empty($is_fav)) { $url = esc_url(bbp_get_favorites_permalink($user_id)); $rem = preg_replace('|%(.+)%|', "<a href='{$url}'>\$1</a>", $rem); $favs = array('action' => 'bbp_favorite_remove', 'topic_id' => $topic_id); $pre = is_array($rem) && isset($rem['pre']) ? $rem['pre'] : ''; $mid = is_array($rem) && isset($rem['mid']) ? $rem['mid'] : (is_string($rem) ? $rem : ''); $_post = is_array($rem) && isset($rem['post']) ? $rem['post'] : ''; } else { $url = esc_url(bbp_get_favorites_permalink($user_id)); $add = preg_replace('|%(.+)%|', "<a href='{$url}'>\$1</a>", $add); $favs = array('action' => 'bbp_favorite_add', 'topic_id' => $topic_id); $pre = is_array($add) && isset($add['pre']) ? $add['pre'] : ''; $mid = is_array($add) && isset($add['mid']) ? $add['mid'] : (is_string($add) ? $add : ''); $_post = is_array($add) && isset($add['post']) ? $add['post'] : ''; } // Create the link based where the user is and if the topic is // already the user's favorite if (bbp_is_favorites()) { $permalink = bbp_get_favorites_permalink($user_id); } elseif (is_singular(bbp_get_topic_post_type())) { $permalink = bbp_get_topic_permalink($topic_id); } elseif (is_singular(bbp_get_reply_post_type())) { $permalink = bbp_get_topic_permalink($topic_id); } elseif (bbp_is_query_name('bbp_single_topic')) { $permalink = get_permalink(); } $url = esc_url(wp_nonce_url(add_query_arg($favs, $permalink), 'toggle-favorite_' . $topic_id)); $is_fav = $is_fav ? 'is-favorite' : ''; $html = '<span id="favorite-toggle"><span id="favorite-' . $topic_id . '" class="' . $is_fav . '">' . $pre . '<a href="' . $url . '" class="dim:favorite-toggle:favorite-' . $topic_id . ':is-favorite">' . $mid . '</a>' . $_post . '</span></span>'; // Return the link return apply_filters('bbp_get_user_favorites_link', $html, $add, $rem, $user_id, $topic_id); }
function cb_bbp_author_details($cb_author_id, $cb_desc = true) { $cb_author_email = get_the_author_meta('publicemail', $cb_author_id); $cb_author_name = get_the_author_meta('display_name', $cb_author_id); $cb_author_position = get_the_author_meta('position', $cb_author_id); $cb_author_tw = get_the_author_meta('twitter', $cb_author_id); $cb_author_go = get_the_author_meta('googleplus', $cb_author_id); $cb_author_www = get_the_author_meta('url', $cb_author_id); $cb_author_desc = get_the_author_meta('description', $cb_author_id); $cb_author_posts = count_user_posts($cb_author_id); $cb_author_output = NULL; $cb_author_output .= '<div class="cb-author-details cb-bbp clearfix"><div class="cb-mask"><a href="' . bbp_get_user_profile_url() . '" title="' . bbp_get_displayed_user_field('display_name') . '" rel="me">' . get_avatar(bbp_get_displayed_user_field('user_email', 'raw'), apply_filters('bbp_single_user_details_avatar_size', 150)) . '</a></div><div class="cb-meta"><h3><a href="' . bbp_get_user_profile_url() . '" title="' . bbp_get_displayed_user_field('display_name') . '">' . $cb_author_name . '</a></h3>'; if ($cb_author_position != NULL) { $cb_author_output .= '<div class="cb-author-position">' . $cb_author_position . '</div>'; } if ($cb_author_desc != NULL && $cb_desc == true) { $cb_author_output .= '<p class="cb-author-bio">' . $cb_author_desc . '</p>'; } if ($cb_author_email != NULL || $cb_author_www != NULL || $cb_author_tw != NULL || $cb_author_go != NULL) { $cb_author_output .= '<div class="cb-author-page-contact">'; } if ($cb_author_email != NULL) { $cb_author_output .= '<a href="mailto:' . $cb_author_email . '"><i class="icon-envelope-alt cb-tip-bot" title="' . __('Email', 'cubell') . '"></i></a>'; } if ($cb_author_www != NULL) { $cb_author_output .= ' <a href="' . $cb_author_www . '" target="_blank"><i class="icon-link cb-tip-bot" title="' . __('Website', 'cubell') . '"></i></a> '; } if ($cb_author_tw != NULL) { $cb_author_output .= ' <a href="//www.twitter.com/' . $cb_author_tw . '" target="_blank" ><i class="icon-twitter cb-tip-bot" title="Twitter"></i></a>'; } if ($cb_author_go != NULL) { $cb_author_output .= ' <a href="' . $cb_author_go . '" rel="publisher" target="_top" title="Google+" class="cb-googleplus cb-tip-bot" ><img src="//ssl.gstatic.com/images/icons/gplus-32.png" data-src-retina="//ssl.gstatic.com/images/icons/gplus-64.png" alt="Google+" ></a>'; } if ($cb_author_email != NULL || $cb_author_www != NULL || $cb_author_go != NULL || $cb_author_tw != NULL) { $cb_author_output .= '</div>'; } $cb_author_output .= '<div id="cb-user-nav"><ul>'; if (bbp_is_single_user_replies()) { $cb_user_current = 'current'; } $cb_author_output .= '<li class="'; if (bbp_is_single_user_topics()) { $cb_author_output .= 'current'; } $cb_author_output .= '"><span class="bbp-user-topics-created-link"><a href="' . bbp_get_user_topics_created_url() . '">' . __('Topics Started', 'bbpress') . '</a></span></li>'; $cb_author_output .= '<li class="'; if (bbp_is_single_user_replies()) { $cb_author_output .= 'current'; } $cb_author_output .= '"><span class="bbp-user-replies-created-link"><a href="' . bbp_get_user_replies_created_url() . '">' . __('Replies Created', 'bbpress') . '</a></span></li>'; if (bbp_is_favorites_active()) { $cb_author_output .= '<li class="'; if (bbp_is_favorites()) { $cb_author_output .= 'current'; } $cb_author_output .= '"><span class="bbp-user-favorites-link"><a href="' . bbp_get_favorites_permalink() . '">' . __('Favorites', 'bbpress') . '</a></span></li>'; } if (bbp_is_user_home() || current_user_can('edit_users')) { if (bbp_is_subscriptions_active()) { $cb_author_output .= '<li class="'; if (bbp_is_subscriptions()) { $cb_author_output .= 'current'; } $cb_author_output .= '"><span class="bbp-user-subscriptions-link"><a href="' . bbp_get_subscriptions_permalink() . '">' . __('Subscriptions', 'bbpress') . '</a></span></li>'; } $cb_author_output .= '<li class="'; if (bbp_is_single_user_edit()) { $cb_author_output .= 'current'; } $cb_author_output .= '"><span class="bbp-user-edit-link"><a href="' . bbp_get_user_profile_edit_url() . '">' . __('Edit', 'bbpress') . '</a></span></li>'; } $cb_author_output .= '</ul></div><!-- #cb-user-nav -->'; $cb_author_output .= '</div></div>'; return $cb_author_output; }
/** * The main topic loop. WordPress makes this easy for us * * @since bbPress (r2485) * * @param mixed $args All the arguments supported by {@link WP_Query} * @uses current_user_can() To check if the current user can edit other's topics * @uses bbp_get_topic_post_type() To get the topic post type * @uses WP_Query To make query and get the topics * @uses is_page() To check if it's a page * @uses bbp_is_single_forum() To check if it's a forum * @uses bbp_get_forum_id() To get the forum id * @uses bbp_get_paged() To get the current page value * @uses bbp_get_super_stickies() To get the super stickies * @uses bbp_get_stickies() To get the forum stickies * @uses wpdb::get_results() To execute our query and get the results * @uses WP_Rewrite::using_permalinks() To check if the blog is using permalinks * @uses get_permalink() To get the permalink * @uses add_query_arg() To add custom args to the url * @uses apply_filters() Calls 'bbp_topics_pagination' with the pagination args * @uses paginate_links() To paginate the links * @uses apply_filters() Calls 'bbp_has_topics' with * bbPres::topic_query::have_posts() * and bbPres::topic_query * @return object Multidimensional array of topic information */ function bbp_has_topics($args = '') { global $wp_rewrite; // What are the default allowed statuses (based on user caps) if (bbp_get_view_all()) { $post_statuses = array(bbp_get_public_status_id(), bbp_get_closed_status_id(), bbp_get_spam_status_id(), bbp_get_trash_status_id()); } else { $post_statuses = array(bbp_get_public_status_id(), bbp_get_closed_status_id()); } $default_topic_search = !empty($_REQUEST['ts']) ? $_REQUEST['ts'] : false; $default_show_stickies = (bool) (bbp_is_single_forum() || bbp_is_topic_archive()) && false === $default_topic_search; $default_post_parent = bbp_is_single_forum() ? bbp_get_forum_id() : 'any'; $default_post_status = join(',', $post_statuses); // Default argument array $default = array('post_type' => bbp_get_topic_post_type(), 'post_parent' => $default_post_parent, 'post_status' => $default_post_status, 'meta_key' => '_bbp_last_active_time', 'orderby' => 'meta_value', 'order' => 'DESC', 'posts_per_page' => bbp_get_topics_per_page(), 'paged' => bbp_get_paged(), 's' => $default_topic_search, 'show_stickies' => $default_show_stickies, 'max_num_pages' => false); // Maybe query for topic tags if (bbp_is_topic_tag()) { $default['term'] = bbp_get_topic_tag_slug(); $default['taxonomy'] = bbp_get_topic_tag_tax_id(); } $bbp_t = bbp_parse_args($args, $default, 'has_topics'); // Extract the query variables extract($bbp_t); // Get bbPress $bbp = bbpress(); // Call the query $bbp->topic_query = new WP_Query($bbp_t); // Set post_parent back to 0 if originally set to 'any' if ('any' == $bbp_t['post_parent']) { $bbp_t['post_parent'] = $post_parent = 0; } // Limited the number of pages shown if (!empty($max_num_pages)) { $bbp->topic_query->max_num_pages = $max_num_pages; } // Put sticky posts at the top of the posts array if (!empty($show_stickies) && $paged <= 1) { // Get super stickies and stickies in this forum $stickies = bbp_get_super_stickies(); $stickies = !empty($post_parent) ? array_merge($stickies, bbp_get_stickies($post_parent)) : $stickies; $stickies = array_unique($stickies); // We have stickies if (is_array($stickies) && !empty($stickies)) { // Setup the number of stickies and reset offset to 0 $num_topics = count($bbp->topic_query->posts); $sticky_offset = 0; // Loop over topics and relocate stickies to the front. for ($i = 0; $i < $num_topics; $i++) { if (in_array($bbp->topic_query->posts[$i]->ID, $stickies)) { $sticky = $bbp->topic_query->posts[$i]; // Remove sticky from current position array_splice($bbp->topic_query->posts, $i, 1); // Move to front, after other stickies array_splice($bbp->topic_query->posts, $sticky_offset, 0, array($sticky)); // Increment the sticky offset. The next sticky will be placed at this offset. $sticky_offset++; // Remove post from sticky posts array $offset = array_search($sticky->ID, $stickies); // Cleanup unset($stickies[$offset]); unset($sticky); } } // If any posts have been excluded specifically, Ignore those that are sticky. if (!empty($stickies) && !empty($post__not_in)) { $stickies = array_diff($stickies, $post__not_in); } // Fetch sticky posts that weren't in the query results if (!empty($stickies)) { // Query to use in get_posts to get sticky posts $sticky_query = array('post_type' => bbp_get_topic_post_type(), 'post_parent' => 'any', 'post_status' => $default_post_status, 'meta_key' => '_bbp_last_active_time', 'orderby' => 'meta_value', 'order' => 'DESC', 'include' => $stickies); // Get all stickies $sticky_posts = get_posts($sticky_query); if (!empty($sticky_posts)) { // Get a count of the visible stickies $sticky_count = count($sticky_posts); // Loop through stickies and add them to beginning of array foreach ($sticky_posts as $sticky) { $topics[] = $sticky; } // Loop through topics and add them to end of array foreach ($bbp->topic_query->posts as $topic) { $topics[] = $topic; } // Adjust loop and counts for new sticky positions $bbp->topic_query->posts = $topics; $bbp->topic_query->found_posts = (int) $bbp->topic_query->found_posts + (int) $sticky_count; $bbp->topic_query->post_count = (int) $bbp->topic_query->post_count + (int) $sticky_count; // Cleanup unset($topics); unset($stickies); unset($sticky_posts); } } } } // If no limit to posts per page, set it to the current post_count if (-1 == $posts_per_page) { $posts_per_page = $bbp->topic_query->post_count; } // Add pagination values to query object $bbp->topic_query->posts_per_page = $posts_per_page; $bbp->topic_query->paged = $paged; // Only add pagination if query returned results if (((int) $bbp->topic_query->post_count || (int) $bbp->topic_query->found_posts) && (int) $bbp->topic_query->posts_per_page) { // Limit the number of topics shown based on maximum allowed pages if (!empty($max_num_pages) && $bbp->topic_query->found_posts > $bbp->topic_query->max_num_pages * $bbp->topic_query->post_count) { $bbp->topic_query->found_posts = $bbp->topic_query->max_num_pages * $bbp->topic_query->post_count; } // If pretty permalinks are enabled, make our pagination pretty if ($wp_rewrite->using_permalinks()) { // User's topics if (bbp_is_single_user_topics()) { $base = bbp_get_user_topics_created_url(bbp_get_displayed_user_id()); // User's favorites } elseif (bbp_is_favorites()) { $base = bbp_get_favorites_permalink(bbp_get_displayed_user_id()); // User's subscriptions } elseif (bbp_is_subscriptions()) { $base = bbp_get_subscriptions_permalink(bbp_get_displayed_user_id()); // Root profile page } elseif (bbp_is_single_user()) { $base = bbp_get_user_profile_url(bbp_get_displayed_user_id()); // View } elseif (bbp_is_single_view()) { $base = bbp_get_view_url(); // Topic tag } elseif (bbp_is_topic_tag()) { $base = bbp_get_topic_tag_link(); // Page or single post } elseif (is_page() || is_single()) { $base = get_permalink(); // Topic archive } elseif (bbp_is_topic_archive()) { $base = bbp_get_topics_url(); // Default } else { $base = get_permalink($post_parent); } // Use pagination base $base = trailingslashit($base) . user_trailingslashit($wp_rewrite->pagination_base . '/%#%/'); // Unpretty pagination } else { $base = add_query_arg('paged', '%#%'); } // Pagination settings with filter $bbp_topic_pagination = apply_filters('bbp_topic_pagination', array('base' => $base, 'format' => '', 'total' => $posts_per_page == $bbp->topic_query->found_posts ? 1 : ceil((int) $bbp->topic_query->found_posts / (int) $posts_per_page), 'current' => (int) $bbp->topic_query->paged, 'prev_text' => '←', 'next_text' => '→', 'mid_size' => 1)); // Add pagination to query object $bbp->topic_query->pagination_links = paginate_links($bbp_topic_pagination); // Remove first page from pagination $bbp->topic_query->pagination_links = str_replace($wp_rewrite->pagination_base . "/1/'", "'", $bbp->topic_query->pagination_links); } // Return object return apply_filters('bbp_has_topics', $bbp->topic_query->have_posts(), $bbp->topic_query); }