Simplicity の AMP に WordPress のコメント欄を設置するカスタマイズ

Akira

福岡在住ウェブデザイナー。Web サイト制作に役立つ情報を紹介しています。AMP が大好き。

FacebookTwitter で記事の更新をお知らせしています。

Simplicity の AMP ページには、コメント欄が表示されません。

しかし、カスタマイズで「コメントリスト」と「通常ページのコメントフォームに移動するボタン」を表示できます。

そのカスタマイズの紹介です。

完成図

Simplicity の AMP ページにコメント欄の実装後の完成図は、以下の画像のとおりです。Simplicity には 3 つのコメント表示タイプがありますが、いずれもコメント欄を実装できます。

コメント表示タイプ「デフォルト」

コメント表示タイプ「シンプルスレッド表示」

コメント表示タイプ「某スレッド掲示板風」

カスタマイズ後は、コメントリストと「コメントする」ボタンが表示されます。

「コメントする」ボタンとコメントの「返信」をクリックすると、通常ページのコメントフォームに移動します。

「某スレッド掲示板風」には、コメントの「返信」はありません。

もちろん AMP 検証には合格するため、安心してカスタマイズが可能です。

アバターとコメント返信機能の置換

AMP ページにコメントリストを表示するには、アバターとコメント返信機能の AMP 対応が必要です。

まずは、子テーマの functions.php に、以下のコードを追加します。このコードは、3 つのコメント表示タイプの全てに共通です。

/**
 * アバターの AMP 対応
 * 親テーマ lib/amp.php の convert_content_for_amp 関数を使用
 */
add_filter( 'get_avatar', 'convert_content_for_amp', 999999999 );

/**
 * 「返信」の URL を変更
 */
add_filter( 'comment_reply_link', function( $link ) {
  if ( ! is_amp() ) {
    return $link;
  }
  
  $pattern = '/href=\'[^"](.+?)\/\?amp=1&(.+?)\'/is';
  $append  = 'href="/$1/?$2"';
  $link    = preg_replace( $pattern, $append, $link );

	return $link;
	
}, 999999999 );

アバターの <img> タグを、<amp-img> に置き換えています。

また、コメントの「返信」の URL を変更しています。これで「返信」をクリックすると、通常ページのコメントフォームに移動します。

コードは、「WordPress の投稿本文を AMP 化する方法」を参考にしました。

コメント表示タイプ「デフォルト」

ここからは、コメント表示タイプによってカスタマイズが異なります。

まずは、コメント表示タイプ「デフォルト」のカスタマイズを説明します。

テンプレートの作成

AMP ページに設置するコメント欄のテンプレートを作成します。

FTP ソフトやサーバーのファイルマネージャー機能を使い、子テーマに 1 つファイルを作成します。そして、ファイル名を my-amp-comments-default.php にします。

作成した my-amp-comments-default.php に、以下のコードを追加します。

<div id="comment-area">
  <?php
  if ( have_comments() ) {
  ?>
  <section>
    <h2 id="comments"><?php echo get_theme_text_comments(); ?></h2>
    <ol class="commets-list">
      <?php wp_list_comments( 'avatar_size=56' ); ?>
    </ol>
    <div class="comment-page-link">
      <?php paginate_comments_links(); ?>
    </div>
  </section>
  <?php
  }
  
  if ( is_comment_form_freeze() ) {
    echo get_theme_text_comment_freeze_label();
  } else {
    if ( have_comments() ) {
      echo '<aside>
              <div id="respond" class="comment-respond">
                <h3 id="reply-title" class="comment-reply-title">' . get_theme_text_comment_reply_title() . '</h3>
                <a class="comments-from-amp" rel="nofollow" href="' . get_the_permalink() . '#respond">コメントする</a>
              </div>
            </aside>';
    } else {
      echo '<aside>
              <div id="respond" class="no-comment-respond">
                <h2 id="reply-title" class="comment-reply-title">' . get_theme_text_comment_reply_title() . '</h2>
                <p class="no-yet-comment">ご意見やご要望をお聞かせください。</p>
                <a class="comments-from-amp" rel="nofollow" href="' . get_the_permalink() . '#respond">コメントする</a>
              </div>
            </aside>';
    }
  }
  ?>
</div>

親テーマの comments-default.php を基本に、通常ページと同じ HTML のアウトラインにしています。

コメントを表示していてコメントがある時には、「コメントをどうぞ」の見出しが <h3> タグで出力されます。

コメントを表示していてコメントがない時には、「コメントをどうぞ」の見出しが <h2> タグで出力されます。

また、コメントがない時は、見出しとボタンだけではあまりにも寂しいため、「ご意見やご要望をお聞かせください。」のテキストを表示しています。

ボタンの「コメントする」(2 ヶ所)、テキストの「ご意見やご要望をお聞かせください。」(1 ヶ所)の定型文は、コード内でご変更ください。

ちなみに、ボタンの「コメントする」は下記のコードにすると、テーマ設定 → 「テーマ内テキスト」 → 「コメントサブミットラベルを変更」の定型文を呼び出せます。

<a class="comments-from-amp" rel="nofollow" href="' . get_the_permalink() . '#respond">' . get_theme_text_comment_submit_label() . '</a>

「コメントをどうぞ」の見出しは、テーマ設定の「テーマ内テキスト」より「返信コメントタイトルを変更」で変更できます。

テンプレートの設置

作成した my-amp-comments-default.php を、single-amp.php に設置します。

まず、親テーマにある single-amp.php を、子テーマ直下にコピペします。

子テーマに設置した single-amp.php を開き、下記のコードを探します。

<?php endif; //is_related_entry_visible?>

上記のコードの下の行に、下記コードを追加します。

<?php
if ( is_comments_visible() ) {
  comments_template( '/my-amp-comments-default.php' );
}
?>

これで関連記事下にコメント欄が表示されます。

CSS の指定

あとは CSS で見た目を整えます。

子テーマの amp.css に、下記 CSS を追加します。

#comments,
#reply-title {
  font-size: 21px;
}

#comments {
  margin-bottom: 25px;
}

.commets-list,
.trackback-list {
  margin: -20px 0 40px;
}

#comment-area ol,
#comment-area ul {
  list-style: none;
  padding-left: 0;
}

.commets-list li,
.trackback-list li {
  border-bottom: 1px solid transparent;
  margin-top: -1px;
  padding: 20px 0 0;
  width: 100%;
}

.children {
  margin-left: 1.5em;
}

.commets-list .avatar {
  float: left;
  margin: 0 10px 10px 0;
}

.comment-meta,
.reply {
  font-size: 80%;
}

.reply {
  text-align: right;
}

.comment-body p {
  clear: both;
}

.comment-page-link {
  margin: 1em 1em 3em;
  text-align: center;
}

#respond {
  margin-bottom: 40px;
}

.comment-respond,
.no-comment-respond {
  text-align: center;
}

.comments-from-amp {
  border: 1px solid #777;
  border-radius: 3px;
  box-sizing: border-box;
  color: #333;
  display: inline-block;
  height: 40px;
  line-height: 40px;
  min-width: 64px;
  padding: 0 16px;
  text-decoration: none;
  transition: .3s cubic-bezier(.4, 0, .2, 1);
}

.comments-from-amp:hover {
  background: #eee;
  color: #333;
}

Simplicity デフォルトのコメント欄の CSS とほぼ同じです。

これで、コメント表示タイプ「デフォルト」のカスタマイズは完了です。

コメント表示タイプ「シンプルスレッド表示」「某スレッド掲示板風」

コメント表示タイプ「シンプルスレッド表示」と「某スレッド掲示板風」のカスタマイズを説明します。

この 2 つのカスタマイズは、CSS 以外は同じです。

尚、AMP ページでの「シンプルスレッド表示」と「某スレッド掲示板風」の切り替えは、テーマ設定ではできません。2 つの表示タイプは CSS が異なるため、ご希望のタイプの CSS を amp.css に追加します。

また、「アバターとコメント返信機能の AMP 対応」は、すでに行っている必要があります。

テンプレートの作成

AMP ページ専用のコメント欄のテンプレートを作成します。

FTP ソフトやサーバーのファイルマネージャー機能などを使用し、子テーマに 1 つファイルを作成します。

作成したファイルの名前を my-amp-comments-thread.php とし、下記コードを追加します。

<div id="comments-thread">
  <?php
  if ( have_comments() ) {
  ?>
  <section>
    <h2 id="comments"><?php the_title(); ?>』へのコメント</h2>
    <ol class="commets-list">
      <?php wp_list_comments( 'callback=thread_comment' ); ?>
    </ol>
    <div class="comment-page-link">
      <?php paginate_comments_links(); ?>
    </div>
  </section>
  <?php
  }
  
  if ( is_comment_form_freeze() ) {
    echo get_theme_text_comment_freeze_label();
  } else {
    if ( have_comments() ) {
      echo '<aside>
              <div id="respond" class="comment-respond">
                <h3 id="reply-title" class="comment-reply-title">' . get_theme_text_comment_reply_title() . '</h3>
                <a class="comments-from-amp" rel="nofollow" href="' . get_the_permalink() . '#respond">コメントする</a>
              </div>
            </aside>';
    } else {
      echo '<aside>
              <div id="respond" class="no-comment-respond">
                <h2 id="reply-title" class="comment-reply-title">' . get_theme_text_comment_reply_title() . '</h2>
                <p class="no-yet-comment">ご意見やご要望をお聞かせください。</p>
                <a class="comments-from-amp" rel="nofollow" href="' . get_the_permalink() . '#respond">コメントする</a>
              </div>
            </aside>';
    }
  }
  ?>
</div>

HTML のアウトラインは、Simplicity の通常ページと同じです。

コメント表示タイプ「デフォルト」と同じく、コメントの有無で見出しのタグが変わります。コメントがある時は <h3> で、ない時は <h2> で出力します。

また、コメントがない時は、「ご意見やご要望をお聞かせください。」のテキストを表示しています。

「ご意見やご要望をお聞かせください。」(1 ヶ所)、ボタンのテキスト「コメントする」(2 ヶ所)の定型文は、コード内でご変更ください。

見出しの「コメントをどうぞ」は、テーマ設定より変更できます。

テンプレートの設置

作成した my-amp-comments-thread.php を設置します。

まず、親テーマの single-amp.php を子テーマにコピペをし、子テーマに設置した single-amp.php を開きます。

子テーマに設置した single-amp.phpより、下記のコードを探します。

<?php endif; //is_related_entry_visible?>

上記コードの下の行に、以下のコードを追加します。

<?php
if ( is_comments_visible() ) {
  comments_template( '/my-amp-comments-thread.php' );
}
?>

ここまで終われば、関連記事の下にコメント欄が表示されます。

「シンプルスレッド表示」の CSS

あとは、CSS で見た目を調整すれば終わりです。

「シンプルスレッド表示」の見た目にする場合は、下記の CSS を子テーマの amp.css に追加します。

#comments,
#reply-title {
  font-size: 21px;
}

#comments {
  margin-bottom: 25px;
}

.commets-list,
.trackback-list {
  margin: -20px 0 40px;
}

.commets-list li,
.trackback-list li {
  border-bottom: 1px solid transparent;
  margin-top: -1px;
  padding: 20px 0 0;
  width: 100%;
}

.children {
  padding-left: 2em;
}

.comment-info {
  display: inline;
}

.comment-info > .avatar {
  float: right;
  margin: 0 0 0 10px;
  max-width: 40px;
  max-height: 40px;
}

.comment-author {
  font-weight: bold;
}

.comment-id,
.form-allowed-tags {
  display: none;
}

.comment-page-link {
  margin: 1em 1em 3em;
  text-align: center;
}

#respond {
  margin-bottom: 40px;
}

.comment-respond,
.no-comment-respond {
  text-align: center;
}

.comments-from-amp {
  border: 1px solid #777;
  border-radius: 3px;
  box-sizing: border-box;
  color: #333;
  display: inline-block;
  height: 40px;
  line-height: 40px;
  min-width: 64px;
  padding: 0 16px;
  text-decoration: none;
  transition: .3s cubic-bezier(.4, 0, .2, 1);
}

.comments-from-amp:hover {
  background: #eee;
  color: #333;
}

Simplicity デフォルトの CSS を基本としています。

「某スレッド掲示板風」の CSS

「某スレッド掲示板風」の見た目にする場合は、下記の CSS を子テーマの amp.css に追加します。

#comments-thread {
  background: #f7f7f7;
  padding-bottom: 30px;
}

#comments,
#reply-title {
  font-size: 21px;
}

#comments {
  margin-bottom: 25px;
}

.commets-list {
  margin: -20px 29px 40px 39px;
  padding-left: .5em;
}

.commets-list li,
.trackback-list li {
  border-bottom: 1px solid transparent;
  margin-top: -1px;
  padding: 20px 0 0;
  width: 100%;
}

.children {
  padding-left: 2em;
}

.comment-info {
  font-weight: bold;
}

.comment-info > amp-img,
.comment-reply {
  display: none;
}

.comment-author {
  color: #008800;
}

#comments-thread p {
  font: 12pt/18px Mona, 'IPA MONAPGOTHIC', 'MS PGothic', 'MS Pゴシック', 'MS Pゴシック', 'MS Pゴシック', sans-serif;
}

.comment-page-link {
  margin: 1em 1em 3em;
  text-align: center;
}

.comment-respond,
.no-comment-respond {
  text-align: center;
}

.comments-from-amp {
  background: #fff;
  border: 1px solid #333;
  border-radius: 3px;
  box-sizing: border-box;
  color: #333;
  display: inline-block;
  height: 40px;
  line-height: 40px;
  min-width: 64px;
  padding: 0 16px;
  text-decoration: none;
}

.comments-from-amp:hover {
  color: #333;
}

@media screen and (max-width: 740px) {
  #comments-thread {
    margin: 0 -10px;
  }
  
  .comment-info {
    font-size: 14px;
  }
}

Simplicity デフォルトの CSS を真似しているため、見た目はほぼ同じだと思います。

送信に失敗しました

ボットと判定された可能性があります。

大変お手数をおかけしますが、以下の内容をご確認の上、再度のコメントの送信をお願い申し上げます。