Version Description
- 2022-04-28 =
-
Added: REST API for reordering posts:
/wp-json/simplepageordering/v1/(props @rmccue, @ciprianimike, @cadic, @lkraav, @dinhtungdu). - Added: REST Endpoint Documentation.
- Added: Documentation to exclude post types (props @dzulfriday @dinhtungdu, @jeffpaul).
- Added: PHP8 compatibility testing GitHub Action (props @nomnom99, @dharm1025).
- Added: Cypress E2E tests (props @dinhtungdu, @dharm1025, @faisal03).
- Added: Dependency security scanning GitHub Action (props @jeffpaul, @nomnom99).
-
Changed:
PLUGIN_VERSIONtoSIMPLE_PAGE_ORDERING_VERSION(props @dinhtungdu, @dkotter). - Changed: Bump WordPress "tested up to" version to 5.9 (props @ankitguptaindia, @phpbits, @sudip-10up).
- Security: Bump rmccue/requests from 1.7.0 to 1.8.0 (props @dependabot).
- Security: Bump async from 2.6.3 to 2.6.4 (props @dependabot).
Download this release
Release Info
| Developer | 10up |
| Plugin | |
| Version | 2.4.0 |
| Comparing to | |
| See all releases | |
Code changes from version 2.3.4 to 2.4.0
- .phpcs.xml.dist +4 -0
- composer.json +0 -26
- readme.txt +135 -108
- simple-page-ordering.php +185 -40
.phpcs.xml.dist
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<ruleset name="Project Rules">
|
| 3 |
+
<rule ref="10up-Default" />
|
| 4 |
+
</ruleset>
|
composer.json
DELETED
|
@@ -1,26 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"name": "10up/simple-page-ordering",
|
| 3 |
-
"description": "Order your pages and other hierarchical post types with simple drag and drop right from the standard page list.",
|
| 4 |
-
"version": "2.3.4",
|
| 5 |
-
"type": "wordpress-plugin",
|
| 6 |
-
"keywords": [
|
| 7 |
-
"wordpress",
|
| 8 |
-
"10up"
|
| 9 |
-
],
|
| 10 |
-
"homepage": "https://github.com/10up/simple-page-ordering",
|
| 11 |
-
"license": "GPLv2",
|
| 12 |
-
"authors": [
|
| 13 |
-
{
|
| 14 |
-
"name": "10up",
|
| 15 |
-
"homepage": "https://10up.com/"
|
| 16 |
-
}
|
| 17 |
-
],
|
| 18 |
-
"support": {
|
| 19 |
-
"issues": "https://github.com/10up/simple-page-ordering/issues",
|
| 20 |
-
"source": "https://github.com/10up/simple-page-ordering"
|
| 21 |
-
},
|
| 22 |
-
"minimum-stability": "dev",
|
| 23 |
-
"require-dev": {
|
| 24 |
-
"10up/wpacceptance": "dev-master"
|
| 25 |
-
}
|
| 26 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.txt
CHANGED
|
@@ -1,12 +1,12 @@
|
|
| 1 |
=== Simple Page Ordering ===
|
| 2 |
-
Contributors:
|
| 3 |
-
Donate link:
|
| 4 |
-
Tags:
|
| 5 |
Requires at least: 3.8
|
| 6 |
-
Tested up to:
|
| 7 |
-
Stable tag:
|
| 8 |
-
License:
|
| 9 |
-
License URI:
|
| 10 |
|
| 11 |
Order your pages and other hierarchical post types with simple drag and drop right from the standard page list.
|
| 12 |
|
|
@@ -68,10 +68,25 @@ This most likely means the AJAX request - the server side code - failed after yo
|
|
| 68 |
|
| 69 |
Where 5 is the number of items to batch on each request (the default is 50). Note that this example uses PHP 5.3+ callback functions, so if you're still on PHP 5.2, you'll need to add a traditional callback.
|
| 70 |
|
| 71 |
-
= What happened to the drop down box that let me change the number of items on each page in the admin
|
| 72 |
|
| 73 |
This feature is already built into WordPress natively, but a bit tucked away. If you pull down the "Screen Options" tab up top (on the list of post objects) there's a field where you can specify the number of items to show per page. I decided it was not a very good practice to duplicate this.
|
| 74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
== Screenshots ==
|
| 76 |
|
| 77 |
1. Dragging the page to its new position
|
|
@@ -79,109 +94,121 @@ This feature is already built into WordPress natively, but a bit tucked away. If
|
|
| 79 |
|
| 80 |
== Changelog ==
|
| 81 |
|
| 82 |
-
= 2.
|
| 83 |
-
* **
|
| 84 |
-
* **
|
| 85 |
-
* **
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
* **Added:**
|
| 89 |
-
* **Changed:**
|
| 90 |
-
* **Changed:** Bump WordPress
|
| 91 |
-
* **
|
| 92 |
-
* **
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
* **
|
| 97 |
-
* **Fixed:**
|
| 98 |
-
|
| 99 |
-
= 2.3.
|
| 100 |
-
* **
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
* **
|
| 104 |
-
* **
|
| 105 |
-
* **
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
* **
|
| 109 |
-
* **Fixed:**
|
| 110 |
-
|
| 111 |
-
= 2.
|
| 112 |
-
* **Fixed:**
|
| 113 |
-
|
| 114 |
-
= 2.
|
| 115 |
-
* **
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
* **
|
| 119 |
-
* **Fixed:**
|
| 120 |
-
* **
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
* **Fixed:**
|
| 125 |
-
|
| 126 |
-
= 2.2.
|
| 127 |
-
* **
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
* **Fixed:** Hierarchical custom post types without page-attributes was still broken - doh!
|
| 133 |
-
* **Fixed:** Extreme edge case where post columns did not include the post title now supported
|
| 134 |
|
| 135 |
-
= 2.1.1 =
|
| 136 |
-
* **Fixed:** custom post types with page-attributes or hierarchical properties, but not both, breaking ordering
|
| 137 |
|
| 138 |
-
= 2.1.0 =
|
| 139 |
-
* **Added:** Awareness of custom user capabilities for post types, in addition to a filter (`simple_page_ordering_edit_rights`) for overriding reordering rights (previously used `edit_others_pages` globally)
|
| 140 |
-
* **Added:** Awareness of custom post statuses (so they are not skipped during backend ordering operation)
|
| 141 |
-
* **Changed:** UI refinements: Better "spinner" positioning (and HiDPI), translucent row when moving, improved appearance of "drop" placeholder, wait till row dragged by at least 5px to start sorting
|
| 142 |
-
* **Changed:** Major JavaScript refactoring and simplification (combined with new stylesheet) for better performance
|
| 143 |
|
| 144 |
-
= 2.0.0 =
|
| 145 |
* **Added:** Drag pages into any part of the page hierarchy! No longer limited to same branch of tree!
|
| 146 |
-
* **Added:** Big performance improvements under the hood: leaner queries, batched requests, less processing
|
| 147 |
-
* **Added:** New filters and hooks to extend / override default functionality
|
| 148 |
-
* **Changed:** Scales much more reliably in situations with very high page counts due to batching of requests
|
| 149 |
-
* **Changed:** Order of the first page is now set to "1" instead of "0", so pages added after ordering are added at the top (instead of second)
|
| 150 |
-
* **Changed:** Removed "number of pages" drop down, which is repetitive of a field accessible under Screen Options
|
| 151 |
-
* **Changed:** Improved compatibility with newer versions of WordPress
|
| 152 |
-
|
| 153 |
-
= 1.0.0 =
|
| 154 |
-
* **Added:** Support for ordering non-hierarchical post types that have "page-attributes" support
|
| 155 |
-
* **Added:** New filter link for "Sort by Order" to restore (hierarchical) or set (non-hierarchical, page attributes support) post list sort to menu order
|
| 156 |
-
* **Changed:** Users are now forced to wait for current sort operation to finish before they can sort another item
|
| 157 |
-
* **Changed:** Smarter about "not sortable" view states
|
| 158 |
* **Changed:** Localization ready! Rough Spanish translation included.
|
| 159 |
-
* **Changed:** Assorted other performance and code improvements
|
| 160 |
-
* **Fixed:** Unexpected page ordering results when pages have not been explictly ordered yet (sorts by menu_order, then title, not just menu_order)
|
| 161 |
-
* **Fixed:** "Per page" drop down filter selection not saving between page loads (was broken in 3.1)
|
| 162 |
-
* **Fixed:** Items are always ordered with positive integers (potential negative sort orders had some performance benefits in last version, but sometimes caused issues)
|
| 163 |
-
|
| 164 |
-
= 0.9.6 =
|
| 165 |
-
* **Fixed:** for broken inline editing (quick edit) fields in Firefox
|
| 166 |
-
|
| 167 |
-
= 0.9.5 =
|
| 168 |
-
* **Changed:** Smarter awareness of "sorted" modes in WordPress 3.1 (can only use when sorted by menu order)
|
| 169 |
-
* **Changed:** Smarter awareness of "quick edit" mode (can't drag)
|
| 170 |
-
* **Changed:** Generally simplified / better organized code
|
| 171 |
-
|
| 172 |
-
= 0.9.0 =
|
| 173 |
-
* **Added:** Further directions in the plug-in description (some users were confused about how to use it)
|
| 174 |
-
* **Added:** Basic compatibility with 3.1 RC (prevent clashes with post list sorting)
|
| 175 |
-
* **Changed:** "Move" cursor only set if JavaScript enabled
|
| 176 |
-
* **Fixed:** Page count display always showing "0" on non-hierarchical post types (Showing 1-X of X)
|
| 177 |
-
* **Fixed:** Hidden menu order not updating after sort (causing Quick Edit to reset order when used right after sorting)
|
| 178 |
-
|
| 179 |
-
= 0.8.4 =
|
| 180 |
-
* **Changed:** Loosened constraints on drag and drop to ease dropping into top and bottom position
|
| 181 |
-
* **Changed:** Improved some terminology (with custom post types in mind)
|
| 182 |
-
* **Fixed:** Row background staying "white" after dropping into a new position
|
| 183 |
-
* **Fixed:** Double border on the bottom of the row while dragging
|
| 184 |
-
|
| 185 |
-
= 0.8.2 =
|
| 186 |
-
* **Changed:** Simplified code - consolidated hooks
|
| 187 |
-
* **Changed:** Updated version requirements
|
| 1 |
=== Simple Page Ordering ===
|
| 2 |
+
Contributors: 10up, jakemgold, welcher, helen, thinkoomph
|
| 3 |
+
Donate link: http://10up.com/plugins/simple-page-ordering-wordpress/
|
| 4 |
+
Tags: order, re-order, ordering, pages, page, manage, menu_order, hierarchical, ajax, drag-and-drop, admin
|
| 5 |
Requires at least: 3.8
|
| 6 |
+
Tested up to: 6.0
|
| 7 |
+
Stable tag: 2.4.0
|
| 8 |
+
License: GPLv2 or later
|
| 9 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
| 11 |
Order your pages and other hierarchical post types with simple drag and drop right from the standard page list.
|
| 12 |
|
| 68 |
|
| 69 |
Where 5 is the number of items to batch on each request (the default is 50). Note that this example uses PHP 5.3+ callback functions, so if you're still on PHP 5.2, you'll need to add a traditional callback.
|
| 70 |
|
| 71 |
+
= What happened to the drop down box that let me change the number of items on each page in the admin? =
|
| 72 |
|
| 73 |
This feature is already built into WordPress natively, but a bit tucked away. If you pull down the "Screen Options" tab up top (on the list of post objects) there's a field where you can specify the number of items to show per page. I decided it was not a very good practice to duplicate this.
|
| 74 |
|
| 75 |
+
= How can I exclude certain custom post types? =
|
| 76 |
+
|
| 77 |
+
Custom post types can be excluded by using the `simple_page_ordering_is_sortable` filter.
|
| 78 |
+
|
| 79 |
+
For example, with `excluded_post_type` as the custom post type ID, add the following snippet in the theme function file or custom plugin:
|
| 80 |
+
|
| 81 |
+
`
|
| 82 |
+
add_filter( 'simple_page_ordering_is_sortable', function( $sortable, $post_type ) {
|
| 83 |
+
if ( 'excluded_post_type' === $post_type ) {
|
| 84 |
+
return false;
|
| 85 |
+
}
|
| 86 |
+
return $sortable;
|
| 87 |
+
}, 10, 2 );
|
| 88 |
+
`
|
| 89 |
+
|
| 90 |
== Screenshots ==
|
| 91 |
|
| 92 |
1. Dragging the page to its new position
|
| 94 |
|
| 95 |
== Changelog ==
|
| 96 |
|
| 97 |
+
= 2.4.0 - 2022-04-28 =
|
| 98 |
+
* **Added:** REST API for reordering posts: `/wp-json/simplepageordering/v1/` (props [@rmccue](https://profiles.wordpress.org/rmccue/), [@ciprianimike](https://github.com/ciprianimike), [@cadic](https://profiles.wordpress.org/cadic/), [@lkraav](https://github.com/lkraav), [@dinhtungdu](https://github.com/dinhtungdu)).
|
| 99 |
+
* **Added:** [REST Endpoint Documentation](https://github.com/10up/simple-page-ordering/blob/develop/README.md).
|
| 100 |
+
* **Added:** Documentation to exclude post types (props [@dzulfriday](https://wordpress.org/support/users/dzulfriday/) [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@jeffpaul](https://profiles.wordpress.org/jeffpaul/)).
|
| 101 |
+
* **Added:** PHP8 compatibility testing GitHub Action (props [@nomnom99](https://profiles.wordpress.org/nomnom99/), [@dharm1025](https://profiles.wordpress.org/dharm1025/)).
|
| 102 |
+
* **Added:** Cypress E2E tests (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@dharm1025](https://profiles.wordpress.org/dharm1025/), [@faisal03](https://profiles.wordpress.org/faisal03/)).
|
| 103 |
+
* **Added:** Dependency security scanning GitHub Action (props [@jeffpaul](https://profiles.wordpress.org/jeffpaul/), [@nomnom99](https://profiles.wordpress.org/nomnom99/)).
|
| 104 |
+
* **Changed:** `PLUGIN_VERSION` to `SIMPLE_PAGE_ORDERING_VERSION` (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@dkotter](https://profiles.wordpress.org/dkotter/)).
|
| 105 |
+
* **Changed:** Bump WordPress "tested up to" version to 5.9 (props [@ankitguptaindia](https://github.com/ankitguptaindia), [@phpbits](https://github.com/phpbits), [@sudip-10up](https://github.com/sudip-10up)).
|
| 106 |
+
* **Security:** Bump rmccue/requests from 1.7.0 to 1.8.0 (props [@dependabot](https://github.com/apps/dependabot)).
|
| 107 |
+
* **Security:** Bump async from 2.6.3 to 2.6.4 (props [@dependabot](https://github.com/apps/dependabot)).
|
| 108 |
+
|
| 109 |
+
= 2.3.4 - 2020-04-07 =
|
| 110 |
+
* **Changed:** Avoid failed reordering introduced in v2.3.3 when handling a large number of non-hierarchical items (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/)).
|
| 111 |
+
* **Changed:** Bump WordPress version support to 5.4 (props [@tmoorewp](https://profiles.wordpress.org/tmoorewp/)).
|
| 112 |
+
* **Fixed:** Ensure titles of reordered items appear in a human-readable way (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/)).
|
| 113 |
+
|
| 114 |
+
= 2.3.3 - 2020-03-04 =
|
| 115 |
+
* **Added:** Nonce verify for AJAX requests (props [@williampatton](https://profiles.wordpress.org/williampatton/), [@dtbaker](https://profiles.wordpress.org/dtbaker/)).
|
| 116 |
+
* **Changed:** Disable Post Revisions now using the correct action of `post_updated` (props [@blue-liquid-designs](https://profiles.wordpress.org/blue-liquid-designs/)).
|
| 117 |
+
* **Changed:** Bump WordPress version "tested up to" 5.3 (props [@adamsilverstein](https://profiles.wordpress.org/adamsilverstein/), [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/)).
|
| 118 |
+
* **Changed:** Documentation updates (props [@jeffpaul](https://profiles.wordpress.org/jeffpaul/)).
|
| 119 |
+
* **Fixed:** Mismatched localized data variable name (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/)).
|
| 120 |
+
* **Fixed:** VIP Go coding standards (props [@mrasharirfan](https://profiles.wordpress.org/mrasharirfan/), [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@pereirinha](https://profiles.wordpress.org/pereirinha/), [@brentvr](https://profiles.wordpress.org/brentvr/)).
|
| 121 |
+
|
| 122 |
+
= 2.3.2 - 2018-05-08 =
|
| 123 |
+
* **Added:** Allow cancellation of drag operation by pressing escape key.
|
| 124 |
+
* **Fixed:** Allow form input elements added to a row by plugins to be interacted with.
|
| 125 |
+
|
| 126 |
+
= 2.3.1 - 2018-04-13 =
|
| 127 |
+
* **Fixed:** Prevent rows with hidden columns from jumping around while dragging.
|
| 128 |
+
|
| 129 |
+
= 2.3.0 - 2018-03-05 =
|
| 130 |
+
* **Added:** Use WordPress core's spinner class.
|
| 131 |
+
* **Added:** Grunt-based build process with Sass.
|
| 132 |
+
* **Changed:** Use `WP_Query` instead of `get_posts()` for better performance.
|
| 133 |
+
* **Changed:** Remove bundled translations in favor of WordPress.org language packs.
|
| 134 |
+
* **Fixed:** Avoid exceeding PHP's max input variables, which could cause incorrectly assigned page order.
|
| 135 |
+
* **Fixed:** Malformed URL that would take you to posts instead of pages.
|
| 136 |
+
* **Fixed:** PHPDoc and coding standards to align with 10up's Engineering Best Practices.
|
| 137 |
+
|
| 138 |
+
= 2.2.4 - 2015-02-08 =
|
| 139 |
+
* **Fixed:** Redundant URL encoding when sorting in admin page list.
|
| 140 |
+
|
| 141 |
+
= 2.2.3 - 2014-09-27 =
|
| 142 |
+
* **Fixed:** Ordering in WordPress 4.0 following core changes to `ORDER BY` in `WP_Query`.
|
| 143 |
+
|
| 144 |
+
= 2.2.2 - 2014-08-19 =
|
| 145 |
+
* **Added:** German localization (props [@glueckpress](https://profiles.wordpress.org/glueckpress/)).
|
| 146 |
+
* **Fixed:** Column widths no longer change when dragging a row (partial props [@griffinjt](https://profiles.wordpress.org/griffinjt/)).
|
| 147 |
+
* **Security:** Closed obscure XSS vulnerability related to Sort by Order link (props [@simon-waters](https://profiles.wordpress.org/simon-waters/)).
|
| 148 |
+
|
| 149 |
+
= 2.2.1 - 2014-05-31 =
|
| 150 |
+
* **Added:** Brazilian translation (props [@felds](https://profiles.wordpress.org/felds/)).
|
| 151 |
+
* **Fixed:** Bring back translations / text domain (yikes!).
|
| 152 |
+
|
| 153 |
+
= 2.2.0 - 2014-04-06 =
|
| 154 |
+
* **Changed:** Look and feel to better match WordPress 3.8 admin redesign.
|
| 155 |
+
* **Changed:** Improved awareness of and compatibility with Quick Edit (inline editor).
|
| 156 |
+
* **Fixed:** Prevent collisions with themes and plugins bundling Simple Page Ordering.
|
| 157 |
+
|
| 158 |
+
= 2.1.2 - 2013-05-30 =
|
| 159 |
* **Fixed:** Hierarchical custom post types without page-attributes was still broken - doh!
|
| 160 |
+
* **Fixed:** Extreme edge case where post columns did not include the post title now supported.
|
| 161 |
|
| 162 |
+
= 2.1.1 - 2013-05-27 =
|
| 163 |
+
* **Fixed:** custom post types with page-attributes or hierarchical properties, but not both, breaking ordering.
|
| 164 |
|
| 165 |
+
= 2.1.0 - 2013-05-19 =
|
| 166 |
+
* **Added:** Awareness of custom user capabilities for post types, in addition to a filter (`simple_page_ordering_edit_rights`) for overriding reordering rights (previously used `edit_others_pages` globally).
|
| 167 |
+
* **Added:** Awareness of custom post statuses (so they are not skipped during backend ordering operation).
|
| 168 |
+
* **Changed:** UI refinements: Better "spinner" positioning (and HiDPI), translucent row when moving, improved appearance of "drop" placeholder, wait till row dragged by at least 5px to start sorting.
|
| 169 |
+
* **Changed:** Major JavaScript refactoring and simplification (combined with new stylesheet) for better performance.
|
| 170 |
|
| 171 |
+
= 2.0.0 - 2012-11-12 =
|
| 172 |
* **Added:** Drag pages into any part of the page hierarchy! No longer limited to same branch of tree!
|
| 173 |
+
* **Added:** Big performance improvements under the hood: leaner queries, batched requests, less processing.
|
| 174 |
+
* **Added:** New filters and hooks to extend / override default functionality.
|
| 175 |
+
* **Changed:** Scales much more reliably in situations with very high page counts due to batching of requests.
|
| 176 |
+
* **Changed:** Order of the first page is now set to "1" instead of "0", so pages added after ordering are added at the top (instead of second).
|
| 177 |
+
* **Changed:** Removed "number of pages" drop down, which is repetitive of a field accessible under Screen Options.
|
| 178 |
+
* **Changed:** Improved compatibility with newer versions of WordPress.
|
| 179 |
+
|
| 180 |
+
= 1.0.0 - 2011-07-04 =
|
| 181 |
+
* **Added:** Support for ordering non-hierarchical post types that have "page-attributes" support.
|
| 182 |
+
* **Added:** New filter link for "Sort by Order" to restore (hierarchical) or set (non-hierarchical, page attributes support) post list sort to menu order.
|
| 183 |
+
* **Changed:** Users are now forced to wait for current sort operation to finish before they can sort another item.
|
| 184 |
+
* **Changed:** Smarter about "not sortable" view states.
|
| 185 |
* **Changed:** Localization ready! Rough Spanish translation included.
|
| 186 |
+
* **Changed:** Assorted other performance and code improvements.
|
| 187 |
+
* **Fixed:** Unexpected page ordering results when pages have not been explictly ordered yet (sorts by menu_order, then title, not just menu_order).
|
| 188 |
+
* **Fixed:** "Per page" drop down filter selection not saving between page loads (was broken in 3.1).
|
| 189 |
+
* **Fixed:** Items are always ordered with positive integers (potential negative sort orders had some performance benefits in last version, but sometimes caused issues).
|
| 190 |
+
|
| 191 |
+
= 0.9.6 - 2011-04-04 =
|
| 192 |
+
* **Fixed:** for broken inline editing (quick edit) fields in Firefox.
|
| 193 |
+
|
| 194 |
+
= 0.9.5 - 2011-03-27 =
|
| 195 |
+
* **Changed:** Smarter awareness of "sorted" modes in WordPress 3.1 (can only use when sorted by menu order).
|
| 196 |
+
* **Changed:** Smarter awareness of "quick edit" mode (can't drag).
|
| 197 |
+
* **Changed:** Generally simplified / better organized code.
|
| 198 |
+
|
| 199 |
+
= 0.9.0 - 2010-12-29 =
|
| 200 |
+
* **Added:** Further directions in the plug-in description (some users were confused about how to use it).
|
| 201 |
+
* **Added:** Basic compatibility with 3.1 RC (prevent clashes with post list sorting).
|
| 202 |
+
* **Changed:** "Move" cursor only set if JavaScript enabled.
|
| 203 |
+
* **Fixed:** Page count display always showing "0" on non-hierarchical post types (Showing 1-X of X).
|
| 204 |
+
* **Fixed:** Hidden menu order not updating after sort (causing Quick Edit to reset order when used right after sorting).
|
| 205 |
+
|
| 206 |
+
= 0.8.4 - 2010-08-24 =
|
| 207 |
+
* **Changed:** Loosened constraints on drag and drop to ease dropping into top and bottom position.
|
| 208 |
+
* **Changed:** Improved some terminology (with custom post types in mind).
|
| 209 |
+
* **Fixed:** Row background staying "white" after dropping into a new position.
|
| 210 |
+
* **Fixed:** Double border on the bottom of the row while dragging.
|
| 211 |
+
|
| 212 |
+
= 0.8.2 - 2010-08-21 =
|
| 213 |
+
* **Changed:** Simplified code - consolidated hooks.
|
| 214 |
+
* **Changed:** Updated version requirements.
|
simple-page-ordering.php
CHANGED
|
@@ -3,17 +3,25 @@
|
|
| 3 |
* Plugin Name: Simple Page Ordering
|
| 4 |
* Plugin URI: http://10up.com/plugins/simple-page-ordering-wordpress/
|
| 5 |
* Description: Order your pages and hierarchical post types using drag and drop on the built in page list. For further instructions, open the "Help" tab on the Pages screen.
|
| 6 |
-
* Version: 2.
|
| 7 |
* Requires at least: 3.8
|
| 8 |
* Author: Jake Goldman, 10up
|
| 9 |
* Author URI: https://10up.com
|
| 10 |
* License: GPLv2 or later
|
| 11 |
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
| 12 |
* Text Domain: simple-page-ordering
|
|
|
|
|
|
|
| 13 |
*/
|
| 14 |
|
|
|
|
|
|
|
|
|
|
| 15 |
if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
| 16 |
|
|
|
|
|
|
|
|
|
|
| 17 |
class Simple_Page_Ordering {
|
| 18 |
|
| 19 |
/**
|
|
@@ -27,7 +35,7 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 27 |
|
| 28 |
if ( null === $instance ) {
|
| 29 |
$instance = new self();
|
| 30 |
-
self::
|
| 31 |
}
|
| 32 |
|
| 33 |
return $instance;
|
|
@@ -43,10 +51,11 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 43 |
/**
|
| 44 |
* Handles registering hooks that initialize this plugin.
|
| 45 |
*/
|
| 46 |
-
public static function
|
| 47 |
add_action( 'load-edit.php', array( __CLASS__, 'load_edit_screen' ) );
|
| 48 |
add_action( 'wp_ajax_simple_page_ordering', array( __CLASS__, 'ajax_simple_page_ordering' ) );
|
| 49 |
add_action( 'plugins_loaded', array( __CLASS__, 'load_textdomain' ) );
|
|
|
|
| 50 |
}
|
| 51 |
|
| 52 |
/**
|
|
@@ -75,10 +84,14 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 75 |
return;
|
| 76 |
}
|
| 77 |
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
'
|
| 81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
add_action( 'wp', array( __CLASS__, 'wp' ) );
|
| 83 |
add_action( 'admin_head', array( __CLASS__, 'admin_head' ) );
|
| 84 |
}
|
|
@@ -100,7 +113,8 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 100 |
'screen_id' => (string) $screen->id,
|
| 101 |
)
|
| 102 |
);
|
| 103 |
-
|
|
|
|
| 104 |
}
|
| 105 |
}
|
| 106 |
|
|
@@ -109,13 +123,20 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 109 |
*/
|
| 110 |
public static function admin_head() {
|
| 111 |
$screen = get_current_screen();
|
| 112 |
-
$screen->add_help_tab(
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
|
|
|
|
|
|
| 117 |
}
|
| 118 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
public static function ajax_simple_page_ordering() {
|
| 120 |
// check and make sure we have what we need
|
| 121 |
if ( empty( $_POST['id'] ) || ( ! isset( $_POST['previd'] ) && ! isset( $_POST['nextid'] ) ) ) {
|
|
@@ -130,8 +151,14 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 130 |
|
| 131 |
check_admin_referer( 'simple-page-ordering_' . sanitize_key( $_POST['screen_id'] ) );
|
| 132 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
// real post?
|
| 134 |
-
$post = empty( $
|
| 135 |
if ( ! $post ) {
|
| 136 |
die( - 1 );
|
| 137 |
}
|
|
@@ -141,26 +168,54 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 141 |
die( - 1 );
|
| 142 |
}
|
| 143 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
// Badly written plug-in hooks for save post can break things.
|
| 145 |
if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
|
| 146 |
-
error_reporting( 0 ); // phpcs:ignore
|
| 147 |
}
|
| 148 |
|
| 149 |
global $wp_version;
|
| 150 |
|
| 151 |
-
$previd = empty( $
|
| 152 |
-
$nextid = empty( $
|
| 153 |
-
$start = empty( $
|
| 154 |
-
$excluded = empty( $
|
| 155 |
|
| 156 |
$new_pos = array(); // store new positions for ajax
|
| 157 |
-
$return_data = new stdClass;
|
| 158 |
|
| 159 |
do_action( 'simple_page_ordering_pre_order_posts', $post, $start );
|
| 160 |
|
| 161 |
// attempt to get the intended parent... if either sibling has a matching parent ID, use that
|
| 162 |
$parent_id = $post->post_parent;
|
| 163 |
$next_post_parent = $nextid ? wp_get_post_parent_id( $nextid ) : false;
|
|
|
|
| 164 |
if ( $previd === $next_post_parent ) { // if the preceding post is the parent of the next post, move it inside
|
| 165 |
$parent_id = $next_post_parent;
|
| 166 |
} elseif ( $next_post_parent !== $parent_id ) { // otherwise, if the next post's parent isn't the same as our parent, we need to study
|
|
@@ -169,20 +224,24 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 169 |
$parent_id = ( false !== $prev_post_parent ) ? $prev_post_parent : $next_post_parent;
|
| 170 |
}
|
| 171 |
}
|
|
|
|
| 172 |
// if the next post's parent isn't our parent, it might as well be false (irrelevant to our query)
|
| 173 |
if ( $next_post_parent !== $parent_id ) {
|
| 174 |
$nextid = false;
|
| 175 |
}
|
| 176 |
|
| 177 |
$max_sortable_posts = (int) apply_filters( 'simple_page_ordering_limit', 50 ); // should reliably be able to do about 50 at a time
|
|
|
|
| 178 |
if ( $max_sortable_posts < 5 ) { // don't be ridiculous!
|
| 179 |
$max_sortable_posts = 50;
|
| 180 |
}
|
| 181 |
|
| 182 |
// we need to handle all post stati, except trash (in case of custom stati)
|
| 183 |
-
$post_stati = get_post_stati(
|
| 184 |
-
|
| 185 |
-
|
|
|
|
|
|
|
| 186 |
|
| 187 |
$siblings_query = array(
|
| 188 |
'depth' => 1,
|
|
@@ -219,17 +278,21 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 219 |
|
| 220 |
// if this is the post that comes after our repositioned post, set our repositioned post position and increment menu order
|
| 221 |
if ( $nextid === $sibling->ID ) {
|
| 222 |
-
wp_update_post(
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
|
|
|
|
|
|
|
|
|
| 227 |
$ancestors = get_post_ancestors( $post->ID );
|
| 228 |
$new_pos[ $post->ID ] = array(
|
| 229 |
'menu_order' => $start,
|
| 230 |
'post_parent' => $parent_id,
|
| 231 |
'depth' => count( $ancestors ),
|
| 232 |
);
|
|
|
|
| 233 |
$start ++;
|
| 234 |
}
|
| 235 |
|
|
@@ -241,20 +304,25 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 241 |
|
| 242 |
// set the menu order of the current sibling and increment the menu order
|
| 243 |
if ( $sibling->menu_order !== $start ) {
|
| 244 |
-
wp_update_post(
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
|
|
|
|
|
|
| 248 |
}
|
| 249 |
$new_pos[ $sibling->ID ] = $start;
|
| 250 |
$start ++;
|
| 251 |
|
| 252 |
if ( ! $nextid && $previd === $sibling->ID ) {
|
| 253 |
-
wp_update_post(
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
|
|
|
|
|
|
|
|
|
| 258 |
$ancestors = get_post_ancestors( $post->ID );
|
| 259 |
$new_pos[ $post->ID ] = array(
|
| 260 |
'menu_order' => $start,
|
|
@@ -298,18 +366,19 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 298 |
);
|
| 299 |
|
| 300 |
if ( $children->have_posts() ) {
|
| 301 |
-
|
| 302 |
}
|
| 303 |
}
|
| 304 |
|
| 305 |
$return_data->new_pos = $new_pos;
|
| 306 |
-
|
|
|
|
| 307 |
}
|
| 308 |
|
| 309 |
/**
|
| 310 |
* Append a sort by order link to the post actions
|
| 311 |
*
|
| 312 |
-
* @param array $views
|
| 313 |
*
|
| 314 |
* @return array
|
| 315 |
*/
|
|
@@ -338,6 +407,82 @@ if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
|
| 338 |
|
| 339 |
return apply_filters( 'simple_page_ordering_edit_rights', current_user_can( $edit_others_cap ), $post_type );
|
| 340 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 341 |
}
|
| 342 |
|
| 343 |
Simple_Page_Ordering::get_instance();
|
| 3 |
* Plugin Name: Simple Page Ordering
|
| 4 |
* Plugin URI: http://10up.com/plugins/simple-page-ordering-wordpress/
|
| 5 |
* Description: Order your pages and hierarchical post types using drag and drop on the built in page list. For further instructions, open the "Help" tab on the Pages screen.
|
| 6 |
+
* Version: 2.4.0
|
| 7 |
* Requires at least: 3.8
|
| 8 |
* Author: Jake Goldman, 10up
|
| 9 |
* Author URI: https://10up.com
|
| 10 |
* License: GPLv2 or later
|
| 11 |
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
| 12 |
* Text Domain: simple-page-ordering
|
| 13 |
+
*
|
| 14 |
+
* @package simple-page-ordering
|
| 15 |
*/
|
| 16 |
|
| 17 |
+
// Useful global constants.
|
| 18 |
+
define( 'SIMPLE_PAGE_ORDERING_VERSION', '2.4.0' );
|
| 19 |
+
|
| 20 |
if ( ! class_exists( 'Simple_Page_Ordering' ) ) :
|
| 21 |
|
| 22 |
+
/**
|
| 23 |
+
* Simple_Page_Ordering class
|
| 24 |
+
*/
|
| 25 |
class Simple_Page_Ordering {
|
| 26 |
|
| 27 |
/**
|
| 35 |
|
| 36 |
if ( null === $instance ) {
|
| 37 |
$instance = new self();
|
| 38 |
+
self::add_actions();
|
| 39 |
}
|
| 40 |
|
| 41 |
return $instance;
|
| 51 |
/**
|
| 52 |
* Handles registering hooks that initialize this plugin.
|
| 53 |
*/
|
| 54 |
+
public static function add_actions() {
|
| 55 |
add_action( 'load-edit.php', array( __CLASS__, 'load_edit_screen' ) );
|
| 56 |
add_action( 'wp_ajax_simple_page_ordering', array( __CLASS__, 'ajax_simple_page_ordering' ) );
|
| 57 |
add_action( 'plugins_loaded', array( __CLASS__, 'load_textdomain' ) );
|
| 58 |
+
add_action( 'rest_api_init', array( __CLASS__, 'rest_api_init' ) );
|
| 59 |
}
|
| 60 |
|
| 61 |
/**
|
| 84 |
return;
|
| 85 |
}
|
| 86 |
|
| 87 |
+
// add view by menu order to views
|
| 88 |
+
add_filter(
|
| 89 |
+
'views_' . $screen->id,
|
| 90 |
+
array(
|
| 91 |
+
__CLASS__,
|
| 92 |
+
'sort_by_order_link',
|
| 93 |
+
)
|
| 94 |
+
);
|
| 95 |
add_action( 'wp', array( __CLASS__, 'wp' ) );
|
| 96 |
add_action( 'admin_head', array( __CLASS__, 'admin_head' ) );
|
| 97 |
}
|
| 113 |
'screen_id' => (string) $screen->id,
|
| 114 |
)
|
| 115 |
);
|
| 116 |
+
|
| 117 |
+
wp_enqueue_style( 'simple-page-ordering', plugins_url( '/assets/css/simple-page-ordering.css', __FILE__ ), [], SIMPLE_PAGE_ORDERING_VERSION );
|
| 118 |
}
|
| 119 |
}
|
| 120 |
|
| 123 |
*/
|
| 124 |
public static function admin_head() {
|
| 125 |
$screen = get_current_screen();
|
| 126 |
+
$screen->add_help_tab(
|
| 127 |
+
array(
|
| 128 |
+
'id' => 'simple_page_ordering_help_tab',
|
| 129 |
+
'title' => 'Simple Page Ordering',
|
| 130 |
+
'content' => '<p>' . __( 'To reposition an item, simply drag and drop the row by "clicking and holding" it anywhere (outside of the links and form controls) and moving it to its new position.', 'simple-page-ordering' ) . '</p>',
|
| 131 |
+
)
|
| 132 |
+
);
|
| 133 |
}
|
| 134 |
|
| 135 |
+
/**
|
| 136 |
+
* Page ordering ajax callback
|
| 137 |
+
*
|
| 138 |
+
* @return void
|
| 139 |
+
*/
|
| 140 |
public static function ajax_simple_page_ordering() {
|
| 141 |
// check and make sure we have what we need
|
| 142 |
if ( empty( $_POST['id'] ) || ( ! isset( $_POST['previd'] ) && ! isset( $_POST['nextid'] ) ) ) {
|
| 151 |
|
| 152 |
check_admin_referer( 'simple-page-ordering_' . sanitize_key( $_POST['screen_id'] ) );
|
| 153 |
|
| 154 |
+
$post_id = empty( $_POST['id'] ) ? false : (int) $_POST['id'];
|
| 155 |
+
$previd = empty( $_POST['previd'] ) ? false : (int) $_POST['previd'];
|
| 156 |
+
$nextid = empty( $_POST['nextid'] ) ? false : (int) $_POST['nextid'];
|
| 157 |
+
$start = empty( $_POST['start'] ) ? 1 : (int) $_POST['start'];
|
| 158 |
+
$excluded = empty( $_POST['excluded'] ) ? array( $_POST['id'] ) : array_filter( (array) json_decode( $_POST['excluded'] ), 'intval' );
|
| 159 |
+
|
| 160 |
// real post?
|
| 161 |
+
$post = empty( $post_id ) ? false : get_post( (int) $post_id );
|
| 162 |
if ( ! $post ) {
|
| 163 |
die( - 1 );
|
| 164 |
}
|
| 168 |
die( - 1 );
|
| 169 |
}
|
| 170 |
|
| 171 |
+
$result = self::page_ordering( $post_id, $previd, $nextid, $start, $excluded );
|
| 172 |
+
|
| 173 |
+
if ( is_wp_error( $result ) ) {
|
| 174 |
+
die( -1 );
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
die( wp_json_encode( $result ) );
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
/**
|
| 181 |
+
* Page ordering function
|
| 182 |
+
*
|
| 183 |
+
* @param int $post_id The post ID.
|
| 184 |
+
* @param int $previd The previous post ID.
|
| 185 |
+
* @param int $nextid The next post ID.
|
| 186 |
+
* @param int $start The start index.
|
| 187 |
+
* @param array $excluded Array of post IDs.
|
| 188 |
+
*
|
| 189 |
+
* @return obj|WP_Error
|
| 190 |
+
*/
|
| 191 |
+
public static function page_ordering( $post_id, $previd, $nextid, $start, $excluded ) {
|
| 192 |
+
// real post?
|
| 193 |
+
$post = empty( $post_id ) ? false : get_post( (int) $post_id );
|
| 194 |
+
if ( ! $post ) {
|
| 195 |
+
return new WP_Error( __( 'Missing mandatory parameters.', 'simple-page-ordering' ) );
|
| 196 |
+
}
|
| 197 |
+
|
| 198 |
// Badly written plug-in hooks for save post can break things.
|
| 199 |
if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
|
| 200 |
+
error_reporting( 0 ); // phpcs:ignore
|
| 201 |
}
|
| 202 |
|
| 203 |
global $wp_version;
|
| 204 |
|
| 205 |
+
$previd = empty( $previd ) ? false : (int) $previd;
|
| 206 |
+
$nextid = empty( $nextid ) ? false : (int) $nextid;
|
| 207 |
+
$start = empty( $start ) ? 1 : (int) $start;
|
| 208 |
+
$excluded = empty( $excluded ) ? array( $post_id ) : array_filter( (array) $excluded, 'intval' );
|
| 209 |
|
| 210 |
$new_pos = array(); // store new positions for ajax
|
| 211 |
+
$return_data = new stdClass();
|
| 212 |
|
| 213 |
do_action( 'simple_page_ordering_pre_order_posts', $post, $start );
|
| 214 |
|
| 215 |
// attempt to get the intended parent... if either sibling has a matching parent ID, use that
|
| 216 |
$parent_id = $post->post_parent;
|
| 217 |
$next_post_parent = $nextid ? wp_get_post_parent_id( $nextid ) : false;
|
| 218 |
+
|
| 219 |
if ( $previd === $next_post_parent ) { // if the preceding post is the parent of the next post, move it inside
|
| 220 |
$parent_id = $next_post_parent;
|
| 221 |
} elseif ( $next_post_parent !== $parent_id ) { // otherwise, if the next post's parent isn't the same as our parent, we need to study
|
| 224 |
$parent_id = ( false !== $prev_post_parent ) ? $prev_post_parent : $next_post_parent;
|
| 225 |
}
|
| 226 |
}
|
| 227 |
+
|
| 228 |
// if the next post's parent isn't our parent, it might as well be false (irrelevant to our query)
|
| 229 |
if ( $next_post_parent !== $parent_id ) {
|
| 230 |
$nextid = false;
|
| 231 |
}
|
| 232 |
|
| 233 |
$max_sortable_posts = (int) apply_filters( 'simple_page_ordering_limit', 50 ); // should reliably be able to do about 50 at a time
|
| 234 |
+
|
| 235 |
if ( $max_sortable_posts < 5 ) { // don't be ridiculous!
|
| 236 |
$max_sortable_posts = 50;
|
| 237 |
}
|
| 238 |
|
| 239 |
// we need to handle all post stati, except trash (in case of custom stati)
|
| 240 |
+
$post_stati = get_post_stati(
|
| 241 |
+
array(
|
| 242 |
+
'show_in_admin_all_list' => true,
|
| 243 |
+
)
|
| 244 |
+
);
|
| 245 |
|
| 246 |
$siblings_query = array(
|
| 247 |
'depth' => 1,
|
| 278 |
|
| 279 |
// if this is the post that comes after our repositioned post, set our repositioned post position and increment menu order
|
| 280 |
if ( $nextid === $sibling->ID ) {
|
| 281 |
+
wp_update_post(
|
| 282 |
+
array(
|
| 283 |
+
'ID' => $post->ID,
|
| 284 |
+
'menu_order' => $start,
|
| 285 |
+
'post_parent' => $parent_id,
|
| 286 |
+
)
|
| 287 |
+
);
|
| 288 |
+
|
| 289 |
$ancestors = get_post_ancestors( $post->ID );
|
| 290 |
$new_pos[ $post->ID ] = array(
|
| 291 |
'menu_order' => $start,
|
| 292 |
'post_parent' => $parent_id,
|
| 293 |
'depth' => count( $ancestors ),
|
| 294 |
);
|
| 295 |
+
|
| 296 |
$start ++;
|
| 297 |
}
|
| 298 |
|
| 304 |
|
| 305 |
// set the menu order of the current sibling and increment the menu order
|
| 306 |
if ( $sibling->menu_order !== $start ) {
|
| 307 |
+
wp_update_post(
|
| 308 |
+
array(
|
| 309 |
+
'ID' => $sibling->ID,
|
| 310 |
+
'menu_order' => $start,
|
| 311 |
+
)
|
| 312 |
+
);
|
| 313 |
}
|
| 314 |
$new_pos[ $sibling->ID ] = $start;
|
| 315 |
$start ++;
|
| 316 |
|
| 317 |
if ( ! $nextid && $previd === $sibling->ID ) {
|
| 318 |
+
wp_update_post(
|
| 319 |
+
array(
|
| 320 |
+
'ID' => $post->ID,
|
| 321 |
+
'menu_order' => $start,
|
| 322 |
+
'post_parent' => $parent_id,
|
| 323 |
+
)
|
| 324 |
+
);
|
| 325 |
+
|
| 326 |
$ancestors = get_post_ancestors( $post->ID );
|
| 327 |
$new_pos[ $post->ID ] = array(
|
| 328 |
'menu_order' => $start,
|
| 366 |
);
|
| 367 |
|
| 368 |
if ( $children->have_posts() ) {
|
| 369 |
+
return( 'children' );
|
| 370 |
}
|
| 371 |
}
|
| 372 |
|
| 373 |
$return_data->new_pos = $new_pos;
|
| 374 |
+
|
| 375 |
+
return $return_data;
|
| 376 |
}
|
| 377 |
|
| 378 |
/**
|
| 379 |
* Append a sort by order link to the post actions
|
| 380 |
*
|
| 381 |
+
* @param array $views An array of available list table views.
|
| 382 |
*
|
| 383 |
* @return array
|
| 384 |
*/
|
| 407 |
|
| 408 |
return apply_filters( 'simple_page_ordering_edit_rights', current_user_can( $edit_others_cap ), $post_type );
|
| 409 |
}
|
| 410 |
+
|
| 411 |
+
/**
|
| 412 |
+
* Registers the API endpoint for sorting from the REST endpoint
|
| 413 |
+
*/
|
| 414 |
+
public static function rest_api_init() {
|
| 415 |
+
register_rest_route(
|
| 416 |
+
'simple-page-ordering/v1',
|
| 417 |
+
'page_ordering',
|
| 418 |
+
[
|
| 419 |
+
'methods' => 'POST',
|
| 420 |
+
'callback' => array( __CLASS__, 'rest_page_ordering' ),
|
| 421 |
+
'permission_callback' => '__return_true',
|
| 422 |
+
'args' => [
|
| 423 |
+
'id' => [
|
| 424 |
+
'description' => 'Post ID.',
|
| 425 |
+
'required' => true,
|
| 426 |
+
'type' => 'numeric',
|
| 427 |
+
],
|
| 428 |
+
'previd' => [
|
| 429 |
+
'description' => 'Previous post ID',
|
| 430 |
+
'required' => true,
|
| 431 |
+
'type' => 'numeric',
|
| 432 |
+
],
|
| 433 |
+
'nextid' => [
|
| 434 |
+
'description' => 'Next post ID',
|
| 435 |
+
'required' => true,
|
| 436 |
+
'type' => 'numeric',
|
| 437 |
+
],
|
| 438 |
+
'start' => [
|
| 439 |
+
'default' => 1,
|
| 440 |
+
'description' => 'Start index',
|
| 441 |
+
'required' => false,
|
| 442 |
+
'type' => 'numeric',
|
| 443 |
+
],
|
| 444 |
+
'exclude' => [
|
| 445 |
+
'default' => [],
|
| 446 |
+
'description' => 'Array of excluded post IDs',
|
| 447 |
+
'required' => false,
|
| 448 |
+
'type' => 'array',
|
| 449 |
+
],
|
| 450 |
+
],
|
| 451 |
+
]
|
| 452 |
+
);
|
| 453 |
+
}
|
| 454 |
+
|
| 455 |
+
/**
|
| 456 |
+
* Handle REST page sorting
|
| 457 |
+
*
|
| 458 |
+
* @param WP_REST_Request $request The REST request object.
|
| 459 |
+
*/
|
| 460 |
+
public static function rest_page_ordering( WP_REST_Request $request ) {
|
| 461 |
+
$post_id = empty( $request->get_param( 'id' ) ) ? false : (int) $request->get_param( 'id' );
|
| 462 |
+
$previd = empty( $request->get_param( 'previd' ) ) ? false : (int) $request->get_param( 'previd' );
|
| 463 |
+
$nextid = empty( $request->get_param( 'nextid' ) ) ? false : (int) $request->get_param( 'nextid' );
|
| 464 |
+
$start = empty( $request->get_param( 'start' ) ) ? 1 : (int) $request->get_param( 'start' );
|
| 465 |
+
$excluded = empty( $request->get_param( 'excluded' ) ) ? array( $request->get_param( 'id' ) ) : array_filter( (array) json_decode( $request->get_param( 'excluded' ) ), 'intval' );
|
| 466 |
+
|
| 467 |
+
// check and make sure we have what we need
|
| 468 |
+
if ( empty( $post_id ) || ( ! isset( $previd ) && ! isset( $nextid ) ) ) {
|
| 469 |
+
return new WP_Error( __( 'Missing mandatory parameters.', 'simple-page-ordering' ) );
|
| 470 |
+
}
|
| 471 |
+
|
| 472 |
+
$page_ordering = self::page_ordering( $post_id, $previd, $nextid, $start, $excluded );
|
| 473 |
+
|
| 474 |
+
if ( is_wp_error( $page_ordering ) ) {
|
| 475 |
+
return $page_ordering;
|
| 476 |
+
}
|
| 477 |
+
|
| 478 |
+
return new WP_REST_Response(
|
| 479 |
+
array(
|
| 480 |
+
'status' => 200,
|
| 481 |
+
'response' => 'successs',
|
| 482 |
+
'body_response' => $page_ordering,
|
| 483 |
+
)
|
| 484 |
+
);
|
| 485 |
+
}
|
| 486 |
}
|
| 487 |
|
| 488 |
Simple_Page_Ordering::get_instance();
|
