В предыдущей части мы научились добавлять в админку функционал новых типов записей, новые поля для ввода данных, а также новую таксономию. Но теперь ведь нужно это все отобразить на сайте.
Как это сделать я и расскажу в этой части.
Прежде всего, хочу сказать, что считаю возможности 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) ?>
Вот и все. Стоит конечно напомнить, что этот код нужно писать внутри цикла.
Как сделать архив с произвольными типами записей.
Вот здесь нас ожидает засада. По идее, архив должен был быть доступен по ссылке сайт.ру/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, то я обязательно расскажу о нововведениях, которые ещё больше упростят работу с новыми типами данных.
Понравилась статья? - Подпишись.
Или поделись полезным с миром
Похожие статьи:
а что за ссылка на картинку?
have_posts()) >
я попробовал сделать как тут написано.
появилась ошибка:
Parse error: syntax error, unexpected ‘<' in …bp-themes/bp-default/page2.php on line 18
Сначала линия 16. Увидел картинку. Удалил.
Далее ошибка указала на линию 18. Удалил и вторую картинку, но ошибка с линии 18 не исчезла. А программист пхп из меня мягко сказать слабый )
Буду премного благодарен за код пагинации
а чем не подходит wp-pagenavi?
А как её прикрутить к кастомному архиву?
ничем не могу помочь, так как не пробовал. Попробуйте новые версии wp page navi или решения отсюда
Вот версия то новая вышла, жду рассказа)
При загрузке страницы выдает следующее
Parse error: syntax error, unexpected ‘<' in /sata2/home/users/mtkun/www/www.mtkun.com/wp-content/themes/business-success/interest.php on line 7 Как это понимать и что делать?
Спасибо
судя по ошибке — у вас обычная ошибка синтаксиса, где-то лишний значок в коде поставили
>> Но вместо этого вы получите 404 ошибку. В следущей версии wordpress нам обещают исправить этот недочет, а пока я вам расскажу как обойти эту проблему.
не знаете это исправили в новых версиях
я сейчас с wordpress не часто работаю, поэтому не скажу. Какие-то функции с архивами там точно добавляли, но не знаю исправляли ли этот баг или нет
Спасибо, полезная статья!