Тип Поста

Создание Bootstrap3 формы и вывод комментариев для WordPress

Создание Bootstrap3 формы и вывод комментариев для WordPress

В этой статье мы рассмотрим, как создать полностью кастомную форму для комментариев или обратной связи в соответствии со всеми требованиями,которые предъявляет css-фреймворк Bootstrap3. И подготовим комментарии для вывода в любой нестандартный шаблон.

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

Скачать данный шаблон можно по ссылке:
https://github.com/sbogdanov108/article_wp/archive/master.zip

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

Итак, после установки шаблона перейдем в директорию wp-content/themes/blogus и откроем для редактирования файл content.php. Вставим в него следующий код, после строки:

<? the_content() ?>
<? if ( comments_open() ) : ?>
  <? comments_template() ?>
<? endif ?>

Здесь мы проверяем, если пост открыт для комментирования, тогда подключаем шаблон, содержащий код формы.

Теперь создадим шаблон комментариев, добавив в корень директории blogus файл с именем comments.php. Этот файл будет содержать в себе всю html-разметку, необходимую для работы формы и вывода комментариев.

Предварительно добавим в файл functions.php функцию, которая будет отвечать за правильное окончание слова «комментарий», в зависимости от количества самих комментариев:

/**
 * Получить окончание слова
 */
function get_end_of_word( $number )
{
  $cases = [ 2, 0, 1, 1, 1, 2 ];
  $titles = [ 'комментарий', 'комментария', 'комментариев' ];

  return $titles[ ( $number % 100 > 4 && $number % 100 < 20 ) ? 2 : $cases[ ( $number % 10 < 5 ) ? $number % 10 : 5 ] ];
}

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

Первый блок кода:

<?php
/*
 * Если данный пост защищен паролем через админку и
 * пользователь еще не ввел пароль, тогда мы не
 * будем загружать комментарии
*/
if ( post_password_required() )
{
  return;
}
?>

Второй блок кода, который размещаем сразу же после предыдущего:

<? /* Выводим комментарии только в том случае, если они есть */ ?>
<?php if ( have_comments() ) : ?>
<div class="row comments">
  <div class="col-md-12">
    <h4>
      <? /* Получаем кол-во комментариев */ ?>
      <?= get_comments_number() ?>
      <? /* Получаем корректное окончание слова, в зависимости от кол-ва комментариев. Функцию end_of_word помещаем в файл functions.php */ ?>
      <?= end_of_word( get_comments_number() ) ?>
    </h4>
  </div>

  <div class="col-md-12" id="comments">
    <? /* Выводим все комментарии */ ?>
    <? wp_list_comments( [
      'style'    => 'div',
      'type' => 'comment',
    ] ) ?>
  </div>
</div>
<? endif ?>

И третий блок кода, самый объемный, который отвечает за вывод формы для комментариев. Его помещаем после предыдущего блока:

<div class="row comment-form" id="respond">
  <div class="col-md-12">
    <h3><? comment_form_title( 'Оставить комментарий', 'Оставить комментарий для %s' ) ?></h3>

    <div id="cancel-comment-reply">
      <small>
        <? /* Получаем ссылку для отмены ответа на комментарий */ ?>
        <?= get_cancel_comment_reply_link() ?>
      </small>
    </div>

    <form class="form-horizontal" action="<?= get_option( 'siteurl' ) ?>/wp-comments-post.php" method="post" id="form-comment">

      <? /* Этот блок будет отрабатываться только для зарегистрированного пользователя */ ?>
      <? if ( is_user_logged_in() ) : ?>
        <p>Вы вошли как <a href="<?= get_option( 'siteurl' ) ?>/wp-admin/profile.php"><?= $user_identity ?></a>.
          <? /* Получаем ссылку для выхода из аккаунта */ ?>
          <a href="<?= wp_logout_url( get_permalink() ) ?>" title="Выйти из аккаунта">Выход</a>
        </p>
      <? else : ?>
        <div class="form-group">
          <label for="author" class="col-xs-3 col-sm-12 col-md-3 control-label">Имя
            <span class="star">*</span>
          </label>

          <div class="col-xs-9 col-sm-12 col-md-9">
            <input type="text" class="form-control" name="author" id="author" value="<?= esc_attr( $comment_author ) ?>" tabindex="1" aria-required="true" />
          </div>
        </div>

        <div class="form-group">
          <label for="email" class="col-xs-3 col-sm-12 col-md-3 control-label">E-mail (не публикуется)
            <span class="star">*</span>
          </label>

          <div class="col-xs-9 col-sm-12 col-md-9">
            <input type="text" class="form-control" name="email" id="email" value="<?= esc_attr( $comment_author_email ) ?>" tabindex="2"/>
          </div>
        </div>

        <div class="form-group">
          <label for="url" class="col-xs-3 col-sm-12 col-md-3 control-label">Сайт</label>

          <div class="col-xs-9 col-sm-12 col-md-9">
            <input type="text" class="form-control" name="url" id="url" value="<?= esc_attr( $comment_author_url ) ?>" tabindex="3"/>
          </div>
        </div>
      <? endif ?>

      <div class="form-group">
        <div class="col-sm-12">
          <textarea class="form-control" name="comment" id="comment" tabindex="4" placeholder="Комментарий..."></textarea>

          <span class="help-block">
            <small>Вы можете использовать следующие HTML-теги:<br/><code><?= allowed_tags() ?></code></small>
          </span>
        </div>
      </div>

      <div class="help-block help-required">
        <span class="star">*</span> Обязательно к заполнению
      </div>

      <div class="form-group">
        <div class="col-sm-12">
          <button type="submit" class="btn btn-default" id="submit" tabindex="5">Отправить</button>
          <? /* Генерируем необходимую служебную информацию для работы движка WordPress */ ?>
          <? comment_id_fields() ?>
        </div>
      </div>
    </form>
  </div>
</div>

А теперь приведем немного в порядок внешний вид формы и комментариев, добавив несколько стилей в файл style.css:

.comments {
  margin-top: 40px; }

.comments .comment .comment {
  margin-left: 40px; }

.comment {
  margin-top    : 15px;
  margin-bottom : 15px; }

.comment-form {
  margin-top : 40px; }

.comment-form textarea {
  height : 150px; }

.comment-form .help-block code {
  font-size : 70%; }

.comment-form .star {
  color : #c7254e; }

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

wordpress-bootstrap3-comments-2

И форма для комментариев, сверстанная полностью в соответствии с требованиями css-фреймворка Bootstrap3

wordpress-bootstrap3-form-1

На этом создание Bootstrap3 формы для WordPress завершено.

Исходные коды использованной темы доступны по ссылке:
https://github.com/sbogdanov108/article_wp

Поделиться

3 комментария

petrozavodsky боже мои глазки вытекли, кто сейчас использует <?=
Сергей Богданов Это всего лишь краткая форма функции echo. Используется очень широко, например, разработчиками одного из самого популярного фреймворка YII2: https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/output-data-widgets.md#Отдельная-форма-фильтрации.
Единственная причина, по которой не стоит использовать сокращенную запись, это, если версия php ниже 5.4, что практически не встречается на данный момент. Соответственно, причин не использовать <?= нет вообще. Вот хорошая статья про <?=: https://leehblue.com/summary-php-echo-shortcut-tag/. И документация про echo: http://php.net/manual/ru/function.echo.php.
Изучайте на здоровье :)
ps: кстати, вспомнил, что даже в PSR-1 (основной стандарт кодирования на php) есть рекомендации к использованию в php-коде или короткой формы тега <?=, или полной <?php: http://www.php-fig.org/psr/psr-1/. В общем, они абсолютно равноправны, можете без опаски использовать любую форму.
womanblog В Twitter Bootstrap 3 основная задача для веб-разработчика в основном сводится в добавлении необходимых классов для элементов управления, форм и контейнеров.

Оставить комментарий

Вы можете использовать следующие HTML-теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Обязательно к заполнению