Define menu_order on Creation of New Custom Post?
-
16-10-2019 - |
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?
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