WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

In a custom post type, is there a way to include the "order" field that is available for pages?

Is there any built-in logic that prevents duplicate values in the "order" field?

The idea is to be able to sort a custom post type by a user-specified order, then alphabetically by a string-based custom field.

share|improve this question
Duplicate: wordpress.stackexchange.com/questions/43970/… – marfarma Sep 18 '12 at 13:57
up vote 15 down vote accepted

When declaring your custom post type using the register_post_type function, you have to add 'page-attributes' to the support field, like in the following example:

register_post_type('myposttype', array(
    'supports' => array('title', 'editor', 'page-attributes'),
    'hierarchical' => false

You'll need to add any other supported meta boxes as well to the 'supports' field, see http://codex.wordpress.org/Function_Reference/register_post_type for more information about the register_post_type fields.

Also as far as I know there isn't any built in way to prevent two of the same order, this is because you can create sub-ordering based on heirarchy (so one group of children pages can have a different ordering than another)

share|improve this answer
using page-attributes presents both the order field and the parent field. How do I get rid of the parent field? – Force Flow Sep 19 '12 at 19:21
Nevermind. Setting hierarchical to false gets rid of it. – Force Flow Sep 19 '12 at 22:03
My bad, didn't realize you didn't also want the page parents. I'll update my answer to exclude it. – Dave Hunt Sep 20 '12 at 14:02

In addition to @Dave-Hunt's response, you can also add a filter, such as the following, to define a custom order - in this case, alphabetical by title. (Code thanks to Mark Leong's blog post.) Remove the is_admin() check, if you want you custom order_by on the front-end as well.

function set_custom_post_types_admin_order($wp_query) {
  if (is_admin()) {

    // Get the post type from the query
    $post_type = $wp_query->query['post_type'];

    if ( $post_type == 'POST_TYPE') {

      // 'orderby' value can be any column name
      $wp_query->set('orderby', 'title');

      // 'order' value can be ASC or DESC
      $wp_query->set('order', 'ASC');
add_filter('pre_get_posts', 'set_custom_post_types_admin_order');


For pre-save validation, see this answer: http://wordpress.stackexchange.com/a/40095/4645 where your options are discussed. Basically, it comes down to custom jQuery, as WordPress doesn't have any pre-save hooks.

Also (duplicating my previous comment here for future reference), here's how to expose the 'menu order' field in the admin, so it's user-editable, as it is for pages: Adding 'menu order' column to custom post type admin screen

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.