Question

I've created a custom post type called video and I'm using a plugin called Playlist_Order (which changes the menu_order field) to allow the user to use a drag and drop interface to order their videos in a playlist.

However, when adding a new post the video appears at the top of the playlist because it's given a default menu_order value of 0.

On creation of a new video post I would like it to appear last in the playlist - i.e. query all video post types, find the largest menu_order value and then set this +1 for the new post.

How can I implement this?

Was it helpful?

Solution

Hi @fxfuture:

I think what you are looking for is the wp_insert_post_data hook. You can add this code to the bottom of your theme's functions.php file and/or you can add it to a plugin:

add_filter('wp_insert_post_data','my_wp_insert_post_data',10,2);
function my_wp_insert_post_data($data, $postarr) {
  $post_type = 'video';
  if ($data['post_type']==$post_type && get_post($postarr['ID'])->post_status=='draft') {
    global $wpdb;
    $data['menu_order'] = $wpdb->get_var("SELECT MAX(menu_order)+1 AS menu_order FROM {$wpdb->posts} WHERE post_type='{$post_type}'");
  }
  return $data;
}

OTHER TIPS

the 10 & 2 arguments in the end of the add_filter method are: the priority of the execution (optional default=10) and number of arguments the new function receives (optional default=1)

the only reason it appears in the code above it's to change the default number of argument.

read more here http://codex.wordpress.org/Function_Reference/add_filter

Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top