Статьи

Руководство для начинающих по циклу WordPress

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


Ядро функциональности WordPress лежит в том, что называется The Loop. Это очень простая концепция, и понимание этого позволит вам быть на пути к разработке темы. Вы можете (и должны!) Проверить официальную страницу кодекса в цикле , но сегодняшняя инструкция будет ориентирована на людей, которым не обязательно нравится изучать кодекс.

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

Прежде чем мы углубимся в код, давайте разберемся, что делает цикл. Есть три важных части этого:

  1. Запустите цикл.
  2. Сделайте что-нибудь с каждым сообщением / страницей, найденными в цикле.
  3. Закройте петлю.

Это довольно просто, верно? По умолчанию цикл извлекает все, что может найти … поэтому стоит отметить еще один фрагмент: запрос . Запрос — это то, что мы будем использовать для фильтрации всего стека сообщений только для того, что мы ищем. Итак, наша «модель непрофессионала», когда мы хотим получить определенный набор сообщений, выглядит следующим образом:

  1. Определите, что мы ищем.
  2. Запустите цикл.
  3. Сделайте что-нибудь с каждым сообщением / страницей, найденными в цикле.
  4. Закройте петлю.

Если вы когда-либо работали с PHP раньше, вы можете быть знакомы с функцией while которая обычно используется для циклического выполнения запроса к базе данных и динамического отображения информации о базе данных без необходимости вручную вводить каждую строку базы данных. Для тех, кто не является PHP, представьте, что функция while — это изящный маленький библиотекарь, который извлекает из базы данных все, что вам нужно, по одной записи за раз.

Теперь давайте посмотрим, как выглядит эта «модель непрофессионала» в реальном коде:

1
2
3
4
5
6
7
<?php
query_posts( ‘tag=apples’ );
if ( have_posts() ) : while ( have_posts() ) : the_post();
// DO SOMETHING WITH EACH POST THAT WE FOUND
<?php endwhile;
// DO SOMETHING IF NOTHING WAS FOUND
<?php endif;

Я учусь лучше всего на примере, поэтому давайте просто погрузимся в стандартную тему WordPress Twenty Ten и посмотрим, что там делает цикл.


WordPress имеет тему по умолчанию, которая поставляется с каждой установкой WordPress и активируется по умолчанию. Этот год называется Twenty Eleven, но мы будем использовать прошлогоднюю тему, Twenty Ten , в качестве нашего примера, потому что он изолирует цикл в своем собственном файле (что немного упрощает иллюстрацию нашего урока). Если вы перейдете к wp-content / themes / fiftyten, вы заметите структуру файла, как мы видим ниже:

Двадцать десять отделяет цикл от других файлов темы. Откройте index.php и запишите следующий код:

1
2
3
4
5
6
7
<?php
/* Run the loop to output the posts.
 * If you want to overload this in a child theme then include a file
 * called loop-index.php and that will be used instead.
 */
 get_template_part( ‘loop’, ‘index’ );
?>

Вскоре мы рассмотрим код, который он запрашивает, но важно знать, что все, что он делает, это запрашивает страницу loop-index.php. Если вы уже знакомы с PHP, метод include () аналогичен функции WordPress get_template_part (). Также вполне приемлемо вытащить весь код из loop-index.php и поместить его на место вышеприведенного кода. Это сделает то же самое. Цикл может существовать на странице и не должен быть отдельной страницей.

Далее мы собираемся открыть loop.php и проверить, что выполняет основной цикл.

Первая часть loop.php создает пагинацию, но если вы прокрутите вниз до строки 31 — мы заметим ключевой элемент: оператор if, который спрашивает, являются ли они сообщениями. Этот код гласит: «Если сообщений нет, отобразите сообщение о том, что сообщений нет».

1
2
3
<?php if ( ! have_posts() ) : ?>
Your code or HTML that states there is no content for the query.
<?php endif;

До строки 56 вы увидите еще один важный элемент цикла:

1
<?php while ( have_posts() ) : the_post();

Это заявление пока я упомянул ранее. В основном это может быть прочитано вслух как «Как бы долго ни были посты, делайте этот цикл». Затем вы сразу же увидите the_post (). Эта функция извлекает всю информацию о записи, так что мы можем отображать информацию о записи, используя стандартные теги WordPress (подробнее об этом позже).

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

Представьте, что вам нужно обновлять HTML каждый раз, когда вы хотите опубликовать блог. Это было бы невероятно больно, и я полагаю, что это отговорит вас вести блог. Я бы даже не стал беспокоиться. Цикл позволяет вам вводить запись в блоге в базу данных и извлекать контент в формат, который вы разрабатываете один раз, который будет всегда следовать. Единственное, что вам нужно, это знать, как манипулировать циклом для отображения того, что вы хотите, и как показать контент, который вы хотите.


В оставшейся части этого урока вся магия, которую мы будем создавать, будет через некоторое время и до конца.

Это действительно легко отобразить информацию, которую вы хотите в цикле WordPress. Я настоятельно рекомендую прочитать статью « Теги шаблонов» в Кодексе WordPress; это покажет вам все теги, которые вы можете использовать в цикле. Я представлю вам некоторые вещи, которые WordPress включил в тему «Двадцать десять».

1
<div id=»post-<?php the_ID(); ?>» <?php post_class();

Сначала идет the_ID (). Это уникальный идентификатор этого сообщения, ни одно сообщение или страница не будут иметь идентификатора. Если у вас нет перезаписи URL, вы увидите этот идентификатор в URL поста. В этом примере полезно добавить его к div id, чтобы в CSS вы могли стилизовать этот отдельный пост, не влияя на формат всех других постов. Далее следует post_class, который добавит класс CSS, соответствующий типу записи. Если это пост, у вас есть класс поста. Если это вложение, у вас будет класс вложения. Прочитайте кодекс для получения дополнительной информации о post_class ();

На следующей строке вы увидите два широко используемых тега. Во-первых

1
<?php the_permalink();

Обычно это заключено в элемент <a href>, потому что он печатает необработанную постоянную ссылку: http://yoursite.com/?p=123 Ссылка, по которой всегда может быть достигнута ссылка, на которую иногда не приятно — автоматически выводится когда вы используете тег_permalink ().

Сразу после этого тега вы увидите:

1
<?php the_title();

Это, как следует из названия, название поста. При создании сообщения все, что вы указали в качестве заголовка, будет отображаться здесь.

Переходя к строке 109, вы увидите несколько условных тегов, которые помогут нам разделиться.

1
<?php if ( is_archive() || is_search() ) : // Display excerpts for archives and search.

Это можно просто прочитать вслух как «Если мы в настоящее время находимся на странице архива или на странице поиска, отобразите содержимое следующим образом». Это вскоре после

1
<?php the_excerpt();

Но подождите — в остальном это условие вы увидите:

1
<?php the_content( __( ‘Continue reading <span class=»meta-nav»>→

Какая разница? the_excerpt () собирается извлечь только текст WordPress или определенный пользователем текст поста. Это полезно при архивировании или поиске, так что весь пост не возвращается, когда пользователь просто просматривает его, чтобы узнать, хочет ли он продолжить чтение. the_content () будет тянуть весь отформатированный пост до тега <! — more ->. Что уместно при отображении статьи на определенных страницах, когда она не борется за внимание

1
2
get_the_category_list( ‘, ‘ );
$tags_list = get_the_tag_list( », ‘, ‘ );

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


Теперь, когда мы знаем, как отображать наш контент в цикле, давайте поговорим о том, как его замять и запятнать, чтобы он возвращал именно то, что нам нужно.

Первый способ манипулировать циклом, это редактировать цикл напрямую. Через некоторое время вы хотите добавить квалифицирующую функцию query_posts (), чтобы она выглядела следующим образом:

1
2
<?php query_posts(‘category_name=baseball&posts_per_page=10’);
<?php while (have_posts()) : the_post();

В query_posts вы можете определить аргументы, которые дадут вам больше контроля над тем, что вы отображаете. С условием выше, я сказал, что я хочу получать сообщения только из категории с именем бейсбол, и я хочу отображать только 10 на странице за раз. Это действительно просто в использовании, поскольку вы только добавляете строку кода.

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

1
$my_query = new WP_Query(‘category_name=baseball&posts_per_page=10’);

Затем наш оператор while запрашивает классы из объекта $ my_query, поэтому теперь это выглядит так:

1
2
3
4
$my_query = new WP_Query(‘category_name=baseball&posts_per_page=10’);
 while ($my_query->have_posts()) : $my_query->the_post();
    //code
 endwhile;

Это может быть полезно, если вы хотите добавить второй цикл на вашу страницу. Используйте один цикл для отображения сообщений в одной категории слева, а в другой категории справа. Существует множество практических применений для этого, и вам, скорее всего, понадобится это в какой-то момент.

WordPress описывает третий пример изменения цикла в их Кодексе, который, я считаю, очень уместен. Это называется вложения. Вложение в основном имеет цикл внутри цикла. Кодекс WordPress упоминает, что это может быть полезно при использовании коротких кодов. Я пойду дальше и дам вам знать — да, это полезно в коротких кодах и пользовательских полях. Представьте себе, что у вас есть настраиваемое поле, которое вы можете заполнить идентификаторами постов, которые являются частью одной и той же серии (IE: wp.tutsplus.com имеет текущее учебное пособие, части 1, 2 и 3), а затем цикл вытягивает заголовок , выдержка и другая информация о посте. Это один из способов решения этой задачи.

Вложенный цикл похож на созданный выше цикл, который определяется переменной, с одним важным фрагментом кода в конце:

1
2
3
4
5
$my_query = new WP_Query(‘category_name=baseball&posts_per_page=10’);
 while ($my_query->have_posts()) : $my_query->the_post();
    //code
 endwhile;
wp_reset_postdata();

Вы заметите wp_reset_postdata () в этом цикле. Это сбрасывает глобальную переменную $post на текущую запись в основном запросе …. что полезно для вложенных циклов, а также в любое время, когда вы хотите, чтобы $post работала после факта. Спасибо Rarst за разъяснения по этому поводу!

К сожалению, на данный момент не так много документации от WordPress о функциональности wp_reset_postdata (). Кажется, единственное использование функции — для сброса цикла.


Ты сейчас чувствуешь себя мастером петель? Это был очень обширный обзор цикла. Сам цикл не сложен для понимания, но он настолько фундаментален для всего остального, с чем вы столкнетесь в WordPress. Цикл — это то, где все начинается, где генерируется весь ваш пост контент. Я надеюсь, что вы узнали что-то. Не стесняйтесь оставлять комментарии, если вам нужна дополнительная помощь!