Descripción
Simple Custom Post Order es la forma más fácil de ordenar manualmente tu contenido de WordPress usando la funcionalidad de arrastrar y soltar. Ya sea que estés gestionando entradas de blog, elementos de portafolio, productos de WooCommerce, miembros del equipo, testimonios o cualquier tipo de entrada personalizado, este plugin te da control total sobre el orden de tu contenido.
¿Por qué elegir Simple Custom Post Order?
- Quick Setup – Tick the post types and taxonomies to sort under Settings > SCPOrder, then drag
- Interfaz de arrastrar y soltar: ordenamiento intuitivo directamente en tus listas de entradas de administración
- Compatibilidad universal: funciona con cualquier tipo de entrada y taxonomía
- Ligero y rápido: sin bloat, impacto mínimo en el rendimiento del sitio
- Moderno y sin dependencias: arrastrar y soltar con JavaScript vanilla (sin jQuery UI) con soporte táctil y completo para teclado
- Guardado fiable: guardado AJAX robusto que funciona detrás de proxies inversos, puertos personalizados y configuraciones HTTPS
- Amigable para desarrolladores – Ganchos de acción y filtro para personalización
Características principales
Ordenar cualquier tipo de contenido
- Entradas: reordena las entradas de tu blog en cualquier secuencia que prefieras
- Páginas: organiza las páginas más allá del orden alfabético o por fecha
- Tipos de entrada personalizados: perfecto para portafolios, miembros del equipo, testimonios, productos, eventos, preguntas frecuentes, servicios y más
- Productos de WooCommerce: ordena manualmente los productos en tu tienda
- Taxonomías: reordena categorías, etiquetas y taxonomías personalizadas
Interfaz de administración intuitiva
- Ordenamiento suave de arrastrar y soltar directamente en la tabla de listado de entradas de WordPress
- Compatible con táctil: presiona, mantén y arrastra para reordenar en teléfonos y tabletas
- Totalmente accesible por teclado: navega con tabulador a una fila, luego usa la barra espaciadora y las teclas de flecha para reordenar, con anuncios para lectores de pantalla
- Retroalimentación clara de guardado: aparece un estado «Guardando… / Orden guardado» mientras ordenas
- Drag handle — a grip icon appears on hover (on by default; can be turned off), and rows stay draggable from anywhere
- Page trees — dragging a parent page carries its child pages with it, and keyboard moves stay among a page’s siblings
- Optional «Order» column — type an exact position, handy for moving an item to another page of a long list
- Elige si los artículos recién creados van al principio (por defecto) o al final del orden.
- Elige qué perfiles de usuario pueden reordenar
- Los cambios se guardan automáticamente mediante AJAX – no hace falta recargar la página, y hay un botón «Reintentar» si falla un guardado.
- Conflicting edits are rejected with a recovery message; the Modern engine offers a Reload list button
- The Modern engine warns before leaving with pending or failed saves
- Funciona a la perfección con la experiencia de administración predeterminada de WordPress
Integración inteligente de consultas
- Automatically applies the custom order to queries for enabled post types that don’t ask for a specific order
- Respects an explicit sort such as
orderby => title(see the FAQ for the oneget_posts()exception) - No interfiere con los resultados de búsqueda (mantiene el orden por relevancia)
- Previous/next post links follow the custom order
- Compatible con
get_posts(),WP_Queryy bucles estándar - Opt out per query with
'scpo_ignore_custom_order' => true
Restablecer y restaurar
- Restablecimiento con un solo clic para restaurar el orden predeterminado
- Restablece tipos de entrada individuales sin afectar a otros
- Útil cuando necesitas empezar de cero con la organización de tu contenido
Ideal para
- Blogueros: destaca entradas importantes en la parte superior de tu blog
- Sitios de negocios: muestra primero los servicios clave o los miembros del equipo
- Sitios de portafolio: muestra tu mejor trabajo en un orden específico
- Tiendas en línea: destaca productos destacados o de temporada
- Sitios de membresía: organiza el contenido del curso o los recursos
- Sitios de noticias: fija historias importantes o anuncios
- Sitios de eventos: organiza los eventos en la secuencia que prefieras
- Sitios de documentación: estructura los artículos de ayuda de forma lógica
Casos de uso
Gestión de portafolios
Organiza los elementos de tu portafolio para mostrar primero tu mejor trabajo, agrupar proyectos similares o crear una narrativa visual de tu trayectoria creativa.
Organización de la página del equipo
Muestra los miembros del equipo por jerarquía, departamento o antigüedad en lugar de por cuándo se añadieron al sistema.
Destacado de productos
Destaca artículos de temporada, más vendidos o novedades en la parte superior de tu tienda WooCommerce sin depender únicamente del orden por fecha o precio.
Selección de contenido
Crea listas de lectura seleccionadas ordenando manualmente las entradas en la secuencia exacta en la que quieres que los lectores las descubran.
Organización de preguntas frecuentes
Ordena las preguntas frecuentes por importancia o tema, asegurando que las preguntas más relevantes aparezcan primero.
Visualización de testimonios
Muestra primero tus testimonios más convincentes para maximizar su impacto en los clientes potenciales.
Características para desarrolladores
Hooks de acción
scp_update_menu_order– Fires after post order is updated, by drag-and-drop or the Order column (no arguments)scp_update_menu_order_tags– Se dispara después de que se actualice el orden de los términos de taxonomía (sin argumentos)
Hooks de filtro
scpo_post_types_args– Modifica qué tipos de entrada aparecen en los ajustesscpo_use_sortablejs– Fuerza el motor de arrastre en el código (anula el ajuste); devuelvetruepara el motor moderno SortableJS ofalsepara el ordenador clásico de jQuery UIscpo_capability– Cambia la capacidad necesaria para reordenar (predeterminadoedit_posts)scpo_reverse_adjacent_posts– Returntrueto swap the direction of previous/next post linksscpo_cache_flush_group_threshold– Number of changed rows (default 500) above which cached order values are cleared in bulk instead of one by one
Example — let only editors and administrators reorder:
add_filter( 'scpo_capability', function () { return 'edit_others_posts'; } );
Motor de arrastrar y soltar
Elige entre el motor moderno SortableJS sin dependencias (predeterminado) y el ordenador clásico de jQuery UI en Ajustes > SCPOrder. El motor clásico sigue siendo totalmente compatible como alternativa.
Modo de vista avanzado
Activa la vista avanzada en los ajustes para ver todos los tipos de entrada registrados, incluidos los que normalmente están ocultos en el menú de administración.
Tipos de entrada compatibles
Simple Custom Post Order funciona con:
- Entradas de WordPress
- Páginas de WordPress
- Productos de WooCommerce
- Productos de Easy Digital Downloads
- Elementos de portafolio (Jetpack, personalizados)
- Tipos de entrada de miembros del equipo
- Tipos de entrada de testimonios
- Tipos de entrada de eventos (The Events Calendar, etc.)
- Tipos de entrada de preguntas frecuentes
- Any custom post type with
show_uienabled that appears in the admin menu (turn on Advanced View in Settings to list the rest)
Taxonomías compatibles
- Categorías
- Etiquetas
- Categorías de producto de WooCommerce
- Etiquetas de producto de WooCommerce
- Taxonomías personalizadas con
show_uiactivado
Cómo funciona
- Instalar y activar: instala el plugin desde WordPress.org o súbelo manualmente
- Configure – Go to Settings > SCPOrder and select which post types and taxonomies to enable (nothing is sorted until you do)
- Reordenar: visita cualquier lista de tipos de entrada activados y arrastra elementos para reordenar
- Hecho – Tu orden personalizado se aplica automáticamente en todo tu sitio.
El plugin usa el campo nativo de WordPress menu_order para entradas y páginas, y añade una columna term_order para los términos de taxonomía. Este enfoque asegura la compatibilidad y la persistencia de los datos.
Optimizado para el rendimiento
- Invalidación de caché específica (solo borra la caché de los elementos modificados)
- Batched database writes that only touch rows whose order actually changed
- Los scripts solo se cargan en las páginas de administración relevantes
- Sin impacto en el rendimiento del frontend
Primero la seguridad
- Todas las consultas a la base de datos usan sentencias preparadas
- Las solicitudes AJAX están protegidas con verificación de nonce
- Las comprobaciones de capacidad aseguran que solo los usuarios autorizados puedan reordenar
- Saneamiento de entrada en todos los datos de usuario
Información adicional
Soporte
Para preguntas de soporte, usa el foro de soporte de WordPress.org.
Informes de errores
Reporta errores en nuestro repositorio de GitHub.
Contribuir
¡Las contribuciones son bienvenidas! Envía pull requests a nuestro repositorio de GitHub.
Créditos
Este plugin está hecho con cariño por el equipo de Colorlib.
Capturas
Instalación
Database Requirement
InnoDB, MyISAM, and MariaDB Aria ordering tables are supported. No table conversion is performed. InnoDB saves use transactions. MyISAM/Aria and hosts that hide engine metadata use one guarded UPDATE, with snapshot checking and no multi-batch writes. These nontransactional engines cannot roll back partial changes after a server crash, killed query, or mid-statement error; reload before retrying an unconfirmed save.
Instalación automática
- Inicia sesión en el panel de administración de WordPress
- Ve a Plugins > Añadir nuevo
- Busca «Simple Custom Post Order»
- Haz clic en «Instalar ahora» y luego en «Activar»
- Ve a Ajustes > SCPOrder para configurar
Instalación manual
- Descarga el archivo ZIP del plugin
- Inicia sesión en el panel de administración de WordPress
- Ve a Plugins > Añadir nuevo > Subir plugin
- Elige el archivo ZIP descargado y haz clic en «Instalar ahora»
- Activa el plugin
- Ve a Ajustes > SCPOrder para configurar
Configuración
- Ve a Ajustes > SCPOrder
- Marca las casillas junto a los tipos de entrada para los que quieras activar el ordenamiento
- Marca las casillas junto a las taxonomías para las que quieras activar el ordenamiento
- Click «Save Changes»
- Visita cualquier lista de tipos de entrada activados para empezar a reordenar con arrastrar y soltar
FAQ
-
¿Funciona este plugin con tipos de entrada personalizados?
-
¡Sí! Simple Custom Post Order funciona con cualquier tipo de entrada personalizado que tenga
show_uiactivado. Esto incluye tipos de entrada de plugins populares como WooCommerce, Easy Digital Downloads, Jetpack y cualquier tipo de entrada personalizado que hayas creado. -
¿Aparecerá el orden personalizado en el frontend de mi sitio web?
-
Sí, el orden personalizado se aplica automáticamente a todas las consultas del frontend para los tipos de entrada activados. Tus entradas, páginas y contenido personalizado se mostrarán en el orden que hayas elegido en todo tu sitio.
-
¿Funciona con constructores de páginas como Elementor o Divi?
-
Sí, siempre que el constructor de páginas use consultas estándar de WordPress, se respetará tu orden personalizado. La mayoría de los constructores de páginas principales son compatibles.
-
¿Puedo restablecer el orden a los valores predeterminados?
-
Yes. Go to Settings > SCPOrder and use the «Reset Post Order» section at the bottom of the page. Select the post types you want to reset and click «Reset Order».
Be aware that this sets the order number of every item of those types back to 0 — including values typed into Page Attributes > Order and WooCommerce’s own product order — and turns sorting off for those types. It cannot be undone. Taxonomies cannot be reset from here.
-
¿Afecta a los resultados de búsqueda?
-
No, el plugin preserva automáticamente el ordenamiento basado en relevancia de WordPress para los resultados de búsqueda. Tu funcionalidad de búsqueda funcionará exactamente como se espera.
-
¿Es compatible con WooCommerce?
-
Sí, puedes usar Simple Custom Post Order para ordenar manualmente productos de WooCommerce, categorías de productos y etiquetas de productos.
When this plugin orders product categories or attributes, WooCommerce’s own category sorter (the ☰ handle) is switched off so only one sorter saves the order.
-
How do I show the custom order in a Query Loop block?
-
The Query Loop block always sends its own sort, which the plugin respects. Select the block, and under Order by choose Ascending by order. Every post type enabled in Settings SCPOrder offers that option. Archive templates that inherit the query use the custom order automatically.
-
¿Ralentizará mi sitio web?
-
No, el plugin está altamente optimizado. Solo carga scripts en las páginas de administración relevantes y utiliza consultas de base de datos eficientes. No hay impacto en el rendimiento del frontend.
-
¿Pueden varios usuarios reordenar al mismo tiempo?
-
Yes. Modern and Classic drags send the list’s original order, and numeric moves send the item’s original value. If these are stale, the plugin rejects the save and asks you to reload before reordering again. Older integrations that omit these fields retain their legacy behavior. See the recovery details below.
-
¿Funciona con multisitio?
-
Sí, Simple Custom Post Order es compatible con las instalaciones multisitio de WordPress. Cada sitio puede tener su propia configuración de orden.
-
¿Cómo reordeno los elementos?
-
Simplemente ve a la lista de entradas de cualquier tipo de entrada activado (entradas, páginas, productos, etc.), haz clic y mantén presionada una fila, luego arrástrala hasta la posición deseada. El nuevo orden se guarda automáticamente.
-
¿Funciona el arrastrar y soltar en dispositivos táctiles?
-
Sí. En teléfonos y tabletas, mantén presionada una fila durante un momento y luego arrástrala para reordenar. Los toques normales y el desplazamiento vertical siguen funcionando con normalidad.
-
¿Puedo reordenar usando solo el teclado?
-
Sí. Pulsa la tecla Tab hasta llegar al asa de arrastre de una fila, presiona Espacio (o Intro) para seleccionarla, usa las teclas de flecha Arriba/Abajo (o Inicio/Fin) para moverla, y luego presiona Espacio para soltarla o Escape para cancelar. Cada paso se anuncia para los usuarios de lectores de pantalla.
-
¿Puedo volver al ordenamiento clásico de jQuery?
-
Sí. Ve a Ajustes > SCPOrder y establece el «Motor de arrastrar y soltar» en «Clásico». Los desarrolladores también pueden forzarlo en el código con el filtro
scpo_use_sortablejs(devuelvefalsepara el motor clásico). El motor moderno es el predeterminado y se recomienda para la mayoría de los sitios. -
Mi reordenación no se guardaba en una versión anterior, ¿está solucionado?
-
Sí. A partir de la versión 2.7.0, la solicitud de guardado siempre se envía al mismo origen, lo que soluciona los fallos de guardado silenciosos detrás de proxies inversos, balanceadores de carga, puertos no estándar y discrepancias de HTTP/HTTPS o de dominio. Los tokens de seguridad caducados ahora también se actualizan y reintentan automáticamente.
-
Why is drag and drop turned off with a notice on one of my lists?
-
The list isn’t shown in its custom order, so your theme or another plugin is sorting it, often with a
pre_get_postsorget_termsfilter in the admin. Saving there would replace your custom order with that order, so the plugin doesn’t allow it. Remove or limit that code (for example, skip it in the admin) and drag and drop comes back. -
What happens if another editor changes the order?
-
New drag requests include the saved values of the displayed rows; older clients include their displayed order. If another request changed that order, the save is rejected and the Modern engine offers “Reload list”. Numeric moves also check the item’s original order value. Requests from older integrations without these fields retain their legacy behavior.
On InnoDB, drag and numeric saves use transactions: a failed batch rolls back earlier batches and caller transactions are preserved with savepoints. MyISAM/Aria use a single guarded statement with the same snapshot checks, without converting tables or requiring explicit table-lock privileges. Large requests that cannot fit one statement are refused before writing. MyISAM/Aria cannot provide transactional rollback after server or mid-statement failures; an error can leave an uncertain or partially changed order, so reload before retrying. Reset Order’s settings update is separate from its database write.
The Modern engine warns before leaving while an order is unsaved. Once saving succeeds, the warning is removed.
-
¿Puedo anular el orden personalizado mediante programación?
-
Yes. With
WP_Query, a query for an enabled post type that sets its ownorderby(for example'orderby' => 'title', 'order' => 'DESC') keeps it. A query without anorderbygets the custom order.get_posts() is different: it fills in `orderby => date, order => DESC` before the plugin sees the query, so the plugin can't tell what you actually asked for. It gives the default date sort the custom order and, for compatibility, turns a descending sort ascending — except on the date columns `post_date`, `modified` and `post_modified`. So to get the newest items first with `get_posts()`, use `'orderby' => 'post_date'`; for any other descending sort, use `WP_Query`.To bypass this plugin’s automatic post ordering for one query, pass
'scpo_ignore_custom_order' => true. This works with bothWP_Queryandget_posts(), including descending title or date sorts:$posts = get_posts( [ 'post_type' => 'post', 'orderby' => 'title', 'order' => 'DESC', 'scpo_ignore_custom_order' => true, ] );The opt-out leaves the query’s ordering arguments untouched; it does not change saved order values or other queries. Omit it to retain the existing automatic ordering behavior.
For taxonomy terms,
get_terms()and similar calls get the custom order for the usual sorts (name, slug, ID, WooCommerce’s category order). Sorts that mean something else are respected:count,include,slug__in,name__in,parent,term_taxonomy_id, meta values andnone. Clicking a column heading in the admin always wins. -
How do I show previous/next links that follow my custom order?
-
WordPress’s own previous/next functions already follow the custom order for every enabled post type, pages included. Many themes only print those links on blog posts, though. In a block theme, add the Previous Post and Next Post blocks to the relevant template (Appearance > Editor > Templates). In a classic theme, call
the_post_navigation()in the template, or add the links under every page’s content from your child theme’sfunctions.php:add_filter( 'the_content', function ( $content ) { if ( ! is_page() || ! in_the_loop() || ! is_main_query() ) { return $content; } return $content . get_the_post_navigation(); } );For pages, the links follow the order shown under Pages > All Pages: each parent, then its children. Use the
scpo_reverse_adjacent_postsfilter if «previous» and «next» come out the wrong way round for you. -
Can I move an item to another page of a long list?
-
Drag-and-drop works within the page you are looking at. To move an item further, turn on the «Order column» option in Settings > SCPOrder and type the position you want into the item’s Order box. The Order column is not available for hierarchical types such as Pages.
-
Why can’t I drag on the Drafts view or in search results?
-
Esas vistas están ordenadas por algo distinto de tu orden personalizado (fecha de última modificación, relevancia de búsqueda), así que arrastrar ahí lo desordenaría. Reordena desde la vista «Todas» en su lugar. Lo mismo se aplica después de hacer clic en el encabezado de una columna para ordenar por ella.
-
How do parent and child pages behave?
-
Arrastrar una página padre mueve sus páginas hijas con ella. Con el teclado, una página se mueve solo entre sus propios hermanos. La reordenación nunca cambia la página padre de una página; usa Edición rápida o el editor de páginas para eso.
-
What happens when I deactivate or delete the plugin?
-
Desactivar lo deja todo en su sitio, así que al reactivar se restaura tu orden. Borrar el plugin elimina sus ajustes y la columna
term_orderque añadió para la ordenación de taxonomías, por lo que se pierde el orden de los términos. Los valores de orden de entradas y páginas (menu_order) son de WordPress y se dejan como están.
Reseñas
Colaboradores y desarrolladores
«Simple Custom Post Order» es un software de código abierto. Las siguientes personas han colaborado con este plugin.
Colaboradores«Simple Custom Post Order» está traducido en 19 idiomas. Gracias a los traductores por sus contribuciones.
Traduce «Simple Custom Post Order» a tu idioma.
¿Interesado en el desarrollo?
Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.
Registro de cambios
2.8.12 – 2026-11-03
- Fixed WooCommerce product category drags that showed «Order saved» but snapped back on reload, or reported «The order changed in another window». WooCommerce’s own category sorter (the ☰ handle) ran alongside ours; it is now switched off wherever this plugin orders the list.
- Fixed the WooCommerce Product Categories widget set to «Category order» showing an old order. It now follows the custom order.
- Fixed WooCommerce category queries that ask only for IDs or a limited number of categories ignoring the custom order.
- When a theme or another plugin sorts an admin list itself (for example a
pre_get_postshook forcing date order), drag and drop is turned off on that list with a notice explaining why, instead of every drag failing with «The order changed in another window or request». - Fewer false «The order changed in another window» errors: saves now compare each row’s saved value instead of assuming the list is shown in numeric order. Real changes made in another window are still caught.
- MyISAM and MariaDB Aria sites can reorder again, without converting tables, using a single guarded database update. InnoDB keeps full transactions. On MyISAM/Aria a server crash mid-save cannot be rolled back; the plugin reports such a save as unconfirmed and asks you to reload.
- Enabled post types now support Page Attributes, so the Query Loop block offers «Ascending by order» for custom post types too. Use the
scpo_add_order_supportfilter to opt out. - Added a Simple Custom Post Order section to Tools > Site Health > Info (table engines, object cache, database drop-in) to help with support requests.
2.8.11 – 2026-10-19
Bug fixes
- Fixed «Safe reordering requires an InnoDB database table» blocking every reorder on sites whose tables are InnoDB. 2.8.10 treated an unanswered storage-engine lookup as «not InnoDB»; the plugin now also asks via
SHOW TABLE STATUSand only refuses when the database positively reports a non-transactional engine such as MyISAM. - Fixed drags in hierarchical taxonomies (Categories, product categories, …) being refused with «The order changed in another window or request» even after reloading. Hierarchical taxonomies are now numbered in the tree order the list shows, as pages have been since 2.8.9, and a term added with the quick-add form is placed under its parent straight away. Sibling order is unchanged; the first visit to the list after upgrading may renumber terms once. Props @huubl.
2.8.10 – 2026-10-12
Safer saves and recovery
- Fixed failed order reads and writes reporting success. Drag and numeric saves now roll back all batches when a database write fails, preserving a caller’s existing transaction with savepoints.
- Added stale-order checks for Modern and Classic drags and the Order column. Conflicting edits are rejected instead of overwriting the order; the Modern engine offers a Reload list button. Retrying an already-saved drag remains safe.
- Added a Modern-engine warning before leaving with pending or failed saves. The warning clears after saving succeeds, and newly added rows refresh the saved list baseline.
- Improved server error messages and retry handling. The Order column now treats unsuccessful HTTP responses as failures, and Classic drags are disabled while saving.
- Fixed failed resets disabling sorting despite database errors; a settings failure after a reset is now reported separately.
Developers and compatibility
- Added the
scpo_ignore_custom_orderquery argument forWP_Queryandget_posts()to bypass automatic post ordering without changing saved values or existing defaults. - Safe reordering now requires InnoDB for the relevant posts/terms tables. Unsupported storage returns an explanatory error; no automatic table conversion occurs.
- Added failure-injection tests, real database transaction tests, browser recovery checks, PHP compatibility CI, and a local install/test runner with verified restoration of ordering and settings.
- Updated translation strings and release validation. WordPress 6.2+ and PHP 7.4+ remain required; no paid service or subscription is needed.
2.8.9 – 2026-09-29
Bug fixes
- Fixed dragging on the Drafts, Pending or search-results view of a list scrambling your order. Those views are sorted by date or relevance, and a drag saved every row on the screen in that order. Drag-and-drop is now only offered on views that show your custom order.
- Fixed
wp_get_recent_posts()— used by many «recent posts» widgets and blocks — returning the oldest posts of a sorted post type. A descending sort on a date column is now respected byget_posts()too. - Fixed the Tags admin list showing the wrong tags on each page once there were more than fit on one page, so dragging reordered the wrong set of tags.
- Fixed tag clouds and the editor’s «most used tags» showing arbitrary tags:
orderby => count(and other meaningful term orders such asinclude,slug__inand meta values) is now respected. WooCommerce product categories keep following your custom order. - Fixed dragging on page 2 or later of a long page tree moving pages you never touched onto another page of the list. Pages are now numbered in the order the tree is shown, so a save only ever affects the rows on screen.
- Fixed keyboard reordering in page and category trees: a page now moves past whole sibling branches, never lands inside another branch or above its own parent, and Escape puts everything back exactly as it was. Dragging with the mouse no longer picks up rows that are not really its children.
- Fixed previous/next links skipping a post that shares an order number with the current one (for example a copy made by a duplicate-post plugin).
- Fixed searches and extra queries on search results pages being forced into the custom order, and a «called incorrectly» notice for
is_search()when queries ran before the main one. - Fixed a save with Quick Edit open sending the edited post twice, which misplaced it. On the Classic engine an open Bulk Edit row made the whole save fail silently.
- Fixed drag-and-drop reporting a failure when another plugin printed a notice into the reply (the Order column already coped with this since 2.8.6).
- Fixed enabling Pages reshuffling pages that share a Page Attributes order value: ties are now settled alphabetically, as WordPress showed them.
- Fixed saving the settings — or resetting one post type — renumbering every other sorted type.
- Fixed Reset Order turning the drag handle off on older installs, leaving stale numbers behind on sites with a persistent object cache, and accepting post types the form does not offer.
- Fixed taxonomies registered with capital letters not staying enabled after saving the settings.
- Fixed term order not updating in
get_the_terms()(used by most themes to list a post’s categories and tags) on sites with a persistent object cache. - Fixed network super admins being locked out of reordering when «Who can reorder» is restricted to certain roles.
- Fixed long page trees being cut off when saved (PHP’s
max_input_varslimit). - Fixed the site-wide setup notice being shown to, and dismissable by, users who cannot change the plugin’s settings; it also no longer shows once only taxonomies are enabled.
- Fixed the Reset Order button and the setup notice’s dismiss button failing when the admin is reached through a proxy, another port or http/https mismatch.
- The
term_ordercolumn is now only recorded as installed once it really exists. If the database refused to add it, term queries keep working unsorted instead of failing.
Improvements
- A failed save now keeps its message on screen with a Retry button, and requests time out after 20 seconds instead of hanging.
- The Order column updates its numbers after a drag, no longer sends the same position twice, and rejects positions such as 0 or 2.5 instead of silently misreading them.
- Keyboard users hear how to use the drag handle before grabbing a row, and are told when a row cannot move any further.
- Right-to-left languages, Windows High Contrast mode and the admin colour scheme are now supported by the drag handle and save message; the drag animation respects «reduce motion».
- Typing in the Order box or other fields inside a row no longer starts a drag.
- Much faster on large sites: typing a position in the Order column and saving a drag now use a few batched queries that only touch rows whose number changes, and tidying up the order after new posts are published no longer flushes the entire object cache.
- Uninstalling on multisite now handles large networks, and no longer removes a
term_ordercolumn that another plugin created. - The plugin header now declares «Requires at least: 6.2», so WordPress enforces the minimum version.
2.8.8 – 2026-08-26
Bug fixes
- Fixed the plugin overwriting an order your site already had. Ticking a post type in Settings re-sorted it from scratch — pages alphabetically, everything else newest-first — throwing away the order already stored against your content. For pages that is WordPress’s own Page Attributes Order field, so a hand-built page order was lost; it also discarded the order left behind by another sorting plugin you had removed. This happened on every settings save, not just the first time. Existing order is now kept, and the alphabetical/newest-first fallback only applies where there is genuinely no order to preserve. Reported by @martinsauter and diagnosed by @jamieburchell.
- Fixed two items sharing the same order number coming out in a different order depending on whether you had just saved the settings screen or simply opened the list. Both now settle the tie the same way.
- Fixed dragging a parent page leaving its child pages behind until the page was refreshed. The saved order was always correct — children were re-nested under their parent as soon as the list reloaded — but the screen looked wrong in the meantime. Children now move with their parent as you drag. Reported by @jamieburchell.
Note: full parent/child ordering (keeping a drag within its own level) is still to come.
2.8.7 – 2026-08-26
Bug fixes
- Fixed drag-and-drop appearing to do nothing when two or more items shared the same order number. The reorder saved successfully but the items never moved, and because they stayed tied, which one came first was a toss-up on the front end. Reported by @literayz.
- Fixed duplicate order numbers never getting cleaned up. The plugin’s tidy-up step checked the count, highest and lowest number, so a list with a duplicate and a matching gap (1, 2, 2, 4, 5) looked correct and was skipped every time. Duplicates are now detected and renumbered.
- Fixed items in a custom status (added by editorial-workflow and similar plugins) being left out of ordering. They still appeared in the list and could still be dragged, but were skipped when the plugin numbered everything else — which is a common way duplicate numbers appeared in the first place. Ordering now covers every status shown in the list’s «All» view. On a site without such plugins nothing changes.
- Fixed leftover settings after uninstalling. Three options survived removal and were silently restored if the plugin was installed again later. Everything the plugin creates is now removed. Reported by @jamieburchell.
- Fixed the plugin’s review notice never being displayed, due to the way it was hooked into WordPress. Also spotted by @jamieburchell.
Housekeeping
- Marked compatible with WordPress 7.1. The previous release’s compatibility line was edited directly in the published 2.8.6 files rather than shipped as an update, which made security scanners such as Wordfence report the plugin as a Modified Plugin File on sites that had already installed 2.8.6. Nothing was wrong with those sites — the only difference was that single line — and updating to 2.8.7 clears the warning. Reported by @timwakeling-1.
- The review notice no longer loads jQuery, no longer appears on every site at once after this update (sites that already dismissed it stay dismissed), and no longer risks garbled text in translated languages.
2.8.6 – 2026-07-27
Bug fixes
- Fixed «Couldn’t update the order — please try again» when typing a position into the Order column. The column had no recovery for an expired security token, so leaving a post list open for a while (or running a security plugin that shortens token lifetime) made every save fail until the page was reloaded by hand. It now quietly fetches a fresh token and retries, the same way drag-and-drop already did. Reported by @nlarenas.
- Fixed the Order column reporting a failure when the order had actually been saved. If another plugin printed a stray notice or warning before the response, the reply could not be read and the save looked like it had failed. Such output is now tolerated.
- Fixed the Order column giving up on a brief network hiccup — it now retries once before reporting a problem.
- The Order column no longer shows an editable box on items you are not allowed to reorder. The box is only offered where the save can actually succeed; elsewhere the position is shown as plain text. This mainly affects custom post types registered with their own capabilities, where the box previously appeared for everyone but every save was rejected.
Improvements
- The Order column now reports why a save failed — an expired session, a permissions problem, an item that can’t be ordered, or a connection problem — instead of showing the same generic message for all of them.
2.8.5 – 2026-07-27
Bug fixes
- Fixed stale and duplicated order numbers on sites running a persistent object cache (Redis, Memcached, etc.). Creating a post and tidying up the order both wrote straight to the database without telling WordPress to refresh its cached copies, so admin lists kept showing the old numbers until the cache was flushed by hand. Every order write now clears the cache for the rows it touched. Reported by @raveendrawpc (#154).
- Fixed taxonomy terms coming back in the wrong order on the front end from that same cause. Unlike posts, term order is applied in PHP using each term’s stored order value — and that value comes from the cache, so a stale entry produced genuinely wrong ordering, not just wrong-looking numbers in the admin.
- Fixed reordering terms clearing the wrong cache entries on sites where a term’s ID and its internal taxonomy ID have drifted apart (common on older or heavily migrated sites).
- Fixed the order not being tidied up in one edge case where the numbering looked correct but started below 1.
Performance
- Publishing is now much faster on large sites. With «New items» set to Top (the default), creating a single post rewrote the order value of every other post of that type — thousands of rows on a big site, on every publish. New items are now placed with a single-row update. Where they land is unchanged.
- Enabling a post type or taxonomy in Settings now numbers the existing items in one batched query instead of one query per item.
2.8.4 – 2026-07-14
Performance
- Fixed very slow WordPress admin on sites with many posts. The plugin’s order-normalization routine (
refresh()) ran on every admin page — Dashboard, Plugins, Tools, Settings — even those that never display a sortable list. On large sites it re-numbered thousands of rows one query at a time, adding thousands of database queries and several seconds of load time to unrelated screens (one report measured ~9.5s and 14,000+ queries on the Plugins page with ~3,000 posts). It now runs only on the post/taxonomy list screens where the manual order is actually shown, and renumbers rows in a single batched query instead of one-per-row. No change to how ordering behaves. Reported by @crossy.
2.8.3 – 2026-07-01
Security
- Hardened the drag-and-drop reorder AJAX endpoints with per-object permission checks. Previously any signed-in user who could reach the reorder actions (by default anyone able to edit posts) could submit arbitrary post or term IDs and change their stored order — including posts, pages, or terms they are not allowed to edit. Each submitted item is now verified to belong to an enabled sortable type and to be editable by the current user before its order is changed. Impact was limited to ordering only (no content was exposed or edited). Reported by the WordPress.org Plugin Review Team’s automated scan.
Bug fixes
- Fixed the manual post order being ignored on the admin Posts list after using the «All dates» or category dropdown filters. Those filters submit an empty search field, which WordPress counts as a search, and the plugin was skipping its custom order for any search. The manual order now applies while filtering; genuine searches are still left untouched. Props @r-a-y (#153).
2.8.2 – 2026-06-26
Bug fixes
- Fixed newly created posts and items landing at the bottom of the manual order on sites upgraded from before 2.8.0 — which made the latest post appear at the bottom of admin lists instead of the top. The 2.8.0 «new-item placement» feature shipped defaulting to bottom, which silently reversed the long-standing behavior (new items went to the top). The default is now top again. If you prefer new items at the bottom, choose it under Settings SCPOrder Advanced Options «New items». Sites that already selected bottom keep their choice. Reported by @ffusion and @deisedesign.
2.8.1 – 2026-06-22
Improvements
- Added a
scpo_reverse_adjacent_postsfilter to reverse the direction of the previous/next post navigation links for manually-ordered posts and custom post types. The 2.7.2 fix (#146) made «previous» the item before the current one in the arranged order and «next» the item after — correct for sequential content, but the opposite of what sites built around WordPress’s native chronological convention expect. Returntruefrom the filter to restore the pre-2.7.2 direction without editing your theme’s template tags. Reported by @sarahmelyne.
2.8.0 – 2026-06-17
New features
- Choose where new items are placed — a setting to add newly created posts/pages/items to the bottom or top of the manual order (the default was changed to top in 2.8.2). Props @mplusb (#45).
- Optional “Order” number column — turn on an editable position column on enabled (non-hierarchical) post-type lists to type an item’s exact order, including jumping it across paginated pages. Hidden by default and toggleable via Screen Options. (Hierarchical types like Pages are handled separately in a future release.) Props @mplusb (#76, #89, #136).
- Role-based reordering — restrict drag-and-drop reordering to specific roles in Settings > SCPOrder, with a new
scpo_capabilityfilter for developers. Props @mplusb (#95, #133).
2.7.3 – 2026-06-04
Bug fixes
- Fixed Quick Edit and Bulk Edit fields (text inputs, dropdowns) not responding to a left mouse click on post/page list screens when the Modern (SortableJS) sorting engine was active. The drag engine was excluding those inline-edit rows from sorting but still suppressing the browser’s default click behaviour on them; native field interaction is now preserved. Right-click was unaffected, and the Classic engine was never affected. Reported by @stilografico and @tedmw.
2.7.2 – 2026-06-03
Bug fixes
- Fixed previous/next post navigation links pointing to the wrong adjacent post (often reversed) for manually-ordered posts and custom post types. The adjacent-post queries now walk
menu_ordercorrectly and account for the date/ID tiebreaker WordPress adds to the query. Props @beatricelucaci (#146).
2.7.1 – 2026-06-02
Bug fixes
- Fixed post order being scrambled on MariaDB / MySQL 8 when
menu_orderis re-normalized after gaps appear (e.g. after deleting an item). The gap-compacting step relied on a MySQL user-variable ranking whose evaluation order is undefined on those databases; re-numbering is now done deterministically in PHP. Props @alexgw and @sebastiencyr (#147 / #119). - Term queries that request a specific order with
orderby=includeare now respected instead of being overridden by the custom term order. Props @glebkema (#67 / #66).
Improvements
- Custom term ordering now applies when any queried taxonomy is sortable (previously only the first taxonomy in a multi-taxonomy query was checked) and keeps the caller’s
orderbyas a fallback tiebreaker. Props @goaround (#104).
2.7.0 – 2026-06-02
Modern Drag-and-Drop Engine (SortableJS)
- Reordering now uses a fast, dependency-free vanilla JavaScript engine (no jQuery UI)
- Smoother drag animation and a cleaner floating row while sorting
- Touch support — press, hold, and drag to reorder on phones and tablets
- Full keyboard accessibility — tab to a row, press Space to grab, arrow keys (and Home/End) to move, Space to drop, Escape to cancel
- Screen-reader announcements for every grab, move, and drop via an ARIA live region
- Visible save feedback — a «Saving… / Order saved» status appears as you reorder
Reliability
- Fixed reordering silently failing to save in some environments — the AJAX request is now always same-origin (root-relative), so saving works correctly behind reverse proxies, load balancers, non-standard ports, and HTTP/HTTPS or domain mismatches
- Expired security nonce now refreshes automatically and retries the save, so long-open edit screens (or sites with a shortened nonce lifetime) keep saving without a reload
- Rapid successive drags are coalesced into a single request (the final order always wins), with an automatic retry on transient network errors
New Settings (Settings > SCPOrder)
- Drag & Drop Engine — choose «Modern» (SortableJS, default) or «Classic» (the legacy jQuery UI sorter)
- Drag handle — show a grip icon on row hover; shown by default, can be turned off, and never affects accessibility (keyboard users can always reveal it)
Accessibility
- Respects the
prefers-reduced-motionsetting - Proper ARIA labels, roles, and focus handling on the drag handle
Performance & Build
- Ships minified admin assets; unminified sources load automatically when
SCRIPT_DEBUGis enabled - Removed unused/dead JavaScript
Developer
- New filter
scpo_use_sortablejs— force the drag engine on/off in code (overrides the setting) - The classic jQuery UI Sortable path remains available as an opt-out fallback
- Fully backward compatible — existing settings, hooks (
scp_update_menu_order,scp_update_menu_order_tags,scpo_post_types_args), the global$scporder, and thescporder_optionsstructure are unchanged (two optional keys added:engine,show_handle)
2.6.1 – 2026-06-01
Compatibility
- Tested and confirmed compatible with WordPress 7.0
- Updated «Tested up to» version to WordPress 7.0
- Verified PHP 8.3 and 8.4 compatibility (no deprecated APIs in use)
- Maintenance release — no functional changes
2.6.0 – 2026-01-09
Settings Page Overhaul
- Complete rewrite using WordPress Settings API for native admin experience
- Replaced custom toggle switches with standard WordPress checkboxes
- Removed 100+ lines of custom CSS – now uses native WordPress admin styles
- Improved accessibility with proper ARIA roles and screen reader text
- Settings now integrate seamlessly with WordPress core admin UI
- Added «Settings» link to plugin action links on the Plugins page
Security Enhancements
- Fixed potential SQL injection vulnerabilities with prepared statements
- Added proper output escaping (XSS prevention) throughout the plugin
- Improved input sanitization for all user data
- Added nonce escaping in JavaScript contexts
Performance Improvements
- Replaced blanket cache flushing with targeted cache invalidation
- Only affected posts/terms have their cache cleared after reordering
- Reduced unnecessary database operations
PHP 8.4 Compatibility
- Added type declarations to all class methods
- Fixed null safety issues for PHP 8.1+
- Added explicit property declarations
- Minimum PHP version now 7.4
Code Quality
- Converted to modern PHP syntax (short arrays, spaceship operator)
- Replaced loose comparisons with strict comparisons
- Removed legacy French comments and TODO markers
- Fixed code formatting issues
- Improved AJAX responses with proper JSON structure
Bug Fixes
- Fixed potential fatal error when
get_current_screen()returns null - Fixed reset order JavaScript to handle JSON responses correctly
- Fixed TypeError when plugin options are not yet set (fresh installs)
2.5.11 – 2025-06-23
- Deactivated custom sort order on search results pages
2.5.10 – 2024-12-04
- Fix Notice: _load_textdomain_just_in_time
2.5.9 – 2024-11-29
- Allow editors to change posts order
2.5.8 – 2024-10-10
- Security update
2.5.7 – 2023-09-20
- Security update fixing multiple issues
- Code cleanup for better performance
2.5.6 – 2021-05-27
- Changed: Revert to 2.5.4
2.5.5 – 2021-05-11
- Changed: Code cleaning
- Changed: Allow custom orderby in Block Preview
2.5.4 – 2021-03-05
- Changed: Improved performance
2.5.3
- Modified deprecated jQuery functions
2.5.2
- Modified deprecated jQuery function for WordPress 5.5 compatibility
- Fixed an issue where posts would be in reverse order after resetting
2.5.1
- Improved fix for post list table width when sorting is enabled
- Fixed admin AJAX overriding queries
2.5.0
- Corregido el ancho de la tabla de la lista de entradas cuando está activada la clasificación
- Corregir el descartar la valoración
2.4.9
- Corregido que no se guardara el orden de las entradas
2.4.8
- Added ability to reset order for post types
2.4.7
- Fixed undefined index when ordering terms
- Añadido un filtro para los argumentos de los tipos de contenido mostrados en la página de ajustes
- Añadida una opción extra para la vista avanzada de los tipos de contenido
2.4.6
- Eliminado el widget «noticias» del escritorio
2.4.5
- Added action hooks for update_menu_order_tags and update_menu_order
- Fixed issue with sorting
- Fixed edit page layout when no items found
2.4.4
- Fixed slow JavaScript in admin
- Fixed database error
2.4.3
- Minor UI update with toggles
2.4.2
- Corregidos errores potenciales con otros plugins
- Fixed table breaking on reordering when Yoast SEO installed
2.4.1
- Corregidas las traducciones
2.4.0
- Optimized database queries
2.3.9
- Added button to dismiss admin notice
2.3.8
- Fixed white screen issue
2.3.7
- Fixed white screen issue
2.3.6
- Bug fixes
2.3.5
- Bug fixes
2.3.4
- Eliminada la función obsoleta «screen_icon»
2.3.2
- Cambios menores en la documentación y ajustes en el archivo «readme»
2.3
- Corregido un error importante en el orden de las taxonomías y artículos.
2.2
- Fixed bug: Custom query order/orderby parameters now take precedence
- Improved parameter handling
- Removed taxonomy sort (re-added in later versions)
2.1
- Prevent breaking autocomplete
2.0
- Fixed undefined notice error in WordPress 3.7.1
- Taxonomy activate checkbox removed
1.5
- Bug fixes
- Added taxonomy sort
- Added taxonomy sort option in settings
1.0
- Initial release
