/** * Setup navigation. * * @since 1.0.0 * @package GeoDirectory_BuddyPress_Integration */ function geodir_buddypress_setup_nav() { $gd_post_types = geodir_get_posttypes('array'); if (empty($gd_post_types)) { return; } global $bp; $user_domain = geodir_buddypress_get_user_domain(); // listings $listing_post_types = get_option('geodir_buddypress_tab_listing'); $position = 70; if (!empty($listing_post_types)) { $parent_slug = 'listings'; $parent_url = trailingslashit($user_domain . $parent_slug); $parent_nav = array(); $sub_nav = array(); $count = 0; $total_count = 0; foreach ($listing_post_types as $post_type) { if (array_key_exists($post_type, $gd_post_types)) { $tab_slug = $gd_post_types[$post_type]['has_archive']; if ($count == 0) { // parent nav $parent_nav = array('name' => __('Listings', GDBUDDYPRESS_TEXTDOMAIN), 'slug' => $parent_slug, 'parent_slug' => $bp->profile->slug, 'screen_function' => 'geodir_buddypress_screen_' . $parent_slug, 'default_subnav_slug' => $tab_slug, 'position' => $position, 'item_css_id' => 'gdbuddypress-nav-' . $parent_slug); } // get listing count $listing_count = geodir_buddypress_count_total($post_type); $class = 0 === $listing_count ? 'no-count' : 'count'; $total_count += $listing_count; // sub nav $sub_nav[] = array('name' => wp_sprintf(__('%s <span class="%s">%s</span>', GDBUDDYPRESS_TEXTDOMAIN), __($gd_post_types[$post_type]['labels']['name'], GDBUDDYPRESS_TEXTDOMAIN), esc_attr($class), number_format_i18n($listing_count)), 'slug' => $tab_slug, 'parent_url' => $parent_url, 'parent_slug' => $parent_slug, 'screen_function' => 'geodir_buddypress_screen_' . $parent_slug, 'position' => $position, 'item_css_id' => 'gdbuddypress-nav-' . $parent_slug . '-' . $tab_slug); $count++; } } if (!empty($parent_nav)) { $class = 0 === $total_count ? 'no-count' : 'count'; $parent_nav['name'] = wp_sprintf(__('Listings <span class="%s">%s</span>', GDBUDDYPRESS_TEXTDOMAIN), esc_attr($class), number_format_i18n($total_count)); } if (!empty($parent_nav) && !empty($sub_nav)) { $parent_nav = apply_filters('geodir_buddypress_nav_' . $parent_slug, $parent_nav); bp_core_new_nav_item($parent_nav); $sub_nav = apply_filters('geodir_buddypress_subnav_' . $parent_slug, $sub_nav); // Sub nav items are not required if (!empty($sub_nav)) { foreach ($sub_nav as $nav) { bp_core_new_subnav_item($nav); } } } } // favorites $listing_post_types = get_option('geodir_buddypress_tab_listing'); if (!empty($listing_post_types)) { $parent_slug = 'favorites'; $parent_url = trailingslashit($user_domain . $parent_slug); $parent_nav = array(); $sub_nav = array(); $count = 0; $total_count = 0; foreach ($listing_post_types as $post_type) { if (array_key_exists($post_type, $gd_post_types)) { $tab_slug = $gd_post_types[$post_type]['has_archive']; if ($count == 0) { $fav_name = __('Favorites', GDBUDDYPRESS_TEXTDOMAIN); $favourite_text = apply_filters('gdbuddypress_favourites_text', $fav_name); // parent nav $parent_nav = array('name' => $favourite_text, 'slug' => $parent_slug, 'parent_slug' => $bp->profile->slug, 'screen_function' => 'geodir_buddypress_screen_' . $parent_slug, 'default_subnav_slug' => $tab_slug, 'position' => $position, 'item_css_id' => 'gdbuddypress-nav-' . $parent_slug); } $position = $position + 5; // get listing count $listing_count = geodir_buddypress_count_favorite($post_type); $class = 0 === $listing_count ? 'no-count' : 'count'; $total_count += $listing_count; // sub nav $sub_nav[] = array('name' => wp_sprintf(__('%s <span class="%s">%s</span>', GDBUDDYPRESS_TEXTDOMAIN), __($gd_post_types[$post_type]['labels']['name'], GDBUDDYPRESS_TEXTDOMAIN), esc_attr($class), number_format_i18n($listing_count)), 'slug' => $tab_slug, 'parent_url' => $parent_url, 'parent_slug' => $parent_slug, 'screen_function' => 'geodir_buddypress_screen_' . $parent_slug, 'position' => $position, 'item_css_id' => 'gdbuddypress-nav-' . $parent_slug . '-' . $tab_slug); $count++; } } if (!empty($parent_nav)) { $class = 0 === $total_count ? 'no-count' : 'count'; $fav_name = __('Favorites', GDBUDDYPRESS_TEXTDOMAIN); $favourite_text = apply_filters('gdbuddypress_favourites_text', $fav_name); $parent_nav['name'] = wp_sprintf(__('%s <span class="%s">%s</span>', GDBUDDYPRESS_TEXTDOMAIN), $favourite_text, esc_attr($class), number_format_i18n($total_count)); } if (!empty($parent_nav) && !empty($sub_nav)) { $parent_nav = apply_filters('geodir_buddypress_nav_' . $parent_slug, $parent_nav); bp_core_new_nav_item($parent_nav); $sub_nav = apply_filters('geodir_buddypress_subnav_' . $parent_slug, $sub_nav); // Sub nav items are not required if (!empty($sub_nav)) { foreach ($sub_nav as $nav) { bp_core_new_subnav_item($nav); } } } } // reviews $review_post_types = get_option('geodir_buddypress_tab_review'); if (!empty($review_post_types)) { $parent_slug = 'reviews'; $parent_url = trailingslashit($user_domain . $parent_slug); $parent_nav = array(); $sub_nav = array(); $count = 0; $total_count = 0; foreach ($review_post_types as $post_type) { if (array_key_exists($post_type, $gd_post_types)) { $tab_slug = $gd_post_types[$post_type]['has_archive']; if ($count == 0) { // parent nav $parent_nav = array('name' => __('Reviews', GDBUDDYPRESS_TEXTDOMAIN), 'slug' => $parent_slug, 'parent_slug' => $bp->profile->slug, 'screen_function' => 'geodir_buddypress_screen_' . $parent_slug, 'default_subnav_slug' => $tab_slug, 'position' => $position, 'item_css_id' => 'gdbuddypress-nav-' . $parent_slug); } $position = $position + 5; // get review count $review_count = geodir_buddypress_count_reviews($post_type); $class = 0 === $review_count ? 'no-count' : 'count'; $total_count += $review_count; // sub nav $sub_nav[] = array('name' => wp_sprintf(__('%s <span class="%s">%s</span>', GDBUDDYPRESS_TEXTDOMAIN), __($gd_post_types[$post_type]['labels']['name'], GDBUDDYPRESS_TEXTDOMAIN), esc_attr($class), number_format_i18n($review_count)), 'slug' => $tab_slug, 'parent_url' => $parent_url, 'parent_slug' => $parent_slug, 'screen_function' => 'geodir_buddypress_screen_' . $parent_slug, 'position' => $position, 'item_css_id' => 'gdbuddypress-nav-' . $parent_slug . '-' . $tab_slug); $count++; } } if (!empty($parent_nav)) { $class = 0 === $total_count ? 'no-count' : 'count'; $parent_nav['name'] = wp_sprintf(__('Reviews <span class="%s">%s</span>', GDBUDDYPRESS_TEXTDOMAIN), esc_attr($class), number_format_i18n($total_count)); } if (!empty($parent_nav) && !empty($sub_nav)) { $parent_nav = apply_filters('geodir_buddypress_nav_' . $parent_slug, $parent_nav); bp_core_new_nav_item($parent_nav); $sub_nav = apply_filters('geodir_buddypress_subnav_' . $parent_slug, $sub_nav); // Sub nav items are not required if (!empty($sub_nav)) { foreach ($sub_nav as $nav) { bp_core_new_subnav_item($nav); } } } } }
/** * BuddyPress listings tab pagination. * * @since 1.0.0 * @package GeoDirectory_BuddyPress_Integration * * @param string $before Pagination before HTML. * @param string $after Pagination after HTML. * @param string $prelabel Pagination previous label text. * @param string $nxtlabel Pagination next label text. * @param int $pages_to_show Number of pages to show. * @param bool $always_show Always display the pagination? Default: false. */ function geodir_buddypress_pagination($before = '', $after = '', $prelabel = '', $nxtlabel = '', $pages_to_show = 5, $always_show = false) { global $posts_per_page, $found_posts, $paged; if (empty($prelabel)) { $prelabel = '<strong>«</strong>'; } global $bp; $user_domain = geodir_buddypress_get_user_domain(); if (empty($nxtlabel)) { $nxtlabel = '<strong>»</strong>'; } $half_pages_to_show = round($pages_to_show / 2); if (!is_single() && $found_posts > 0 && $posts_per_page > 0) { $numposts = $found_posts; $max_page = ceil($numposts / $posts_per_page); if (empty($paged)) { $paged = 1; } $current_domain = ''; if ($bp->current_component && $bp->current_action) { $component_domain = trailingslashit($user_domain . $bp->current_component . '/'); $current_domain = trailingslashit($user_domain . $bp->current_component . '/' . $bp->current_action); } if ($max_page > 1 || $always_show) { echo "{$before} <div class='Navi'>"; if ($paged >= $pages_to_show - 1) { $url = get_pagenum_link(); if ($current_domain) { $url = strpos($url, $current_domain) !== false ? $url : str_replace($component_domain, $current_domain, $url); } echo '<a href="' . str_replace('&paged', '&paged', $url) . '">«</a>'; } ob_start(); previous_posts_link($prelabel); $url = ob_get_clean(); if ($current_domain) { $url = strpos($url, $current_domain) !== false ? $url : str_replace($component_domain, $current_domain, $url); } echo $url; for ($i = $paged - $half_pages_to_show; $i <= $paged + $half_pages_to_show; $i++) { if ($i >= 1 && $i <= $max_page) { if ($i == $paged) { echo "<strong class='on'>{$i}</strong>"; } else { $url = get_pagenum_link($i); if ($current_domain) { $url = strpos($url, $current_domain) !== false ? $url : str_replace($component_domain, $current_domain, $url); } echo ' <a href="' . str_replace('&paged', '&paged', $url) . '">' . $i . '</a> '; } } } ob_start(); next_posts_link($nxtlabel, $max_page); $url = ob_get_clean(); if ($current_domain) { $url = strpos($url, $current_domain) !== false ? $url : str_replace($component_domain, $current_domain, $url); } echo $url; if ($paged + $half_pages_to_show < $max_page) { $url = get_pagenum_link($max_page); if ($current_domain) { $url = strpos($url, $current_domain) !== false ? $url : str_replace($component_domain, $current_domain, $url); } echo '<a href="' . str_replace('&paged', '&paged', $url) . '">»</a>'; } echo "</div> {$after}"; } } }