Как вывести ваши сайты на WordPress на новый уровень с помощью пользовательских типов записей

Пользовательские типы записей являются одним из ключевых элементов, которые вы должны освоить, если хотите создавать гибкие, профессиональные сайты на WordPress.

Они позволят вам добавлять свои собственные типы данных; это может быть статья, песня, фильм или тысячи других вещей. Пользовательские типы записей позволяют упорядочивать данные в соответствии с вашими индивидуальными потребностями, что, в свою очередь, позволяет получить больше контроля над тем, как работает ваш сайт.

В этой статье я расскажу, как создать пользовательский тип записей «Фильм» для базы данных фильмов.

Для чего нужны пользовательские типы записей?

Для того чтобы создать веб-сайт с фильмами, нам нужно создать базу данных. Без пользовательских типов записей сделать это было бы крайне затруднительно, и, возможно, это противоречило бы структуре установленной системы WordPress. В то же время наш пользовательский тип записей будет иметь свое собственное меню администрирования и панель редактирования страницы.

Если бы мы захотели, то смогли бы даже добавлять на страницу пользовательские таксономии с именами и свойствами, которые нужны нашему проекту.

Пользовательские типы записей - это то, что превращает WordPress из блог-платформы в полномасштабную CMS. Они дают нам свободу в настройке нашего сайта фильмов без необходимости что-либо ломать.

Создание нашего типа записей фильмов

В этой статье я сначала выложу весь код, который необходим для создания пользовательского типа записей, а затем мы разберем его строка за строкой.

Таким образом, вы сможете узнать, что делает каждая часть кода и настроить его под свои нужды.
Вот полный код, который будет добавлен в файл functions.php:

add_action( 'init', 'register_movie' );

function register_movie() {

    $labels = array( 
        'name' => 'Movies',
        'singular_name' => 'Movie',
        'add_new' => 'Add New',
        'add_new_item' => 'Add New Movie',
        'edit_item' => 'Edit Movie',
        'new_item' => 'New Movie',
        'view_item' => 'View Movie',
        'search_items' => 'Search Movies',
        'not_found' => 'No movies found',
        'not_found_in_trash' => 'No movies found in Trash',
        'menu_name' => 'Movies',
    );

    $args = array( 
        'labels' => $labels,
        'hierarchical' => false,
        'description' => 'Here you will add all the movies for the database',
        'supports' => array( 'title', 'editor', 'thumbnail' ),
        'taxonomies' => array( 'genre', 'movies', 'year' ),
        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_position' => 5,
        //'menu_icon' => здесь ссылка на изображение,
        'show_in_nav_menus' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'has_archive' => true,
        'query_var' => true,
        'can_export' => true,
        'rewrite' => true,
        'capability_type' => 'post'
    );

    register_post_type( 'movie', $args );
}

Как видите, для создания пользовательского типа записи нужен довольно большой кусок кода, но если вы поймете это, вы сможете адаптировать его под свои проекты.

В первой строке мы подключаем функцию с нашим пользовательским типом записей к init, и это означает, что наша функция будет запускаться вместе с WordPress, и мы всегда будем иметь доступ к ней из Консоли:

add_action( 'init', 'register_movie' );

Метки

В следующей строке мы объявляем имя нашей функции и переменную со всеми метками, которые будут связаны с нашим типом записей "Фильм", таким образом, чтобы все это можно было настроить.

Первое, что мы объявляем в метках, это имя нашего пользовательского типа записей, в множественном и единственном числе:

'name' => 'Фильмы',
'singular_name' => 'Фильм',

В следующих двух строках мы должны указать новый текст для действия "Добавить новый" (если мы хотим изменить его), а затем указать "Добавить новый фильм" таким образом, чтобы, когда мы добавляем новый фильм, у нас выводился заголовок "Добавить новый фильм", вместо стандартного "Добавить новую запись":

'add_new' => 'Добавить новый',
'add_new_item' => 'Добавить новый фильм',

После меток для создания нового фильма, нам нужно установить метки для редактирования, добавления нового элемента (по умолчанию это Новая запись / Новая страница), а также мы должны установить текст для просмотра записи:

'edit_item' => 'Редактировать фильм',
'new_item' => 'Новый фильм',
'view_item' => 'Просмотр фильма',

Далее мы переходим к меткам для поиска в панели администрирования WordPress. Мы должны установить метки для ситуации, когда мы ищем фильм, но результатов, удовлетворяющих условиям поиска, не найдено, а также, когда результатов не найдено в корзине:

'search_items' => 'Поиск фильмов',
'not_found' => 'Фильмы не найдены',
'not_found_in_trash' => 'Фильмы в корзине не найдены',

Последняя метка говорит сама за себя. Мы должны указать название, под которым фильмы будут выводиться в меню интерфейса пользователя. В данном случае нам достаточно простого "Фильмы":

'menu_name' => 'Movies',
);

Аргументы

Теперь мы переходим к аргументам, для этого я создала еще одну переменную, которая будет содержать все аргументы. Я назвала ее args.

Первый аргумент запрашивает метки, и все, что мы должны сделать, это указать переменную меток, которую мы только что рассмотрели, следующим образом:

$args = array( 
   'labels' => $labels,

В следующей строке мы должны установить, будет ли наш тип записей иерархическим, как страницы, или нет (как записи). В моем случае я не хочу, чтобы фильмы имели иерархическую структуру, так что я установила значение false.

Следующая строка это просто дополнительное описание типа записей:

'hierarchical' => false,
'description' => 'Здесь вы будете добавлять все фильмы в базу данных',

Следующая строка особенно важна; здесь мы должны указать, что именно наш пользовательский тип записей будет поддерживать, какие поля он будет содержать. Параметры для этой области:

  • title
  • editor
  • author
  • thumbnail
  • excerpt
  • trackbacks
  • custom-fields
  • comments
  • revisions
  • page-attributes
  • post-formats

В моем случае, для своего типа записей, я хочу, чтобы поддерживались только title (заголовок), WYSIWYG editor (редактор), thumbnail (миниатюры поста) и comments (комментарии), и добавляю все это в массив в следующей строке:

'supports' => array( 'title', 'editor', 'thumbnail','comments' ),

В следующей строке мы должны указать, какие таксономии тип будет использовать, и, так как мы будем создавать пользовательские таксономии, то их мы и добавляем в этой строке:

'taxonomies' => array( 'жанр', 'актеры', 'год' ),

Следующие три строки должны вывести раздел с нашим пользовательским типом записей в панели администрирования, и все, что я делаю, это устанавливаю соответствующие значения true:

'public' => true,
'show_ui' => true,
'show_in_menu' => true,

Далее мы переходим к размещению соответствующего раздела меню в панели администрирования. Здесь мы также имеем возможность выбрать:

5 - Ниже Записей
10 - Ниже Медиафайлов
15 - Ниже Ссылок
20 - Ниже Страниц
25 - Ниже Комментарии
60 - Ниже первого разделителя
65 - Ниже Плагинов
70 - Ниже Пользователей
75 - Ниже Инструментов
80 - Ниже Настроек
100 - Ниже второго разделителя

В моем случае я хочу, чтобы пункт меню "Фильмы" размещался под пунктом "Записи", поэтому я устанавливаю позицию меню 5:

'menu_position' => 5,

В следующей строке мы устанавливаем иконки, мы можем задать собственную иконку или оставьте это поле пустым и получить значок записей, а в следующей строке мы задаем, чтобы наш пользовательский тип записей выводился в меню:

'menu_icon' => //здесь ссылка на изображение,
'show_in_nav_menus' => true,

В следующих трех строках мы добавляем дополнительные возможности для типа записей: сначала мы устанавливаем, хотим ли мы, чтобы тип записей запрашивался через интерфейс; затем мы определяем, хотим ли мы, чтобы тип записей исключался из результатов поиска; и, наконец, мы задаем, нужен ли нам архив для фильмов:

'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,

В следующей строке мы устанавливаем переменную запроса для нашего типа записей, это будет определять, как будет выглядеть URL-адрес. Для этого у нас есть три варианта возможных параметров. Мы можем установить true, и тогда мы сможем получить фильм с помощью запроса /?movie=name_of_movie.

Мы можем установить строку, и тогда текст "movie" в URL-адресе будет заменен на то, что нам нужно, например, “show”. И, чтобы получить тот же фильм, мы должны использовать запрос /?show=name_of_movie. Последний вариант - false, и в таком случае получить фильм через query_var будет невозможно.

В моем случае, я могу установить для переменной запросов значение true, так что мы можем получать фильм по запросу с query_var:

'query_var' => true,

В следующей строке мы определяем, хотим ли мы, чтобы фильмы могли экспортироваться и затем выбираем slug для этого типа. В моем случае я просто установила true, чтобы оставить ‘movie’, в качестве slug. Но вы можете выбрать в качестве slug любую строку.

Данный параметр на самом деле имеет много вариантов.

'can_export' => true,
'rewrite' => true,

И в последней строке аргументов мы устанавливаем функциональный тип наших записей, и, так как я хочу, чтобы он соответствовал обычным записям, я просто установила значение post:

'capability_type' => 'post'
);

Наши метки и аргументы готовы. Все, что нам осталось сделать, это зарегистрировать наш тип записей. Функция register_post_type принимает два параметра: первый - это имя нашего пользовательского типа записей (максимум 20 букв, без заглавных букв или пробелов), а второй - это аргументы типа записи, для него мы задаем нашу переменную args:

register_post_type( 'movie', $args );
}

Наш тип записей создан и полностью функционален. Все, что нужно, чтобы он выводился на сайте, это немного магии wp_query.

Заключительное слово

Я надеюсь, вы понимаете, почему так много людей используют пользовательские типы записей WordPress.

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

РедакцияПеревод статьи «How to take your WordPress sites to the next level with custom post types»