Пользовательский тип сообщения - поле заказа

14

В пользовательском типе записи есть ли способ включить поле «Порядок», доступное для страниц?

Есть ли встроенная логика, которая предотвращает дублирование значений в поле «порядок»?

Идея состоит в том, чтобы иметь возможность сортировать пользовательский тип записи по заданному пользователем порядку, а затем в алфавитном порядке по пользовательскому полю на основе строки.

Поток силы
источник

Ответы:

25

При объявлении вашего пользовательского типа записи с помощью функции register_post_type вы должны добавить «атрибуты страницы» в поле поддержки, как в следующем примере:

register_post_type('myposttype', array(
    'supports' => array('title', 'editor', 'page-attributes'),
    'hierarchical' => false
));

Вам также необходимо добавить любые другие поддерживаемые мета-блоки в поле «Support», см. Http://codex.wordpress.org/Function_Reference/register_post_type для получения дополнительной информации о полях register_post_type.

Также, насколько я знаю, не существует встроенного способа предотвращения двух одинаковых порядков, это потому, что вы можете создавать подупорядочения на основе иерархии (так что одна группа дочерних страниц может иметь порядок, отличный от другого)

Дэйв Хант
источник
Использование page-attributesпредставляет как orderполе, так и parentполе. Как мне избавиться от parentполя?
Force Flow
Ничего. Установка hierarchicalв false избавляет от этого.
Force Flow
Мой плохой, не осознавал, что ты тоже не хочешь страницу родителей. Я обновлю свой ответ, чтобы исключить его.
Дейв Хант
Здравствуй. У меня есть этот код, но я ничего не вижу: `` `// Service Custom Post Type add_action ('init', 'create_post_type'); function create_post_type () {$ support_args = array ('title', 'editor', 'page-attribute'); register_post_type ('service', array ('tags' => array ('name' => __ ('Services'), 'singular_name' => __ ('Service'), 'поддерживает' => $ support_args, 'иерархический' => false), 'public' => true, 'has_archive' => true, // 'menu_position' => 2)); } `` `
Сайлар
@Sylar Я понимаю, что это очень поздно, но мне кажется, что ваши 'support' => $ support_args, 'иерархический' => false находится в неправильной части массива. В вашем примере это вложено в массив меток, оно должно быть в базовом массиве, на том же уровне, что и 'public' => true
Dave Hunt
4

В дополнение к ответу @ Dave-Hunt вы также можете добавить фильтр, например, следующий, чтобы определить пользовательский порядок - в данном случае, в алфавитном порядке по заголовку. (Код, благодаря сообщению в блоге Марка Леонга. ) Снимите этот is_admin()флажок, если вы хотите, чтобы вы также настраивали order_by на внешнем интерфейсе.

функция set_custom_post_types_admin_order ($ wp_query) {
  if (is_admin ()) {

    // Получить тип поста из запроса
    $ post_type = $ wp_query-> query ['post_type'];

    if ($ post_type == 'POST_TYPE') {

      // значение orderby может быть любым именем столбца
      $ wp_query-> set ('orderby', 'title');

      // значение 'order' может быть ASC или DESC
      $ wp_query-> set ('order', 'ASC');
    }
  }
}
add_action ('pre_get_posts', 'set_custom_post_types_admin_order');

Обновить

Для проверки перед сохранением см. Этот ответ: /wordpress//a/40095/4645, где обсуждаются ваши варианты. По сути, все сводится к пользовательскому jQuery, так как WordPress не имеет хуков предварительного сохранения.

Также (дублируя мой предыдущий комментарий здесь для дальнейшего использования), здесь показано, как открыть поле «Порядок меню» в админке, чтобы его можно было редактировать, как и для страниц: Добавление столбца «Порядок меню» в пользовательский экран администратора типа поста

marfarma
источник