DIW#8. Цикл WordPress

19.07.2012

Цикл Wordpress

Очередная статья из серии «Digging into WordPress» — сегодня будет посвящена циклу(или loop, его так тоже называют). Цикл WordPress — один из наиболее важных моментов, его даже можно назвать краеугольным камнем всей разработки под WordPress. Как выглядит типовой цикл WordPress, зачем нужен, как его применять — обо всем этом сегодняшняя статья.  

Итак, цикл WordPress — действительно, один из важнейших элементов разработки как шаблонов, так и плагинов. Самый базовый вариант цикла выглядит так:

<?php
//Цикл
if (have_posts()) : while (have_posts()) : the_post();
...
endwhile; else:
...
endif;
?>

Кто знаком с программированием — не увидит ничего сложного. Для остальных немного поясню: мы спрашиваем, если ли записи (if — если), которые подходят под наши условия,  и пока они есть (while —пока) выполняем некие действия над ними в цикле, то есть для каждой записи. Если же записей нет (else — иначе), выполняем какие-то другие действия.

Достаточно абстрактный пример, поэтому давайте рассмотрим что-то более приближенное к реальности.

<?php if (have_posts()) : ?> //есть ли записи?
<?php while (have_posts()) : the_post(); ?>//продолжаем
//Выводим блок с записью
<div class="post" id="post-<?php the_ID(); ?>">
//Заголовок
<h2>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
</h2>
//Миниатюра записи
<?php echo get_post_meta($post->ID, 'PostThumb', true); ?>
<p class="meta">
<span>Дата: </span> <?php the_time('F jS, Y'); ?>
<span>Автор: </span> <?php the_author(); ?></p>
//Выводим анонс записи
<?php the_content('Читать'); ?>
<p><?php the_tags('Теги: ', ', ', '<br />'); ?>
Категория: <?php the_category(', '); ?>
<?php comments_popup_link('Нет комментариев;', '1 комментарий', '% коментариев'); ?></p>
</div>
//конец вывода блока записи
<?php endwhile; ?>//конец цикла
//если в выборке пусто?
<?php else : ?>
<h2>Ничего не найдено</h2>
<?php endif; ?>

Примерно такой код вы сможете увидеть в любом шаблоне WordPress. Я постарался в коде прокомментировать все значимые участки, трудностей быть не должно. Теперь вы сможете самостоятельно отредактировать некоторые нюансы в вашем шаблоне.

Вообще, тема цикла WordPress — достаточно обширная, поэтому мы к ней вернемся и тщательно рассмотрим, когда будем создавать собственный шаблон. А сейчас пойдем дальше…

В шаблоне Twenty Ten, который идет в комплекте с WordPress 3.х — есть отдельный файл loop.php. Он может более наглядно показать, как работает цикл WordPress.

Некоторые функции, доступные только внутри цикла

Когда вы находитесь внутри цикла, становятся доступны некоторые функции, которые больше нигде не используются. Они связаны с выводом информации, которая относится к отдельному сообщению. Они не ограничены своим написанием, просто в другом месте они не имеют смысла.

Некоторые полезные функции:

  • the_title() — выводит название записи
  • the_permalink() — ссылка на запись
  • the_ID() — ID записи
  • the_author() — автор записи
  • the_category() — категория записи

Кроме этого, находясь внутри цикла, мы имеем доступ к куче переменных, которые заполняются после выполнения функции the_post() в самом начале цикла. Большинство из них используется другими функциями, они проводят над ними более сложные операции. Однако есть некоторые «сырые» данные, которые невероятно полезны. Эти переменные существуют в объекте $post и мы можем получить к ним доступ:

  • $post->ID — ID текущего поста, используется некоторыми функциями, вроде вывода миниатюры
  • $post->post_content — фактическое содержание записи, включая разметку
  • $post->post_modified — дата последнего изменения записи
  • $post->post_nameЧПУ записи

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

Некоторые функции, не работающие в цикле

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

Вот небольшой список подобных функций:

  • wp_list_pages() — возвращает список ссылок на ваши статические страницы
  • next_posts_link() — ссылка на следующую страницу в архиве записей
  • wp_tag_cloud() — выводит облако тегов
  • get_permalink() — получаем ссылку на запись для дальнейшего использования в PHP

К чему я это? К тому, чтобы вы учитывали факт существования подобных функций и не пытались их использовать внутри цикла. Бывали случаи…

На WPTuts+ я нашел отличную шпаргалку по этой теме, перевел ее на русский, хочу с вами поделиться.

Она в двух вариантах — PNG и PDF. Первый вариант откроется при клике на картинку, со вторым сами разберетесь

Превью шпаргалки

Превью шпаргалки

Скачать PDF(850 Кб)

Удачного вам дня

follow us in feedly

, ,

Комментариев: 9

  1. Эльвира

    Давайте пройдем! А еще одна интересненькая страничка Random у вас в карте сайта — http://gering111.com/random Это, наверно, тоже плагин.
    …Ох, что-то я вспомнила поговорку про «любопытную Варвару»)))
    P.S. А что, если бы у нас (то есть у вас) на сайте были какие-нибудь опросы, что-то вроде: Что вас больше интересует — плагины, шаблоны, HTML5, сниппеты, система и т.д.? Интересно, что же САМОЕ-САМОЕ будет в итоге? А на сегодня умолкаю. Прошу прощения.

    Ответить
  2. Эльвира

    «О, сколько нам открытий чудных готовит …» и так далее ))) SPAсибо!
    А ведь мы этот плагин еще здесь не проходили! Интересно, правда статистика улучшается?

    Ответить
  3. Эльвира

    Добрый день! Да, интересно пишите, прямо как детские рассказы, но по недетской теме (хотя, подозреваю, скоро с самого первого класса начальной школы будут преподавать детям основы программирования).
    А не подскажете, облако тегов на сайте «Женсовет» почему на разных страницах меняется? Как вы это сделали, если не секрет?
    Спасибо!

    Ответить