[wp-trac] [WordPress Trac] #46294: wp rest api fails to paginate page requests correctly when ordering on menu_order
WordPress Trac
noreply at wordpress.org
Thu Feb 21 06:00:48 UTC 2019
#46294: wp rest api fails to paginate page requests correctly when ordering on
menu_order
--------------------------+-----------------------------
Reporter: hobzhobz | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: General | Version:
Severity: normal | Keywords:
Focuses: |
--------------------------+-----------------------------
**Describe the bug**
Gutenberg and wordpress fails to render the parent page dropdown correctly
when there are more than 100 pages and the pages have various menu_order
values set.
The problem is that gutenberg calls the wordpress rest api like this,
getting 100 items at a time.
http://server/wp-
json/wp/v2/pages?per_page=100&exclude=890&parent_exclude=890&orderby=menu_order&order=asc&context=edit&_locale=user
http://server/wp-
json/wp/v2/pages?per_page=100&exclude%5B0%5D=890&parent_exclude%5B0%5D=890&orderby=menu_order&order=asc&context=edit&_locale=user&page=2
This results in the following 2 sql queries:
`SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND
wp_posts.ID NOT IN (890) AND wp_posts.post_parent NOT IN (890) AND
wp_posts.post_type = 'page' AND ((wp_posts.post_status = 'publish')) ORDER
BY wp_posts.menu_order ASC LIMIT 0, 100`
`SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND
wp_posts.ID NOT IN (890) AND wp_posts.post_parent NOT IN (890) AND
wp_posts.post_type = 'page' AND ((wp_posts.post_status = 'publish')) ORDER
BY wp_posts.menu_order ASC LIMIT 100, 100`
When ordering on a non unique field like menu_order you need to also add a
second unique ordering field like ID ,, See
https://bugs.mysql.com/bug.php?id=72076 See the answer from Tor Didriksen.
This is very critical bug because it means that if the current pages
parent is missing in the parent page dropdown and you click update it
means that the menu order for that page will be reset and this means i
cant use gutenberg.
**To Reproduce**
Steps to reproduce the behavior:
1. Create around 200 pages.
2. Set menu_order != on some of the pages.
3. edit any of the pages.
4. the parent page dropdown is missing pages
**Expected behavior**
the rest api should add some unique order by field to prevent the same
items from coming on page 1 and 2 of the requests.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/46294>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list