Сегодня же мы хотим рассказать вам о процессе создания таксономии для собственных типов постов, а также о создании собственных полей и мета-блоков, о сохранении данных и использовании их в собственных шаблонах для Wordpress.
Давайте приступим!
Создание таксономии (для возможности сортировки по категории)
Следующим этапом в нашем обучении будет создание таксономий, которые позволяют нам сортировать собственные типы записей по категориям. С точки зрения эффективности это примерно то же самое, что и категории для записей, за исключением того, что мы можем сделать из них все, что угодно всего за счет нескольких строчек кода.
Для этого мы будем использовать Wordpress-функцию register_taxonomy();. Как вы можете видеть ниже и в codex.wordpress.org, аргументы, которые она принимает, это taxonomy, за которым следует тип объекта и, наконец, $args. Для нашего примера мы создали 2 таксономии – Skills и Club Level. Мы применяем таксономии к типу записей athlete, а затем задаем аргументы, включая ярлыки и переписываем привилегии. Давайте взглянем на код.
register_taxonomy("Sport", array("athlete"), array("hierarchical" => true, "label" => "Sport", "singular_label" => "Sport", "rewrite" => true));
register_taxonomy("Club Level", array("athlete"), array("hierarchical" => true, "label" => "Club Level", "singular_label" => "Club Level", "rewrite" => true));
Зарегистрированные таксономии выглядят примерно следующим образом.
Вы можете кликнуть по типу записи, и вы будете перенаправлены на страницу очень схожую со страницей категории, где у вас будет возможность добавлять собственные таксономии.
Закончили уже?
Хм, в целом, у вас уже есть собственный тип записи, который функционирует. Но на данный момент он ничем не отличается от обычных записей. Давайте окунемся в создание собственных полей для ваших записей, которые позволят вам указывать уникальную информацию, а затем отображать её в шаблонах.
Создание собственных полей
Для того чтобы начать творить настоящее волшебство с помощью собственных типов записей, для начала вам нужно будет инициализировать функцию для возможности добавлять мета-блоки. Нашу мы назовем admin_init(), и выглядеть она будет следующим образом:
add_action("admin_init", "admin_init");
function admin_init(){
add_meta_box("personal_info", "Personal Info", "personal_info", "athlete", "normal", "low");
}
Первая часть нашего кода инициализирует функцию admin_init(). Понятно, что вторая часть данного кода представляет собой саму функцию. В целом, этот код сообщает вашему шаблону о необходимости создать новый мета-блок под названием «Personal Info», поместить его в тип записи athlete и затем дать ему низкий приоритет (расположение в типе записи).
Круто! Ну а теперь мы закончили?
Нет еще. Но уже совсем близко! Давайте добавим еще несколько собственных полей. Это больше относится к HTML, нежели к PHP.
Создание полей в собственных мета-блоках
А теперь начинается самое интересное. Мы собираемся создать мета-блок с личными данными (мы его уже сделали выше, а сейчас собираемся заполнить его), который будет спрашивать имя и фамилию человека, пол, адрес электронной почты, номер телефона и дату рождения.
Для того чтобы сделать это, мы создаем функцию под названием personal_info(). Та же функция, которую мы вызывали в функции admin_init(). А теперь, включаем свет? Все линии сходятся.
Внутри функции мы сначала выставляем несколько переменных. Объявляем переменные для $custom, а затем, используя эту переменную, создаем переменные для остальных полей. После этого мы закрываем PHP, и генерируем поля посредством HTML. Мы используем таблицы просто для того, чтобы облегчить процесс, и для того, чтобы сохранить возможность быстро импортировать их в другие типы записей, но вы можете использовать div’ы.
function personal_info() {
global $post;
$custom = get_post_custom($post->ID);
$first_name = $custom["first_name"][0];
$last_name = $custom["last_name"][0];
$gender = $custom["gender"][0];
$email = $custom["email"][0];
$phone = $custom["phone"][0];
$birthday = $custom["birthday"][0];
?>
<table cellspacing="2">
<tr>
<td>
<label>Name:</label>
</td>
<td>
<input type="text" name="first_name" placeholder="First Name" value="<?php echo $first_name; ?>">
</td>
<td>
<input type="text" name="last_name" placeholder="Last Name" value="<?php echo $last_name; ?>">
</td>
</tr>
<tr><td><label>Gender:</label></td><td><input type="text" name="gender" placeholder="Male or Female" value="<?php echo $gender; ?>"></td></tr>
<tr><td><label>Email:</label></td><td><input type="text" name="email" placeholder="you@gmail.com" value="<?php echo $email; ?>"></td></tr>
<tr><td><label>Phone:</label></td><td><input type="text" name="phone" placeholder="(540) 555-5555" value="<?php echo $phone; ?>"></td></tr>
<tr><td><label>Birthday:</label></td><td><input type="text" name="birthday" placeholder="12/12/1987" value="<?php echo $birthday; ?>"></td></tr>
</table>
<?php
}
Ну что, справились? Наконец-то закончили?
Уже совсем близко! Теперь осталось все это сохранить.
Сохраняем данные собственных типов записей
Последний кусочек паззла заключается в том, что мы сохраняем данные собственных типов записей в базу данных. Для того чтобы сделать это, мы создаем новую функцию под названием save_details(), которая сообщает WordPress извлечь то, что находится в этом мета-блоке, и разместить это в базе данных. Она так же сообщает WordPress то, что если эти данные уже есть в базе данных, нужно проверить, не изменились ли они, и если значения изменились, обновить их в базе.
А теперь давайте посмотрим на код:
add_action('save_post', 'save_details');
function save_details(){
global $post;
$postID = $post->ID;
// To prevent metadata or custom fields from disappearing...
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $postID;
update_post_meta($postID, "first_name", $_POST["first_name"]);
update_post_meta($postID, "last_name", $_POST["last_name"]);
update_post_meta($postID, "gender", $_POST["gender"]);
update_post_meta($postID, "email", $_POST["email"]);
update_post_meta($postID, "phone", $_POST["phone"]);
update_post_meta($postID, "birthday", $_POST["birthday"]);
}
И теперь точно конец! Теперь у вас есть собственный тип записи.
Использование собственных типов записи в шаблонах
В конце концов, нам остается просто использовать собственные типы записей в шаблоне. Конечно же, здесь можно творить любые вариации и методы, но давайте мы покажем то, что нужно для того, чтобы хотя бы начать. Нам нужно включить этот отрывок кода в файлы шаблона:
<?php echo get_post_meta($post->ID, 'first_name', true) ?>
Все довольно просто! Конечно же, не забудьте заменить first_name названием вашего поля. Как только вы включите этот код, все заработает!
А теперь попробуйте самостоятельно сделать собственные типы записей! Удачи вам!