Статьи

Создание стартовых файлов для вашей WordPress Theme Framework

В предыдущих частях этой серии вы узнали, как работают тематические рамки, и рассмотрели свой подход к разрабатываемой структуре.

Теперь пришло время погрузиться в некоторый код!

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

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

Примечание: исходные файлы основаны на теме, которую я создал для своей серии по созданию темы WordPress из HTML , с некоторыми изменениями. Вы можете скачать их из репозитория GitHub, сопровождающего эту серию.

Чтобы следовать этому уроку, вам понадобится:

  • установка для разработки WordPress
  • Ваша собственная начальная тема или файлы начальной темы в репозитории GitHub для этой серии
  • редактор кода

Для моей структуры я собираюсь создать три цикла:

  • один для архивов (включая главную страницу блога)
  • один для отдельных сообщений
  • один для страниц

Это потому, что я хочу, чтобы каждый из них отображался немного иначе, чем другие.

Даже если будет три цикла, это все равно будет более эффективным, чем включение цикла в каждый файл шаблона в вашей среде.

Основной цикл будет для архивов и главной страницы блога. В папке вашей темы создайте файл с именем loop.php .

Скопируйте в него следующее из archive.php :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?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();
    </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( ‘, ‘ );
            
        <?php endif;
    </section><!— .entry-meta —>
     
</article><!— #01—>
 
<?php endwhile;
<?php // ends the loop ?>

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

1
2
if ( ! is_front_page() ) {
}

Первый цикл теперь будет выглядеть следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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() , который содержит файл цикла в нужном месте:

1
<?php get_template_part( ‘loop’ );

Теперь у вас есть рабочий цикл для архивов.

Далее вы создадите файл цикла для страниц. Создайте файл с именем loop-page.php .

Скопируйте цикл в него из существующего page.php :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<?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();
           <?php } ?>
            
           <section class=»entry-content»>
               <?php the_content();
           </section><!— .entry-content —>
       </article><!— #post-## —>
 
   <?php endwhile;

Теперь во всех шаблонах страниц вашей темы ( page.php и page-full-width.php ) замените цикл на:

1
<?php get_template_part( ‘loop’ , ‘page’ );

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

Создайте файл с именем loop-single.php и другой single.php именем single.php .

Скопируйте содержимое файла index.php в single.php и отредактируйте комментарии в начале файла и вызов цикла, чтобы он читал:

1
<?php get_template_part( ‘loop’, ‘single’ );

Теперь в single-loop.php скопируйте код в loop.php , не считая первый цикл поиска архивов. Отредактируйте открывающий тег заголовка внутри цикла, чтобы удалить ссылку, чтобы код читал:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?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();
    </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( ‘, ‘ );
            
        <?php endif;
    </section><!— .entry-meta —>
     
</article><!— #01—>
 
<?php endwhile;

Сохраните эти два файла. Теперь у вас есть все файлы циклов, готовые к работе.

Приведение в порядок темы и уменьшение дублирования кода перед его использованием в качестве основы темы сэкономит вам долгие часы работы в долгосрочной перспективе.

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