/** * 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); }
function x_bbpress_show_topic_pagination() { $total_topics = bbpress()->topic_query->found_posts; if (bbp_get_topics_per_page() <= $total_topics) { return true; } else { return false; } }
/** * 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_is_user_bozo() To add the bozo post status * @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()); } // Add the bozo status if user is a bozo if (bbp_is_user_bozo()) { $post_statuses[] = bbp_get_bozo_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()) { // Profile page if (bbp_is_single_user()) { $base = bbp_get_user_profile_url(bbp_get_displayed_user_id()); } elseif (bbp_is_single_view()) { $base = bbp_get_view_url(); } elseif (bbp_is_topic_tag()) { $base = bbp_get_topic_tag_link(); } elseif (is_page() || is_single()) { $base = get_permalink(); } elseif (bbp_is_topic_archive()) { $base = bbp_get_topics_url(); } 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); }
/** * Add checks for bbPress conditions to parse_query action * * If it's a user page, WP_Query::bbp_is_single_user is set to true. * If it's a user edit page, WP_Query::bbp_is_single_user_edit is set to true * and the the 'wp-admin/includes/user.php' file is included. * In addition, on user/user edit pages, WP_Query::home is set to false & query * vars 'bbp_user_id' with the displayed user id and 'author_name' with the * displayed user's nicename are added. * * If it's a forum edit, WP_Query::bbp_is_forum_edit is set to true * If it's a topic edit, WP_Query::bbp_is_topic_edit is set to true * If it's a reply edit, WP_Query::bbp_is_reply_edit is set to true. * * If it's a view page, WP_Query::bbp_is_view is set to true * If it's a search page, WP_Query::bbp_is_search is set to true * * @since bbPress (r2688) * * @param WP_Query $posts_query * * @uses get_query_var() To get {@link WP_Query} query var * @uses is_email() To check if the string is an email * @uses get_user_by() To try to get the user by email and nicename * @uses get_userdata() to get the user data * @uses current_user_can() To check if the current user can edit the user * @uses is_user_member_of_blog() To check if user profile page exists * @uses WP_Query::set_404() To set a 404 status * @uses apply_filters() Calls 'enable_edit_any_user_configuration' with true * @uses bbp_get_view_query_args() To get the view query args * @uses bbp_get_forum_post_type() To get the forum post type * @uses bbp_get_topic_post_type() To get the topic post type * @uses bbp_get_reply_post_type() To get the reply post type * @uses remove_action() To remove the auto save post revision action */ function bbp_parse_query($posts_query) { // Bail if $posts_query is not the main loop if (!$posts_query->is_main_query()) { return; } // Bail if filters are suppressed on this query if (true === $posts_query->get('suppress_filters')) { return; } // Bail if in admin if (is_admin()) { return; } // Get query variables $bbp_view = $posts_query->get(bbp_get_view_rewrite_id()); $bbp_user = $posts_query->get(bbp_get_user_rewrite_id()); $is_edit = $posts_query->get(bbp_get_edit_rewrite_id()); // It is a user page - We'll also check if it is user edit if (!empty($bbp_user)) { /** Find User *********************************************************/ // Setup the default user variable $the_user = false; // If using pretty permalinks, use the email or slug if (get_option('permalink_structure')) { // Email was passed if (is_email($bbp_user)) { $the_user = get_user_by('email', $bbp_user); // Try nicename } else { $the_user = get_user_by('slug', $bbp_user); } } // No user found by slug/email, so try the ID if it's numeric if (empty($the_user) && is_numeric($bbp_user)) { $the_user = get_user_by('id', $bbp_user); } // 404 and bail if user does not have a profile if (empty($the_user->ID) || !bbp_user_has_profile($the_user->ID)) { $posts_query->set_404(); return; } /** User Exists *******************************************************/ $is_favs = $posts_query->get(bbp_get_user_favorites_rewrite_id()); $is_subs = $posts_query->get(bbp_get_user_subscriptions_rewrite_id()); $is_topics = $posts_query->get(bbp_get_user_topics_rewrite_id()); $is_replies = $posts_query->get(bbp_get_user_replies_rewrite_id()); // View or edit? if (!empty($is_edit)) { // We are editing a profile $posts_query->bbp_is_single_user_edit = true; // Load the core WordPress contact methods if (!function_exists('_wp_get_user_contactmethods')) { include_once ABSPATH . 'wp-includes/registration.php'; } // Load the edit_user functions if (!function_exists('edit_user')) { require_once ABSPATH . 'wp-admin/includes/user.php'; } // Load the grant/revoke super admin functions if (is_multisite() && !function_exists('revoke_super_admin')) { require_once ABSPATH . 'wp-admin/includes/ms.php'; } // Editing a user $posts_query->bbp_is_edit = true; // User favorites } elseif (!empty($is_favs)) { $posts_query->bbp_is_single_user_favs = true; // User subscriptions } elseif (!empty($is_subs)) { $posts_query->bbp_is_single_user_subs = true; // User topics } elseif (!empty($is_topics)) { $posts_query->bbp_is_single_user_topics = true; // User topics } elseif (!empty($is_replies)) { $posts_query->bbp_is_single_user_replies = true; // User profile } else { $posts_query->bbp_is_single_user_profile = true; } // Looking at a single user $posts_query->bbp_is_single_user = true; // Make sure 404 is not set $posts_query->is_404 = false; // Correct is_home variable $posts_query->is_home = false; // User is looking at their own profile if (get_current_user_id() === $the_user->ID) { $posts_query->bbp_is_single_user_home = true; } // Set bbp_user_id for future reference $posts_query->set('bbp_user_id', $the_user->ID); // Set author_name as current user's nicename to get correct posts $posts_query->set('author_name', $the_user->user_nicename); // Set the displayed user global to this user bbpress()->displayed_user = $the_user; // View Page } elseif (!empty($bbp_view)) { // Check if the view exists by checking if there are query args are set $view_args = bbp_get_view_query_args($bbp_view); // Bail if view args is false (view isn't registered) if (false === $view_args) { $posts_query->set_404(); return; } // Correct is_home variable $posts_query->is_home = false; // We are in a custom topic view $posts_query->bbp_is_view = true; // Search Page } elseif (isset($posts_query->query_vars[bbp_get_search_rewrite_id()])) { // Check if there are search query args set $search_terms = bbp_get_search_terms(); if (!empty($search_terms)) { $posts_query->bbp_search_terms = $search_terms; } // Correct is_home variable $posts_query->is_home = false; // We are in a search query $posts_query->bbp_is_search = true; // Forum/Topic/Reply Edit Page } elseif (!empty($is_edit)) { // Get the post type from the main query loop $post_type = $posts_query->get('post_type'); // Check which post_type we are editing, if any if (!empty($post_type)) { switch ($post_type) { // We are editing a forum case bbp_get_forum_post_type(): $posts_query->bbp_is_forum_edit = true; $posts_query->bbp_is_edit = true; break; // We are editing a topic // We are editing a topic case bbp_get_topic_post_type(): $posts_query->bbp_is_topic_edit = true; $posts_query->bbp_is_edit = true; break; // We are editing a reply // We are editing a reply case bbp_get_reply_post_type(): $posts_query->bbp_is_reply_edit = true; $posts_query->bbp_is_edit = true; break; } // We are editing a topic tag } elseif (bbp_is_topic_tag()) { $posts_query->bbp_is_topic_tag_edit = true; $posts_query->bbp_is_edit = true; } // We save post revisions on our own remove_action('pre_post_update', 'wp_save_post_revision'); // Topic tag page } elseif (bbp_is_topic_tag()) { $posts_query->set('bbp_topic_tag', get_query_var('term')); $posts_query->set('post_type', bbp_get_topic_post_type()); $posts_query->set('posts_per_page', bbp_get_topics_per_page()); // Do topics on forums root } elseif (is_post_type_archive(array(bbp_get_forum_post_type(), bbp_get_topic_post_type())) && 'topics' === bbp_show_on_root()) { $posts_query->bbp_show_topics_on_root = true; } }
/** * Add checks for bbPress conditions to parse_query action * * If it's a user page, WP_Query::bbp_is_single_user is set to true. * If it's a user edit page, WP_Query::bbp_is_single_user_edit is set to true * and the the 'wp-admin/includes/user.php' file is included. * In addition, on user/user edit pages, WP_Query::home is set to false & query * vars 'bbp_user_id' with the displayed user id and 'author_name' with the * displayed user's nicename are added. * * If it's a forum edit, WP_Query::bbp_is_forum_edit is set to true * If it's a topic edit, WP_Query::bbp_is_topic_edit is set to true * If it's a reply edit, WP_Query::bbp_is_reply_edit is set to true. * * If it's a view page, WP_Query::bbp_is_view is set to true * * @since bbPress (r2688) * * @param WP_Query $posts_query * * @uses get_query_var() To get {@link WP_Query} query var * @uses is_email() To check if the string is an email * @uses get_user_by() To try to get the user by email and nicename * @uses WP_User to get the user data * @uses WP_Query::set_404() To set a 404 status * @uses current_user_can() To check if the current user can edit the user * @uses apply_filters() Calls 'enable_edit_any_user_configuration' with true * @uses bbp_get_view_query_args() To get the view query args * @uses bbp_get_forum_post_type() To get the forum post type * @uses bbp_get_topic_post_type() To get the topic post type * @uses bbp_get_reply_post_type() To get the reply post type * @uses remove_action() To remove the auto save post revision action */ function bbp_parse_query($posts_query) { // Bail if $posts_query is not the main loop if (!$posts_query->is_main_query()) { return; } // Bail if filters are suppressed on this query if (true == $posts_query->get('suppress_filters')) { return; } // Bail if in admin if (is_admin()) { return; } // Get query variables $bbp_user = $posts_query->get(bbp_get_user_rewrite_id()); $bbp_view = $posts_query->get(bbp_get_view_rewrite_id()); $is_edit = $posts_query->get(bbp_get_edit_rewrite_id()); // It is a user page - We'll also check if it is user edit if (!empty($bbp_user)) { // Not a user_id so try email and slug if (!is_numeric($bbp_user)) { // Email was passed if (is_email($bbp_user)) { $bbp_user = get_user_by('email', $bbp_user); // Try nicename } else { $bbp_user = get_user_by('slug', $bbp_user); } // If we were successful, set to ID if (is_object($bbp_user)) { $bbp_user = $bbp_user->ID; } } // Create new user $user = new WP_User($bbp_user); // Bail if no user if (!isset($user) || empty($user) || empty($user->ID)) { $posts_query->set_404(); return; } /** User Exists *******************************************************/ // View or edit? if (!empty($is_edit)) { // We are editing a profile $posts_query->bbp_is_single_user_edit = true; // Load the core WordPress contact methods if (!function_exists('_wp_get_user_contactmethods')) { include_once ABSPATH . 'wp-includes/registration.php'; } // Load the edit_user functions if (!function_exists('edit_user')) { require_once ABSPATH . 'wp-admin/includes/user.php'; } // Editing a user $posts_query->bbp_is_edit = true; // We are viewing a profile } else { $posts_query->bbp_is_single_user = true; } // Make sure 404 is not set $posts_query->is_404 = false; // Correct is_home variable $posts_query->is_home = false; // Set bbp_user_id for future reference $posts_query->set('bbp_user_id', $user->ID); // Set author_name as current user's nicename to get correct posts $posts_query->set('author_name', $user->user_nicename); // Set the displayed user global to this user bbpress()->displayed_user = $user; // View Page } elseif (!empty($bbp_view)) { // Check if the view exists by checking if there are query args are set $view_args = bbp_get_view_query_args($bbp_view); // Bail if view args is false (view isn't registered) if (false === $view_args) { $posts_query->set_404(); return; } // Correct is_home variable $posts_query->is_home = false; // We are in a custom topic view $posts_query->bbp_is_view = true; // Forum/Topic/Reply Edit Page } elseif (!empty($is_edit)) { // Get the post type from the main query loop $post_type = $posts_query->get('post_type'); // Check which post_type we are editing, if any if (!empty($post_type)) { switch ($post_type) { // We are editing a forum case bbp_get_forum_post_type(): $posts_query->bbp_is_forum_edit = true; $posts_query->bbp_is_edit = true; break; // We are editing a topic // We are editing a topic case bbp_get_topic_post_type(): $posts_query->bbp_is_topic_edit = true; $posts_query->bbp_is_edit = true; break; // We are editing a reply // We are editing a reply case bbp_get_reply_post_type(): $posts_query->bbp_is_reply_edit = true; $posts_query->bbp_is_edit = true; break; } // We are editing a topic tag } elseif (bbp_is_topic_tag()) { $posts_query->bbp_is_topic_tag_edit = true; $posts_query->bbp_is_edit = true; } // We save post revisions on our own remove_action('pre_post_update', 'wp_save_post_revision'); // Topic tag page } elseif (bbp_is_topic_tag()) { $posts_query->set('bbp_topic_tag', get_query_var('term')); $posts_query->set('post_type', bbp_get_topic_post_type()); $posts_query->set('posts_per_page', bbp_get_topics_per_page()); } }