Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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
add comment

2 Answers 2

up vote 6 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')));

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
add comment

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');

Update

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
add comment

Your Answer

 
discard

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.