В предыдущей части мы научились добавлять в админку функционал новых типов записей, новые поля для ввода данных, а также новую таксономию. Но теперь ведь нужно это все отобразить на сайте.
Как это сделать я и расскажу в этой части.
Прежде всего, хочу сказать, что считаю возможности wordpress 3.0 версии пока что сыроваты в плане правильного вывода информации с пользовательских типов данных, без плагинов и хаков не обойтись, тем не менее, многие недочеты планируют устранить в 3.1 версии, которая должна выйти уже довольно скоро.
Но по порядку.
К примеру, мы создали сайт-каталог книг, в котором есть новые типы записей «книги» (book), для этого типа записей мы добавили 2 дополнительных поля — поле с миниатюрой (ima) и поле с рецензией(desc) + добавили таксономию в виде рубрик с описанием обложки книг.
Выводить все данные мы будем в виде архива- ленты постов с этими книгами и при клике на каждую запись с этого архива, попадаем на полное описание каждой книги.
Как сделать вывод полного описания произвольного типа записей с новыми полями
Для вывода полного описания в wordpress используется шаблон single.php — но в нашем случае, нам нужно сделать эту страничку отдельной, не похожей на остальные. Для этого копируем single.php и переименовываем его в single-book.php — причем book — это название-идентификатор вашего нового типа записей.
Как вы помните, мы добавляли 2 новых поля. Первое поле с картинкой (Custom field key — ima)
Второе поле с рецензией (Custom field key — desc)
Вывести их в шаблоне — очень легко, они доступны как обычные и выводятся точно также. В нашем случае, это будет
<?php $postimageurl = get_post_meta($post->ID, 'ima', true);
if ($postimageurl) { ?>
<img src="<?php echo $postimageurl; ?>" alt="<?php the_title(); ?>" />
<?php } else { ?>
<img src="<?php bloginfo('template_url'); ?>/images/noimage100.gif" alt="Миниатюра отсутствует" />
<?php } ?>
Это в случае, если у вас поле для ввода картинки текстовое и туда вы вводите урл к картинке, причем noimage100.gif — это миниатюра, которая выводится, если вы не указали картинку.
Можно ещё больше упростить. Сделать так
<?php echo get_post_meta($post->ID, 'ima', true) ?>
Тогда просто будет выводится значение вашего поля.
Тоже самое делаем и для рецензии
<?php echo get_post_meta($post->ID, 'desc', true) ?>
Вот и все. Стоит конечно напомнить, что этот код нужно писать внутри цикла.
ОЧЕНЬ ВАЖНОЕ ЗАМЕЧАНИЕ. Если вы используете ЧПУ, то часто возникнет ситуация, что вроде все сделали правильно, а на выходе получите 404 ошибку. Не расстраивайтесь, просто зайдите в админке настройки-постоянные ссылки (ЧПУ) и нажмите обновить.
Как сделать архив с произвольными типами записей.
Вот здесь нас ожидает засада. По идее, архив должен был быть доступен по ссылке сайт.ру/books. Но вместо этого вы получите 404 ошибку. В следущей версии wordpress нам обещают исправить этот недочет, а пока я вам расскажу как обойти эту проблему.
Для начала создайте страницу с одноименным названием с вашим типом записей. У меня это book. После этого создаем файлик в папке вашей темы и называем его как угодно, допустим booktemplate.php В начало этого файла вставляем
<?php
/*
Template Name: Книги
*/
?>
Название конечно можете любое делать. После этого кода вставляем тот код, который нужно скопировать с page.php. В админке, там где вы создали страницу, выбираем этот шаблон в списке шаблонов
Вот теперь, этот шаблон будет использоваться как архив.
Но нужно указать как выводить записи в нем. Поэтому, вместо обычного цикла пишем следующее
<?php $books = new WP_Query('post_type=book&post_status=publish');
if($books->have_posts()) :?>
<?php while($books->have_posts()) :?>
<?php
$books->the_post();
// получаем таксономию
$cover = get_the_term_list($post->ID, 'cover','',', ');
?>
<div id="title-block">
<h1><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h1>
<div class="post-meta">
<?php the_time('j F Y') ?> |
<?php echo $cover ?>
</div>
</div>
<div id="text-content">
<?php the_content(); ?>
<div class="clear-float"></div>
</div>
<?php endwhile; ?>
<?php else : ?>
<div class="post">
<h2><?php _e('Error 404'); ?></h2>
</div>
<?php endif; ?>
Как видите, мы добавили в код ещё и вывод нашей новой таксономии
$cover = get_the_term_list($post->ID, 'cover','',', ');
Читаем подробнее , если нужно.
Но и здесь нас ожидает проблема — этот код не поддерживает пагинацию, и чтобы вылечить, придется помучиться с кодом. Так что лучше подождать следующую версию в которой будет поддержка архивов.
По поводу новой таксономии, по умолчанию, если вы перейдете по ссылке — то будет все та же 404 ошибка. Ведь, если не указать определенный шаблон для вывода новой таксономии, то будет использован шаблон category.php или archive.php — а в нем не указан вывод нового типа записей. Поэтому для того, чтобы создать архив для новой таксономии, вам нужно сделать тоже, что и в предыдущем шаге, только не обязательно вставлять в начало файла
<?php
/*
Template Name: Книги
*/
?>
а вместо этого, нужно назвать файл taxonomy-имя_таксономии.php. В моем случае это было taxonomy-cover.php
Вот и все на сегодня, как только выйдет новая версия wordpress, то я обязательно расскажу о нововведениях, которые ещё больше упростят работу с новыми типами данных.
У вас завал на работе, куча документов и их некому разгребать. Читайте как настроить автоматизацию документооборота
Понравилась статья? - Подпишись.
Или поделись полезным с миром
Похожие статьи:
появилась ошибка:
Далее ошибка указала на линию 18. Удалил и вторую картинку, но ошибка с линии 18 не исчезла. А программист пхп из меня мягко сказать слабый )
Parse error: syntax error, unexpected ‘<' in /sata2/home/users/mtkun/www/www.mtkun.com/wp-content/themes/business-success/interest.php on line 7 Как это понимать и что делать?
Спасибо