23 сентября 2010

Повторное использование кода в WordPress

Сегодня в разделе WordPress программирование поговорим о повторном использовании кода. Когда вы работаете с шаблонами WordPress, то сталкиваетесь с ситуацией когда один и тот же кусок кода повторяется на разных страницах. Это в первую очередь относится к коду, который содержится в цикле (Loop). Для примера приведу кусок кода из файла Index.php моего шаблона


<?php if (have_posts()) : ?>

<!-- Начало цикла  -->
<?php while (have_posts()) : the_post(); ?>
<?php $cur_article = $cur_article + 1; ?>

<div class="comment" id="post-<?php the_ID(); ?>">
<div class="time-comments clearingfix">

<div class="time"><?php the_time('jS F Y') ?><?php edit_post_link('Edit', ' | &nbsp;', ''); ?></div>

<div class="num-comments">
	<table align="center" cellpadding="4">
	<tbody>
	<tr>
	<td>
	<iframe src="http://api.tweetmeme.com/button.js?url=<?php echo(get_permalink()); ?>&amp;source=wpstarter&amp;style=compact&amp;service=ow.ly&amp;space=1" height="16" width="90" frameborder="0" scrolling="no">
	</iframe>
	</td>
	<td>
	<?php comments_popup_link('No Comments', '1 Comment', '% Comments'); ?>
	</td>

	</tr>
	</tbody>
	</table>
</div>

</div>

<div style="text-align:center;">
<h1>Дело за № <?php echo get_post_meta($post->ID,'incr_number',true); ?>: <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h1>
</div>

<div class="clearingfix">

<?php the_content(''); ?></div>
<div class="icons-readmore clearingfix">

<div class="readmore"><a href="<?php the_permalink() ?>" class="more" title="Читать всё: <?php the_title_attribute(); ?>">Читать дальше</a></div>
</div>
</div>
<?php endwhile; ?>
<!--  конец  цикла -->

<?php include(TEMPLATEPATH."/pagenavi.php"); ?>
<?php else : ?>

	<h2 class="center">Not Found</h2>
	<p class="center">Sorry, but you are looking for something that isn't here.</p>
	<?php get_search_form(); ?>

<?php endif; ?>

Этот же код повторяется в файле archive.php. И если нужно вносить какие-либо изменения или дополнения на блоге, то приходится править оба файла. Для того, чтобы избежать двойной работы нужно перенести часть кода в другой файл шаблона, а потом подключить его. О том как подключать файлы шаблона я писал в статье 6 способов включить файлы в шаблон WordPress.
Начиная с версии 3.0 движка WordPress появилась новая функция

get_template_part( $slug, $name );

которая подключит в шаблон файл с именем {slug}-{name}.php
Используем её для того, чтобы убрать повторный код из разных файлов. Можно создать файл loop.php и перенести в него код, который я привел в качестве примера. Затем в файлах index.php и archive.php заменяем скопированный код цикла на вызов функции get_template_part()

<?php get_header(); ?>

 <div id="content">

 <?php get_template_part('loop'); ?>

 </div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

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

<?php get_header(); ?>

 <div id="content">

 <?php get_template_part('loop','category'); ?>

 </div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>
Статьи по теме
Статья оказалась полезной? Подпишись на RSS рассылку или следуй за мной на твиттере @wpstarter или по этой ссылке wpstarter

Один комментарий

Вы можете следовать любому комментарию через RSS 2.0 feed.

Вы можете оставить комментарий или trackback с вашего сайта.

  1. Отличный способ оптимизировать код и облегчить страницы

Оставьте комментарий

Обведите фигуру по линии:

Ставим WordPress на локальном копьютере