/** * Return the link to the user's topics * * @since 2.2.0 bbPress (r4225) * * @param int $user_id Optional. User id * @uses bbp_get_user_profile_url() To get the user profile url * @uses apply_filters() Calls 'bbp_get_favorites_permalink' with the * user profile url and user id * @return string Permanent link to user profile page */ function bbp_get_user_topics_created_url($user_id = 0) { // Use displayed user ID if there is one, and one isn't requested $user_id = bbp_get_user_id($user_id); if (empty($user_id)) { return false; } // Allow early overriding of the profile URL to cut down on processing $early_url = apply_filters('bbp_pre_get_user_topics_created_url', $user_id); if (is_string($early_url)) { return $early_url; } // Get user profile URL $profile_url = bbp_get_user_profile_url($user_id); // Pretty permalinks if (bbp_use_pretty_urls()) { $url = trailingslashit($profile_url) . bbp_get_topic_archive_slug(); $url = user_trailingslashit($url); // Unpretty permalinks } else { $url = add_query_arg(array(bbp_get_user_topics_rewrite_id() => '1'), $profile_url); } return apply_filters('bbp_get_user_topics_created_url', $url, $user_id); }
/** * Add bbPress-specific rewrite rules for uri's that are not * setup for us by way of custom post types or taxonomies. This includes: * - Front-end editing * - Topic views * - User profiles * * @since bbPress (r2688) * @todo Extract into an API */ public static function add_rewrite_rules() { /** Setup *************************************************************/ // Add rules to top or bottom? $priority = 'top'; // Single Slugs $forum_slug = bbp_get_forum_slug(); $topic_slug = bbp_get_topic_slug(); $reply_slug = bbp_get_reply_slug(); $ttag_slug = bbp_get_topic_tag_tax_slug(); // Archive Slugs $user_slug = bbp_get_user_slug(); $view_slug = bbp_get_view_slug(); $search_slug = bbp_get_search_slug(); $topic_archive_slug = bbp_get_topic_archive_slug(); $reply_archive_slug = bbp_get_reply_archive_slug(); // Tertiary Slugs $feed_slug = 'feed'; $edit_slug = 'edit'; $paged_slug = bbp_get_paged_slug(); $user_favs_slug = bbp_get_user_favorites_slug(); $user_subs_slug = bbp_get_user_subscriptions_slug(); // Unique rewrite ID's $feed_id = 'feed'; $edit_id = bbp_get_edit_rewrite_id(); $view_id = bbp_get_view_rewrite_id(); $paged_id = bbp_get_paged_rewrite_id(); $search_id = bbp_get_search_rewrite_id(); $user_id = bbp_get_user_rewrite_id(); $user_favs_id = bbp_get_user_favorites_rewrite_id(); $user_subs_id = bbp_get_user_subscriptions_rewrite_id(); $user_tops_id = bbp_get_user_topics_rewrite_id(); $user_reps_id = bbp_get_user_replies_rewrite_id(); // Rewrite rule matches used repeatedly below $root_rule = '/([^/]+)/?$'; $feed_rule = '/([^/]+)/' . $feed_slug . '/?$'; $edit_rule = '/([^/]+)/' . $edit_slug . '/?$'; $paged_rule = '/([^/]+)/' . $paged_slug . '/?([0-9]{1,})/?$'; // Search rules (without slug check) $search_root_rule = '/?$'; $search_paged_rule = '/' . $paged_slug . '/?([0-9]{1,})/?$'; /** Add ***************************************************************/ // User profile rules $tops_rule = '/([^/]+)/' . $topic_archive_slug . '/?$'; $reps_rule = '/([^/]+)/' . $reply_archive_slug . '/?$'; $favs_rule = '/([^/]+)/' . $user_favs_slug . '/?$'; $subs_rule = '/([^/]+)/' . $user_subs_slug . '/?$'; $tops_paged_rule = '/([^/]+)/' . $topic_archive_slug . '/' . $paged_slug . '/?([0-9]{1,})/?$'; $reps_paged_rule = '/([^/]+)/' . $reply_archive_slug . '/' . $paged_slug . '/?([0-9]{1,})/?$'; $favs_paged_rule = '/([^/]+)/' . $user_favs_slug . '/' . $paged_slug . '/?([0-9]{1,})/?$'; $subs_paged_rule = '/([^/]+)/' . $user_subs_slug . '/' . $paged_slug . '/?([0-9]{1,})/?$'; // Edit Forum|Topic|Reply|Topic-tag add_rewrite_rule($forum_slug . $edit_rule, 'index.php?' . bbp_get_forum_post_type() . '=$matches[1]&' . $edit_id . '=1', $priority); add_rewrite_rule($topic_slug . $edit_rule, 'index.php?' . bbp_get_topic_post_type() . '=$matches[1]&' . $edit_id . '=1', $priority); add_rewrite_rule($reply_slug . $edit_rule, 'index.php?' . bbp_get_reply_post_type() . '=$matches[1]&' . $edit_id . '=1', $priority); add_rewrite_rule($ttag_slug . $edit_rule, 'index.php?' . bbp_get_topic_tag_tax_id() . '=$matches[1]&' . $edit_id . '=1', $priority); // User Pagination|Edit|View add_rewrite_rule($user_slug . $tops_paged_rule, 'index.php?' . $user_id . '=$matches[1]&' . $user_tops_id . '=1&' . $paged_id . '=$matches[2]', $priority); add_rewrite_rule($user_slug . $reps_paged_rule, 'index.php?' . $user_id . '=$matches[1]&' . $user_reps_id . '=1&' . $paged_id . '=$matches[2]', $priority); add_rewrite_rule($user_slug . $favs_paged_rule, 'index.php?' . $user_id . '=$matches[1]&' . $user_favs_id . '=1&' . $paged_id . '=$matches[2]', $priority); add_rewrite_rule($user_slug . $subs_paged_rule, 'index.php?' . $user_id . '=$matches[1]&' . $user_subs_id . '=1&' . $paged_id . '=$matches[2]', $priority); add_rewrite_rule($user_slug . $tops_rule, 'index.php?' . $user_id . '=$matches[1]&' . $user_tops_id . '=1', $priority); add_rewrite_rule($user_slug . $reps_rule, 'index.php?' . $user_id . '=$matches[1]&' . $user_reps_id . '=1', $priority); add_rewrite_rule($user_slug . $favs_rule, 'index.php?' . $user_id . '=$matches[1]&' . $user_favs_id . '=1', $priority); add_rewrite_rule($user_slug . $subs_rule, 'index.php?' . $user_id . '=$matches[1]&' . $user_subs_id . '=1', $priority); add_rewrite_rule($user_slug . $edit_rule, 'index.php?' . $user_id . '=$matches[1]&' . $edit_id . '=1', $priority); add_rewrite_rule($user_slug . $root_rule, 'index.php?' . $user_id . '=$matches[1]', $priority); // Topic-View Pagination|Feed|View add_rewrite_rule($view_slug . $paged_rule, 'index.php?' . $view_id . '=$matches[1]&' . $paged_id . '=$matches[2]', $priority); add_rewrite_rule($view_slug . $feed_rule, 'index.php?' . $view_id . '=$matches[1]&' . $feed_id . '=$matches[2]', $priority); add_rewrite_rule($view_slug . $root_rule, 'index.php?' . $view_id . '=$matches[1]', $priority); // Search All add_rewrite_rule($search_slug . $search_paged_rule, 'index.php?' . $paged_id . '=$matches[1]', $priority); add_rewrite_rule($search_slug . $search_root_rule, 'index.php?' . $search_id, $priority); }
/** * Register bbPress-specific rewrite rules for uri's that are not * setup for us by way of custom post types or taxonomies. This includes: * - Front-end editing * - Topic views * - User profiles * * @since bbPress (r2688) * @param WP_Rewrite $wp_rewrite bbPress-sepecific rules are appended in * $wp_rewrite->rules */ public static function generate_rewrite_rules($wp_rewrite) { // Slugs $view_slug = bbp_get_view_slug(); $user_slug = bbp_get_user_slug(); // Unique rewrite ID's $edit_id = bbp_get_edit_rewrite_id(); $view_id = bbp_get_view_rewrite_id(); $user_id = bbp_get_user_rewrite_id(); $favs_id = bbp_get_user_favorites_rewrite_id(); $subs_id = bbp_get_user_subscriptions_rewrite_id(); $tops_id = bbp_get_user_topics_rewrite_id(); $reps_id = bbp_get_user_replies_rewrite_id(); // Rewrite rule matches used repeatedly below $root_rule = '/([^/]+)/?$'; $edit_rule = '/([^/]+)/edit/?$'; $feed_rule = '/([^/]+)/feed/?$'; $page_rule = '/([^/]+)/page/?([0-9]{1,})/?$'; // User profile rules $tops_rule = '/([^/]+)/topics/?$'; $reps_rule = '/([^/]+)/replies/?$'; $favs_rule = '/([^/]+)/' . bbp_get_user_favorites_slug() . '/?$'; $subs_rule = '/([^/]+)/' . bbp_get_user_subscriptions_slug() . '/?$'; $tops_page_rule = '/([^/]+)/topics/page/?([0-9]{1,})/?$'; $reps_page_rule = '/([^/]+)/replies/page/?([0-9]{1,})/?$'; $favs_page_rule = '/([^/]+)/' . bbp_get_user_favorites_slug() . '/page/?([0-9]{1,})/?$'; $subs_page_rule = '/([^/]+)/' . bbp_get_user_subscriptions_slug() . '/page/?([0-9]{1,})/?$'; // New bbPress specific rules to merge with existing that are not // handled automatically by custom post types or taxonomy types $bbp_rules = array(bbp_get_forum_slug() . $edit_rule => 'index.php?' . bbp_get_forum_post_type() . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', bbp_get_topic_slug() . $edit_rule => 'index.php?' . bbp_get_topic_post_type() . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', bbp_get_reply_slug() . $edit_rule => 'index.php?' . bbp_get_reply_post_type() . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', bbp_get_topic_tag_tax_slug() . $edit_rule => 'index.php?' . bbp_get_topic_tag_tax_id() . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', $user_slug . $tops_page_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $tops_id . '=1&paged=' . $wp_rewrite->preg_index(2), $user_slug . $reps_page_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $reps_id . '=1&paged=' . $wp_rewrite->preg_index(2), $user_slug . $favs_page_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $favs_id . '=1&paged=' . $wp_rewrite->preg_index(2), $user_slug . $subs_page_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $subs_id . '=1&paged=' . $wp_rewrite->preg_index(2), $user_slug . $tops_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $tops_id . '=1', $user_slug . $reps_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $reps_id . '=1', $user_slug . $favs_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $favs_id . '=1', $user_slug . $subs_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $subs_id . '=1', $user_slug . $edit_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1) . '&' . $edit_id . '=1', $user_slug . $root_rule => 'index.php?' . $user_id . '=' . $wp_rewrite->preg_index(1), $view_slug . $page_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index(1) . '&paged=' . $wp_rewrite->preg_index(2), $view_slug . $feed_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index(1) . '&feed=' . $wp_rewrite->preg_index(2), $view_slug . $root_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index(1)); // Merge bbPress rules with existing $wp_rewrite->rules = array_merge($bbp_rules, $wp_rewrite->rules); // Return merged rules return $wp_rewrite; }
/** * 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; } }
/** * Return the link to the user's topics * * @since bbPress (r4225) * * @param int $user_id Optional. User id * @uses bbp_get_user_profile_url() To get the user profile url * @uses apply_filters() Calls 'bbp_get_favorites_permalink' with the * user profile url and user id * @return string Permanent link to user profile page */ function bbp_get_user_topics_created_url($user_id = 0) { global $wp_rewrite; // Use displayed user ID if there is one, and one isn't requested $user_id = bbp_get_user_id($user_id); if (empty($user_id)) { return false; } // Allow early overriding of the profile URL to cut down on processing $early_url = apply_filters('bbp_pre_get_user_topics_created_url', (int) $user_id); if (is_string($early_url)) { return $early_url; } // Pretty permalinks if ($wp_rewrite->using_permalinks()) { $url = $wp_rewrite->root . bbp_get_user_slug() . '/%' . bbp_get_user_rewrite_id() . '%/' . bbp_get_topic_archive_slug(); $user = get_userdata($user_id); if (!empty($user->user_nicename)) { $user_nicename = $user->user_nicename; } else { $user_nicename = $user->user_login; } $url = str_replace('%' . bbp_get_user_rewrite_id() . '%', $user_nicename, $url); $url = home_url(user_trailingslashit($url)); // Unpretty permalinks } else { $url = add_query_arg(array(bbp_get_user_rewrite_id() => $user_id, bbp_get_user_topics_rewrite_id() => '1'), home_url('/')); } return apply_filters('bbp_get_user_topics_created_url', $url, $user_id); }