Цикл WordPress — это код, с помощью которого отображается контент на вашем сайте на WordPress.
Возьмем, к примеру, шаблон index.php. В основной теме для блога этот шаблон используется для вывода нескольких записей или же анонса записи на домашней странице сайта, а WordPress цикл помогает это сделать.
Вам пригодятся минимальные знания о цикле, если вы хотите усовершенствовать дизайн своего сайта на WordPress. Даже если вы не знакомы с PHP или HTML, то после прочтения этого поста у вас будут представления о том, как работает цикл WordPress.
Смотрите также:
Понимание цикла в WordPress
Лучший способ понять принцип работы цикла WordPress — это посмотреть, как он используется в теме WordPress. Поэтому, давайте изначально рассмотрим простой код, а затем и каждую его строку по отдельности, чтоб понять, какую функцию каждая из них выполняет.
Ниже приведен пример самого простого цикла WordPress. Код в используемой вами теме на WordPress для цикла может быть более длинным, но его структура ничем не отличается.
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); // // Post Content here // endwhile; // end while endif; // end if ?>
Если вы хоть немного разбираетесь в PHP, то вышеупомянутый код, скорее всего, будет вам понятен. Но, тем не менее, мы все-таки детально рассмотрим каждую строку кода на случай, если вы абсолютный новичок в этом.
Первым делом мы сообщаем серверу, что мы будем использовать PHP. Открываем функцию PHP следующим образом:
<?php
В следующей строке у нас идет привычная функция проверки «if» с функцией have_posts. Эта функция относится к логической, что означает, что она может быть как правдивой, так и ложной.
Поэтому следующая строка в коде говорит нам следующее, что «Если есть записи, которые должны выводиться – эту строку нужно использовать, если их нет - ничего не делать»:
if ( have_posts() ) :
В следующей строке используется цикл while. Он будет выполняться, если информация «правдива». То есть, если есть записи, которые должны выводиться на сайте, то эта строка должна быть в коде.
Поэтому, если на вашем сайте должны отображаться пять постов на домашней странице, функция while будет отображать данные в цикле пять раз:
while ( have_posts() ) :
Затем мы берем данные со следующей записи, используя функцию the_post. Это позволяет настроить запись и получить любую часть или информацию о посте, включая контент, дату публикации, автора записи, категорию публикации и многое другое:
the_post();
Раз уж мы упомянули нашу запись, мы можем отобразить в ней все, что хотим. Существует более тысячи доступных тэгов, которые могут быть использованы только в цикле WordPress. Например, the_title для вывода заголовка поста, the_content для отображения самого поста, the_category — для категорий и рубрик:
// // Post Content here //
После подтверждения информации, которая должна отображаться на сайте, мы закрываем цикл while:
endwhile; // end while
Затем мы закрываем функцию проверки «if»:
endif; // end if
И закрываем код PHP:
?>
Как видите, если разбить цикл по строчкам, то все становится понятным.
Примеры цикла
В WordPress Codex есть шаблон маленького кода index.php. В коде ниже видно, что в шаблоне index.php упоминается шапка, цикл WordPress, сайдбар и футер:
<?php get_header(); if (have_posts()) : while (have_posts()) : the_post(); the_content(); endwhile; endif; get_sidebar(); get_footer(); ?>
Код для цикла WordPress выглядит немного иначе в большинстве тем WordPress, потому что и отображаемая информация немного другая. Самый лучший способ понять, как цикл работает на практике – это изучить цикл WordPress в разных темах оформления.
Ниже приведен пример кода, который используется для цикла в шаблоне нынешней стандартной темы на WordPress — Twenty Fourteen. Как вы видите, в этой теме используются разные шаблоны для контента, в зависимости от типа поста. Например, стандартный пост будет выводить разную информацию из видео-постов и цитат-постов.
Навигационные линки выводятся после последнего поста, и сообщение отображается для посетителей в случае, если пост был не найден (это осуществляется с помощью шаблона content-none.php).
<?php if ( have_posts() ) : // Start the Loop. while ( have_posts() ) : the_post(); /* * Include the post format-specific template for the content. If you want to * use this in a child theme, then include a file called called content-___.php * (where ___ is the post format) and that will be used instead. */ get_template_part( 'content', get_post_format() ); endwhile; // Previous/next post navigation. twentyfourteen_paging_nav(); else : // If no content, include the "No posts found" template. get_template_part( 'content', 'none' ); endif; ?>
Цикл легче использовать в темах TwentyFourteen и Twenty Thirteen, потому что код для вывода контента и мета-информации находится в разных шаблонах. Более практично структурировать код для тем, которые поддерживают форматы постов.
Если проанализировать популярную тему Twenty Twelve, то можно заметить, что цикл требует наличия других файлов шаблона. Но большинство кода остается в шаблоне цикла — index.php.
<?php if ( have_posts() ) : ?> <?php /* Start the Loop */ ?> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content', get_post_format() ); ?> <?php endwhile; ?> <?php twentytwelve_content_nav( 'nav-below' ); ?> <?php else : ?> <article id="post-0" class="post no-results not-found"> <?php if ( current_user_can( 'edit_posts' ) ) : // Show a different message to a logged-in user who can add posts. ?> <header class="entry-header"> <h1 class="entry-title"><?php _e( 'No posts to display', 'twentytwelve' ); ?></h1> </header> <div class="entry-content"> <p><?php printf( __( 'Ready to publish your first post? <a href="%s">Get started here</a>.', 'twentytwelve' ), admin_url( 'post-new.php' ) ); ?></p> </div><!-- .entry-content --> <?php else : // Show the default message to everyone else. ?> <header class="entry-header"> <h1 class="entry-title"><?php _e( 'Nothing Found', 'twentytwelve' ); ?></h1> </header> <div class="entry-content"> <p><?php _e( 'Apologies, but no results were found. Perhaps searching will help find a related post.', 'twentytwelve' ); ?></p> <?php get_search_form(); ?> </div><!-- .entry-content --> <?php endif; // end current_user_can() check ?> </article><!-- #post-0 --> <?php endif; // end have_posts() check ?>
Лучше всего запомнить принцип кодирования «Не повторяйте самостоятельно!». Сокращая количество повторений, вы можете создать более компактные темы, и вам будет легче их изменять.
Комментарии к записи: 1
Цикл have_posts() относится только к записям (post) или к страницам (page) тоже?