Определить порядок меню при создании Новой пользовательской записи?


Я создал пользовательский тип записи под названием video и использую плагин под названием Playlist_Order (который изменяет поле menu_order), чтобы позволить пользователю использовать интерфейс перетаскивания для заказа своих видео в плейлисте.

Однако при добавлении нового сообщения видео появляется в верхней части списка воспроизведения, потому что ему присвоено значение по умолчанию menu_order 0.

При создании нового видеопоста я бы хотел, чтобы он появился последним в списке воспроизведения - т.Е. запрашивал все типы постов video, найдите наибольшее значение menu_order, а затем установите это +1 для новой записи.

Как я могу это реализовать?

Author: MikeSchinkel, 2010-09-29

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;
}
 5
Author: MikeSchinkel, 2010-09-29 01:28:24

10 и 2 аргумента в конце метода add_filter: приоритет выполнения (необязательно по умолчанию =10) и количество аргументов, которые получает новая функция (необязательно по умолчанию =1)

Единственная причина, по которой он появляется в приведенном выше коде, заключается в изменении номера аргумента по умолчанию.

Подробнее читайте здесь http://codex.wordpress.org/Function_Reference/add_filter

 1
Author: ralor, 2011-09-13 14:15:07

Обновил ответ, поскольку в проекте 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;
}
 0
Author: Ramon Fincken, 2020-03-23 13:10:31