fxfuture
  • 0
Новичок

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

  • 0

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

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

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

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

Share
  1. Привет @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;
    }
    
    • 0
    • Привет Майк — большое спасибо! Это прекрасно работает! Не то, чтобы это действительно имело большое значение, но по какой-то причине, если я заполню только заголовок и оставлю настраиваемые мета-поля пустыми, функция не будет работать?

      • 0
    • Может быть, post_status это не всегда 'draft' ; не уверен. Безопасно ли предположить, что ваша нумерация может начинаться с 1 или вам нужно начинать нумерацию с 0 ? Если первое, мы можем изменить его, чтобы избежать возможных проблем с post_status .

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

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

    подробнее здесь http://codex.wordpress.org/Function_Reference/add_filter

    • 0
  3. Обновлен ответ, так как в черновике 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

Оставить ответ

You must login to add an answer.