WordPress.org

Make WordPress Core

Opened 3 months ago

Last modified 3 months ago

#53868 new defect (bug)

Add option to `paginate_links` to apply format on all pages

Reported by: ntsekouras Owned by:
Milestone: 5.9 Priority: normal
Severity: normal Version:
Component: General Keywords: has-patch has-unit-tests
Focuses: Cc:

Description

paginate_links doesn't use the provided format when the page is 1. This is great for the main query as it removes the extra query params making the URL shorter, but in the case of custom queries is problematic.

If no additional data is appended via. add args / add fragment, the string remains empty at the time of output, which browsers then default it to the current page URL.

The code for this behavior is this: $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );

My proposed solution is to add a new option in paginate_links that would enforce applying the format for all pages, including the first one.

Change History (3)

This ticket was mentioned in PR #1540 on WordPress/wordpress-develop by ntsekouras.


3 months ago

  • Keywords has-patch has-unit-tests added

Trac ticket: https://core.trac.wordpress.org/ticket/53868

paginate_links doesn't use the provided format when the page is 1. This is great for the main query as it removes the extra query params making the URL shorter, but in the case of custom queries is problematic.

If no additional data is appended via. add args / add fragment, the string remains empty at the time of output, which browsers then default it to the current page URL.

The code for this behavior is this: $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );

My proposed solution is to add a new format_all_pages option in paginate_links that would enforce applying the format for all pages, including the first one. I could use some input for a better name for this option 😄 .

## Notes
In order to test this properly you have to enable pretty permalinks. If not the url will have the page_id param and therefore the final url will not be empty.

## Testing instructions

To reproduce:

  1. Create a couple of posts - no content is needed
  2. Create a page and insert Query Loop block, set the Items per Page to 1 and make sure the inherit is false. After that insert a Query Pagination block inside Query Loop.
  3. Save and in front-end navigate to the second page of the query.
  4. Observe that the link for the first page is pointing to the current url.

To test the solution:

  1. You can test by editing this line in Query Pagination Numbers:https://github.com/WordPress/wordpress-develop/blob/master/src/wp-includes/blocks/query-pagination-numbers.php#L46 and add the new option: format_all_pages = true. (Noting that this will need a follow up in GB to update the block functionality.
  2. Observe that after navigating to the second page, the first page's link is correct and is not the current url.

This ticket was mentioned in Slack in #core by ntsekouras. View the logs.


3 months ago

#3 @SergeyBiryukov
3 months ago

  • Milestone changed from Awaiting Review to 5.9
Note: See TracTickets for help on using tickets.