Статьи

Создание страницы FAQ с использованием двух циклов

Конечный продукт
Что вы будете создавать

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

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

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

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

  1. Создайте тему, которая станет детской темой двадцати четырнадцати
  2. Зарегистрируйте тип сообщения FAQ и добавьте в него некоторые данные.
  3. Создайте шаблон архива для типа записи FAQ, основываясь на шаблоне индекса в родительской теме.
  4. Добавьте в шаблон две петли: одну для вопросов и одну для ответов, со ссылкой на одну из них.

Для завершения этого урока вам понадобятся:

  • установка для разработки WordPress
  • рабочая тема (возможно, вы работаете со своей собственной темой или можете использовать родительскую тему, как я сделал)
  • редактор кода

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

Чтобы создать свою style.css тему, я создаю файл style.css и добавляю в него следующее:

01
02
03
04
05
06
07
08
09
10
11
/*
Theme Name: WPTutsPlus Creating an FAQ Archive Using Two Loops
Theme URI: http://rachelmccollin.co.uk/wptutsplus-faq-archive-two-loops/
Description: Theme to support WPTutsPlus tutorial on creating a custom faq archive.
Author: Rachel McCollin
Author URI: http://rachelmccollin.co.uk/
Template: twentyfourteen
Version: 1.0
*/
 
@import url(«../twentyfourteen/style.css»);

У меня сейчас есть рабочая детская тема.

Следующим шагом является создание типа сообщения FAQ. Создайте файл functions.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
<?php
// functions file for a theme with a custom faqs archive.
//************************** register custom post types and taxonomies ************//
function wptp_create_faq_post_type() {
         
    // faq custom post type
    register_post_type( ‘faq’, array(
        ‘labels’ => array(
        ‘name’ => ‘FAQs’,
        ‘singular_name’ => ‘FAQ’
    ),
        ‘has_archive’ => true,
        ‘public’ => true,
        ‘hierarchical’ => true,
        ‘supports’ => array( ‘title’, ‘editor’, ‘excerpt’, ‘custom-fields’, ‘thumbnail’,’page-attributes’ ),
        ‘exclude_from_search’ => true,
        ‘capability_type’ => ‘post’,
        ‘rewrite’ => array (‘slug’ => ‘faqs’ ),
        )
    );
 
}
add_action( ‘init’, ‘wptp_create_faq_post_type’ );
?>

Это создает новый тип записи с именем ‘FAQ’, используя функцию register_post_type() . Обратите внимание, что я использовал аргумент 'rewrite' чтобы изменить слаг, когда посетитель находится на странице архива, поэтому вместо URL этой страницы, заканчивающегося /faq/ он будет заканчиваться на /faqs/ .

Следующим шагом является создание некоторых данных для моих часто задаваемых вопросов. Вы можете увидеть это на панели инструментов для часто задаваемых вопросов ниже:

Теперь вам нужно создать файл шаблона, который будет отображать ваши часто задаваемые вопросы. Создайте новый файл в папке вашей темы с именем archive-faq.php . Поскольку моя тема является дочерней темой двадцати четырнадцати, я собираюсь добавить код обертки в файл шаблона из файла index.php этой темы, как показано ниже. Если вы используете свою собственную тему, добавьте свой собственный код оболочки. Это в основном весь код, кроме цикла, который вы еще не добавили, поскольку на следующем шаге вы собираетесь создать два пользовательских цикла.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
/**
 * The template for displaying the FAQ archive.
 *
 */
 
get_header();
 
<div id=»main-content» class=»main-content»>
 
    <div id=»primary» class=»content-area»>
        <div id=»content» class=»site-content» role=»main»>
 
 
        </div><!— #content —>
    </div><!— #primary —>
    <?php get_sidebar( ‘content’ );
</div><!— #main-content —>
 
<?php
get_sidebar();
get_footer();

Это дает вам основной файл, к которому вы будете добавлять свои циклы.

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

Сначала создайте цикл для вывода заголовков каждого FAQ. Добавьте следующий текст под открывающим <div id="content"> :

01
02
03
04
05
06
07
08
09
10
11
<?php // first loop — titles with link to detailed answers ?>
 
<h2>Frequently Asked Questions — click for answers</h2>
<ul class=»faq-list»>
 
    <?php while ( have_posts() ) : the_post();
        <li class=»post-<?php the_ID(); ?>» <?php post_class();
         
    <?php endwhile;
 
</ul>

Это делает следующее:

  • отображает заголовок в элементе <h2>
  • начинает цикл
  • внутри неупорядоченного списка выводит заголовок каждого FAQ в элементе списка, используя the_title()
  • переносит каждый заголовок в ссылку на #post-<?php the_ID(); ?> #post-<?php the_ID(); ?> , который будет идентификатором каждого сообщения во втором цикле
  • заканчивает цикл

Примечание. В приведенном выше примере я не проверял, есть ли в моем запросе сообщения, но вы можете if( have_posts() ) все в проверку для if( have_posts() ) чтобы ваш шаблон архива не if( have_posts() ) под этим.

Второй цикл будет снова выводить заголовки (в конце концов, ваши посетители захотят узнать, на какой вопрос каждый раз отвечают), используя the_title() и the_content() .

Ниже вашего первого цикла добавьте следующее:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?php // second loop — rewind and run again ?>
 
<?php rewind_posts() ;
 
<?php while ( have_posts() ) : the_post();
 
<article id=»post-<?php the_ID(); ?>» <?php post_class();
    <h3><a href=»<?php the_permalink(); ?>» title=»<?php printf( esc_attr__( ‘Permalink to %s’, ‘compass’ ), the_title_attribute( ‘echo=0’ ) ); ?>» rel=»bookmark»><?php the_title();
 
 
    <section class=»entry-content»>
        <?php the_content();
    </section><!— .entry-content —>
</article>
 
<?php endwhile;

Это начинается с перемотки цикла и запускает другой цикл для вывода:

  • Элемент статьи для включения каждого FAQ
  • Заголовок FAQ в элементе <h3> , с #post-<?php the_ID(); ?> #post-<?php the_ID(); ?> в качестве идентификатора, который обеспечивает связь в первом цикле.
  • Содержание FAQ.

Ваш файл шаблона архива завершен. Сохраните свою работу и протестируйте ее. У вас должна быть страница на yoursite.com/faqs которая выглядит примерно так:

Так вы создаете страницу часто задаваемых вопросов, в которой ваши вопросы и ответы разделены на две части. Прелесть этой техники в том, что вы просто используете стандартный цикл WordPress, и пока вы настраиваете этот цикл, вам не нужно создавать пользовательский запрос.