Russian (Pусский) translation by Igor Podgarov (you can also view the original English article)
В ранних частях этой серии, вы узнали как фреймворки работают и рассмотрели подходы для разработки вашего собственного.
Сейчас самое время окунуться в код!
В этом руководстве, вы овладеете основами создания базовой темы и редактирования файлов шаблона, таким образом, чтобы они были готовы для добавления хуков и функций в ваш фреймворк. Цель этого урока - привести в порядок тему так, чтобы код не дублировался, а значит, вы будете создавать дополнительные файлы для циклов.
Это значит, что вы не будете создавать дублирующие циклы в вашей дочерней теме, при создании новых файлов шаблонов, и если вам нужно редактировать цикл, то сделать это, только один раз.
Заметьте: начальные файлы основаны на теме, которую я сделала для моей серии создание WordPress темы из HTML, с несколькими изменениями. Вы можете скачать их с GitHub репозитория, сопровождающего эту серию.
Что вам понадобиться
Следуя этому руководству, вам понадобиться:
- установленный WordPress
- ваша начальная тема или файлы начальной темы из GitHub репозитория, созданные, для этой серии
- текстовый редактор
Создаем файлы циклов
Для моего фреймворка я собираюсь создать три цикла:
- один для архива контента (включая страницу блога)
- один для отдельного поста
- один для страниц
Это все потому, что я хочу, чтобы каждый из них отображался немного по другому.
Даже несмотря на то, что у нас будет три цикла, это все равно будет более эффективно, чем добавлять по одному циклу в каждый файл шаблона в вашем фреймворке.
Основной цикл
Основной цикл будет для архива и для основной странице блога. В папке вашей темы, создайте файл с названием loop.php
.
Скопируйте в него из файла archive.php
следующие строки:
<?php /* Queue the first post, that way we know if this is a date archive so we can display the correct title. * We reset this later so we can run the loop properly with a call to rewind_posts(). */ if ( have_posts() ) the_post(); ?> <h2 class="page-title"> <?php if ( is_day() ) { ?> Archive for <?php echo get_the_date(); } elseif ( is_month() ) { ?> Archive for <?php echo get_the_date('F Y'); } elseif ( is_year() ) { ?> Archive for <?php echo get_the_date('Y'); } else { echo get_queried_object()->name; } ?> </h2> <?php rewind_posts(); ?> <?php // start the loop ?> <?php while ( have_posts() ) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <h2 class="entry-title"> <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'compass' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"> <?php the_title(); ?> </a> </h2> <section class="left image quarter"> <?php if ( has_post_thumbnail() ) { ?> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail( 'medium', array( 'class' => 'left', 'alt' => trim(strip_tags( $wp_postmeta->_wp_attachment_image_alt )) ) ); ?> </a> <?php } ?> </section><!-- .image --> <section class="entry-meta"> <p>Posted on <?php the_date(); ?> by <?php the_author(); ?></p> </section><!-- .entry-meta --> <section class="entry-content"> <?php the_content(); ?> </section><!-- .entry-content --> <section class="entry-meta"> <?php if ( count( get_the_category() ) ) : ?> <span class="cat-links"> Categories: <?php echo get_the_category_list( ', ' ); ?> </span> <?php endif; ?> </section><!-- .entry-meta --> </article><!-- #01--> <?php endwhile; ?> <?php // ends the loop ?>
Нам не нужно, чтобы отображался заголовок на главной странице блога, поэтому добавьте условие вокруг первого цикла, чтобы проверить, что мы не на этой странице:
if ( ! is_front_page() ) { }
Первый цикл сейчас будет выглядеть так:
if ( ! is_front_page() ) { if ( have_posts() ) the_post(); ?> <h2 class="page-title"> <?php if ( is_day() ) { ?> Archive for <?php echo get_the_date(); } elseif ( is_month() ) { ?> Archive for <?php echo get_the_date('F Y'); } elseif ( is_year() ) { ?> Archive for <?php echo get_the_date('Y'); } else { echo get_queried_object()->name; } ?> </h2> <?php rewind_posts(); } ?>
Сейчас вам нужно добавить этот цикл в соответствующие файлы шаблона. В archive.php
и index.php
, замените существующий цикл на функцию get_template_part()
, которая вставляет ваш, только что, созданный файл в нужное место:
<?php get_template_part( 'loop' ); ?>
Теперь у вас есть работающий файл для архивов.
Страничный цикл
Следующее что вам нужно, это создать файл для страниц. Назовите его loop-page.php
.
Скопируйте из, уже существующего, файла page.php
этот код:
<?php // Run the page loop to output the page content. if ( have_posts() ) while ( have_posts() ) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <?php if ( ! is_front_page() ) { ?> <h2 class="entry-title"><?php the_title(); ?></h2> <?php } ?> <section class="entry-content"> <?php the_content(); ?> </section><!-- .entry-content --> </article><!-- #post-## --> <?php endwhile; ?>
Сейчас во всех ваших шаблонах страниц (page.php
и page-full-width.php
), замените существующий цикл на:
<?php get_template_part( 'loop' , 'page' ); ?>
Цикл Отдельного Сообщения
Наконец, вам нужно создать файл для отдельных постов, который будет работать для обычных и для любых пользовательских типов сообщений, которые вы создадите в будущем. Это похоже на основной цикл, за исключением того, что он не добавляет ссылки на сообщения, и в нем нет никакого первоначального условия для проверки в каком архиве мы находимся.
Создайте два файла с названием loop-single.php
и single.php
.
Скопируйте содержимое из index.php
в single.php
, отредактируйте комментарии в начале файла и вызовите цикл, который выглядит так::
<?php get_template_part( 'loop', 'single' ); ?>
Потом в файл single-loop.php
, скопируйте код из loop.php
, не добавляя первый цикл, который проверяет данные архива. Отредактируйте заголовок, чтобы не было ссылки, вот код:
<?php while ( have_posts() ) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <h2 class="entry-title"> <?php the_title(); ?> </h2> <section class="left image quarter"> <?php if ( has_post_thumbnail() ) { ?> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail( 'medium', array( 'class' => 'left', 'alt' => trim(strip_tags( $wp_postmeta->_wp_attachment_image_alt )) ) ); ?> </a> <?php } ?> </section><!-- .image --> <section class="entry-meta"> <p>Posted on <?php the_date(); ?> by <?php the_author(); ?></p> </section><!-- .entry-meta --> <section class="entry-content"> <?php the_content(); ?> </section><!-- .entry-content --> <section class="entry-meta"> <?php if ( count( get_the_category() ) ) : ?> <span class="cat-links"> Categories: <?php echo get_the_category_list( ', ' ); ?> </span> <?php endif; ?> </section><!-- .entry-meta --> </article><!-- #01--> <?php endwhile; ?>
Сохраните эти два файла. Сейчас все ваши файлы циклов готовы.
Итог
Чистка темы и сокращение дублируемого кода, перед использованием его, как основы для фреймворка, в конечном счете, сэкономит ваше время.
Поскольку вы создаете дочерние темы, работая с родительскими, вы сможете просто создавать контент, используя циклы, в нужном пути для данного проекта. Имея только три дискретных цикла, вы избежите дублирование файлов шаблонов в дочерней теме, вам просто нужно будет создать новые файлы для этих циклов.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post