Определить порядок меню при создании Новой пользовательской записи?
Я создал пользовательский тип записи под названием video
и использую плагин под названием Playlist_Order
(который изменяет поле menu_order
), чтобы позволить пользователю использовать интерфейс перетаскивания для заказа своих видео в плейлисте.
Однако при добавлении нового сообщения видео появляется в верхней части списка воспроизведения, потому что ему присвоено значение по умолчанию menu_order
0
.
При создании нового видеопоста я бы хотел, чтобы он появился последним в списке воспроизведения - т.Е. запрашивал все типы постов video
, найдите наибольшее значение menu_order
, а затем установите это +1
для новой записи.
Как я могу это реализовать?
3 answers
Привет@fxfuture:
Я думаю, что вы ищете крючок wp_insert_post_data
. Вы можете добавить этот код в нижнюю часть файла вашей темы functions.php
и/или добавить его в плагин:
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;
}
10 и 2 аргумента в конце метода add_filter: приоритет выполнения (необязательно по умолчанию =10) и количество аргументов, которые получает новая функция (необязательно по умолчанию =1)
Единственная причина, по которой он появляется в приведенном выше коде, заключается в изменении номера аргумента по умолчанию.
Подробнее читайте здесь http://codex.wordpress.org/Function_Reference/add_filter
Обновил ответ, поскольку в проекте post_status было указано, что это даст ВСЕМ страницам CPT= с нулевым порядком меню уникальный порядок меню (самый высокий в базе данных +5). Приспосабливайтесь к своим потребностям.
add_filter( 'wp_insert_post_data', 'mp_wp_insert_post_data', 999, 2);
function mp_wp_insert_post_data( $data, $postarr ) {
$post_type = 'page';
if( $data['post_type'] == 'page' && $data['menu_order'] == 0 ) {
global $wpdb;
$data['menu_order'] = $wpdb->get_var("SELECT MAX(menu_order)+5 AS menu_order FROM {$wpdb->posts} WHERE post_type='{$post_type}'");
}
return $data;
}