LLMS_Integration_Buddypress::modify_paginate_links( string $link )
Modify the pagination links for the endpoints in the bp member profile.
Description Description
This fixes the pagination not correctly working on the fist subnav.
Parameters Parameters
- $link
-
(string) (Required) Default link.
Return Return
(string)
Source Source
File: includes/integrations/class.llms.integration.buddypress.php
public function modify_paginate_links( $link ) { global $wp_rewrite; // With ugly permalinks actually the whole BuddyPress member profile page doesn't work. if ( ! get_option( 'permalink_structure' ) ) { return $link; } // Remove query vars if any, we'll add them back later. $query = wp_parse_url( $link, PHP_URL_QUERY ); if ( $query ) { $link = str_replace( '?' . $query, '', $link ); } // Retrieve link's page number. $parts = explode( '/', untrailingslashit( $link ) ); $page = end( $parts ); // For links to page 1 let's remove it to avoid ugly URLs. if ( 1 === (int) $page ) { $link = str_replace( user_trailingslashit( $wp_rewrite->pagination_base . '/' . $page ), '', $link ); } $endpoints = $this->get_profile_endpoints(); // If we're not the first subnav, our job is done, add back the query var and return. if ( key( $endpoints ) !== $this->current_endpoint_key ) { return $query ? $link . '?' . $query : $link; } // Retrieve our first subnav menu item. $first_subnav_item = buddypress()->members->nav->get_secondary( array( /** This filter is documented above */ 'parent_slug' => apply_filters( 'llms_buddypress_main_nav_item_slug', _x( 'courses', 'BuddyPress profile main nav item slug', 'lifterlms' ) ), 'slug' => $endpoints[ $this->current_endpoint_key ]['endpoint'], ) ); if ( is_array( $first_subnav_item ) ) { $first_subnav_item = reset( $first_subnav_item ); } else { // Bail. return $query ? $link . '?' . $query : $link; } $current_page = llms_get_paged_query_var(); /** * Here's the core of this filter. * * What happens is that the pagination links on the first page of the fist subnav, * e.g. 'my-courses' endpoint (as example for the fist subnav) are of this type: * `example.local/members/admin/courses/page/N`, * where 'courses' is the slug of the main nav item. * While the "working" paginate links must be of the type: * `example.local/members/admin/courses/my-courses/page/N` * where 'courses' is the slug of the main nav item, and 'my-courses' is the slug of * the subnav item which is the default subnav for the main nav item. * * So what we do here is replacing the link that looks like: * `example.local/members/admin/courses/page/N` to something like: * `example.local/members/admin/courses/my-courses/page/N` * * Despite one might expect, `$first_subnav_item->link` doesn't point to `example.local/members/admin/courses/my-courses/` * but to `example.local/members/admin/courses/`, which is the link of the parent nav, the main nav item, * this because the 'my-courses' subnav item is the default of the 'courses' nav item (default_subnav_slug). */ if ( 1 === $current_page ) { $link = user_trailingslashit( $first_subnav_item->link . $first_subnav_item->slug . '/' . $wp_rewrite->pagination_base . '/' . $page ); } elseif ( 1 === (int) $page ) { /** * For links to page 1, when not on page 1, let's back on the main nav item URL, so we replace something like * `example.local/members/admin/courses/my-courses/` * to something like * `example.local/members/admin/courses/` */ $link = $first_subnav_item->link; } return $query ? $link . '?' . $query : $link; }
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
6.3.0 | Introduced. |