Как вывести произвольные типы записей, новые поля для ввода данных и custom taxonomy - Авторские материалы о продвижении вконтакте, wordpress фишках и плагинах, SMO, SEO, дизайне
Отборная информация, которая вставляет!

Делаем сайт с гибкой структурой на wordpress. Часть 2.

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

Как это сделать я и расскажу в этой части.

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

Но по порядку.

К примеру, мы создали сайт-каталог книг, в котором есть новые типы записей «книги» (book), для этого типа записей мы добавили 2 дополнительных поля — поле с миниатюрой (ima) и поле с рецензией(desc) + добавили таксономию в виде рубрик с описанием обложки книг.

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

Как сделать вывод полного описания произвольного типа записей с новыми полями


Мастика битумная технониколь 24 - мастика гидроизоляционная 24 20 кг uzliom.ru. 9643e5d7

Для вывода полного описания в 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, то я обязательно расскажу о нововведениях, которые ещё больше упростят работу с новыми типами данных.

У вас завал на работе, куча документов и их некому разгребать. Читайте как настроить автоматизацию документооборота


 

Похожие статьи:



11 комментариев к “Делаем сайт с гибкой структурой на wordpress. Часть 2.”

  1. maxxannik:

    а что за ссылка на картинку?

    have_posts()) >

    я попробовал сделать как тут написано.
    появилась ошибка:

    Parse error: syntax error, unexpected ‘<' in …bp-themes/bp-default/page2.php on line 18

    Сначала линия 16. Увидел картинку. Удалил.
    Далее ошибка указала на линию 18. Удалил и вторую картинку, но ошибка с линии 18 не исчезла. А программист пхп из меня мягко сказать слабый )

  2. Юрий:

    Буду премного благодарен за код пагинации

  3. Юрий:

    Вот версия то новая вышла, жду рассказа)

  4. Julia:

    При загрузке страницы выдает следующее
    Parse error: syntax error, unexpected ‘<' in /sata2/home/users/mtkun/www/www.mtkun.com/wp-content/themes/business-success/interest.php on line 7 Как это понимать и что делать?
    Спасибо

  5. :

    >> Но вместо этого вы получите 404 ошибку. В следущей версии wordpress нам обещают исправить этот недочет, а пока я вам расскажу как обойти эту проблему.

    не знаете это исправили в новых версиях

    • ETNO:

      я сейчас с wordpress не часто работаю, поэтому не скажу. Какие-то функции с архивами там точно добавляли, но не знаю исправляли ли этот баг или нет

  6. :

    Спасибо, полезная статья!