Note: this trick only applies to Concrete version 5.6 or higher.
Update: This functionality has been included in Concrete version 5.6.3, so you only need to use this trick for versions 5.6.0 through

Since version 5.5, Concrete5 has provided a way to change the display order of page attributes by adding them to Attribute Sets. Any attributes that are in a Set can be "dragged-and-dropped" via the Dashboard "Page Attributes" page.

screenshot of attributes being sorted in the Concrete5 "Page Attributes" dashboard page

That's all well and good, but the problem is that the display order you set in the dashboard doesn't actually have any effect elsewhere on the site. Most notably, the display order is not honored in the "custom attributes" list when adding new pages or editing page properties -- no matter how much sorting you do in the dashboard, the attributes are always listed in the order they were first created when adding or editing pages.

The fix for this is actually not too complicated... it just requires modifying a couple of SQL statements in the core. Below is a ZIP file containing two core overrides that you can add to your site to fix this. Note: this fix only works on Concrete version 5.6.x!

Just download and unzip that file, and move the contents of the unzipped "models" directory into your site's top-level models directory (not concrete/models).

I've also submitted this change to the Concrete5 github repository, so hopefully it winds up in a future version of the core system (at which time this patch would no longer be needed). Github pull requests can be found here (for 5.6.x) and here (for 5.7.x).

UPDATE: This functionality has been included in Concrete5.6.3 (and 5.7).