オリジナルのtheme(テーマ)を作る19:コメントフォームを追加する

index.phpにコメントフォームを組み込むテンプレートタグを追加します。

<?php comments_template(); ?>追加する場所は、pagerの下、左のカラムの一番下の部分です。

  1. <div class="row">
  2. <div class="col-md-9">
  3. <?php if(have_posts()): while(have_posts()): the_post(); ?>
  4. <article>
  5. <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
  6. <time><?php the_date('Y/m/d (D)'); ?><?php the_time(); ?></time>
  7. <div class="well well-lg">
  8. <div class="categorybtn">
  9. <?php the_category(); ?>
  10. </div>
  11. <!--//categorybtn -->
  12. <?php the_content(); ?>
  13. </div>
  14. <!--//well well-lg -->
  15. </article>
  16. <!--//article -->
  17. <?php if(is_single()): ?>
  18. <nav>
  19. <ul class="pager">
  20. <li class="previous">
  21. <?php if (get_previous_post()):?>
  22. <?php previous_post_link('%link','%title',TRUE); ?>
  23. <?php endif; ?>
  24. </li>
  25. <li class="next">
  26. <?php if (get_next_post()):?>
  27. <?php next_post_link('%link','%title',TRUE); ?>
  28. <?php endif; ?>
  29. </li>
  30. </ul>
  31. <!--//pager -->
  32. </nav>
  33. <!--//nav -->
  34. <?php endif; ?>
  35. <?php endwhile; endif; ?>
  36. <?php if(is_home() or is_archive()): ?>
  37. <nav>
  38. <ul class="pager">
  39. <li class="previous"><?php next_posts_link('<i class="fa fa-angle-left"></i> Older'); ?></li>
  40. <li class="next"><?php previous_posts_link('Newer <i class="fa fa-angle-right"></i>'); ?></li>
  41. </ul>
  42. <!--//pager -->
  43. </nav>
  44. <!--//nav -->
  45. <?php endif; ?>
  46. <?php comments_template(); ?>
  47. </div>
  48. <!--//col -->
  49. <div class="col-md-3">
  50. <ul class="list-group">
  51. <?php dynamic_sidebar('right_sidebar'); ?>
  52. </ul>
  53. </div>
  54. <!--//col -->
  55. </div>
  56. <!--//row -->

次に、空のcomments.phpを用意して、FTPでアップロードします。
外観-テーマの編集画面から、comments.phpを開いて以下の記述をします。

  1. <div id="comments">
  2. <?php comment_form(); ?>
  3. </div>

とりあえずこれだけでコメントフォーム自体は表示されます。

comments.php

  1. <?php
  2. /**
  3. * Template Name: comments page
  4. *
  5. */
  6. // Do not delete these lines
  7. if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
  8. die ('Please do not load this page directly. Thanks!');
  9. if ( post_password_required() ) { ?>
  10. <p class="nocomments">
  11. <?php _e('This post is password protected. Enter the password to view comments.'); ?>
  12. </p>
  13. <?php
  14. return;
  15. }
  16. ?>
  17. <!-- You can start editing here. -->
  18. <div id="comments" class="panel panel-default">
  19. <?php if ( have_comments() ) : ?>
  20. <div class="panel-heading one">
  21. <?php
  22. if ( 1 == get_comments_number() ) {
  23. /* translators: %s: post title */
  24. printf( __( 'One response to %s' ), '&#8220;' . get_the_title() . '&#8221;' );
  25. } else {
  26. /* translators: 1: number of comments, 2: post title */
  27. printf( _n( '%1$s response to %2$s', '%1$s responses to %2$s', get_comments_number() ),
  28. number_format_i18n( get_comments_number() ), '&#8220;' . get_the_title() . '&#8221;' );
  29. }
  30. ?>
  31. </div>
  32. <!--//panel-heading -->
  33. <div class="panel-body">
  34. <ul class="media-list">
  35. <?php wp_list_comments(); ?>
  36. </ul>
  37. <nav>
  38. <ul class="pager">
  39. <li class="previous">
  40. <?php previous_comments_link() ?>
  41. </li>
  42. <li class="next">
  43. <?php next_comments_link() ?>
  44. </li>
  45. </ul>
  46. </nav>
  47. </div>
  48. <!--//panel-body -->
  49. <?php else : // this is displayed if there are no comments so far ?>
  50. <?php if ( comments_open() ) : ?>
  51. <!-- If comments are open, but there are no comments. -->
  52. <?php else : // comments are closed ?>
  53. <!-- If comments are closed. -->
  54. <div class="panel-body">
  55. <p class="nocomments"><?php _e('Comments are closed.'); ?></p>
  56. </div>
  57. <!--//panel-body -->
  58. <?php endif; ?>
  59. <?php endif; ?>
  60. <?php if ( comments_open() ) : ?>
  61. <div id="respond" class="panel-footer">
  62. <h4>
  63. <?php comment_form_title( __('Leave a Reply'), __('Leave a Reply to %s' ) ); ?>
  64. </h4>
  65. <div id="cancel-comment-reply"><small>
  66. <?php cancel_comment_reply_link() ?>
  67. </small></div>
  68. <?php if ( get_option('comment_registration') && !is_user_logged_in() ) : ?>
  69. <p><?php printf(__('You must be <a href="%s">logged in</a> to post a comment.'), wp_login_url( get_permalink() )); ?></p>
  70. <?php else : ?>
  71. <form action="<?php echo site_url(); ?>/wp-comments-post.php" method="post" id="commentform" class="form-horizontal">
  72. <?php if ( is_user_logged_in() ) : ?>
  73. <p>
  74. <?php /* translators: %s: user profile link */
  75. printf( __( 'Logged in as %s.' ), sprintf( '<a href="%1$s">%2$s</a>', get_edit_user_link(), $user_identity ) ); ?>
  76. <a href="<?php echo wp_logout_url( get_permalink() ); ?>" title="<?php esc_attr_e( 'Log out of this account' ); ?>">
  77. <?php _e( 'Log out &raquo;' ); ?>
  78. </a></p>
  79. <?php else : ?>
  80. <div class="form-group">
  81. <label for="author" class="col-sm-3 control-label"><small>
  82. <?php _e('Name'); ?>
  83. <?php if ($req) _e('(required)'); ?>
  84. </small></label>
  85. <div class="col-sm-9">
  86. <input type="text" class="form-control" name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" tabindex="1" <?php if ($req) echo "aria-required='true'"; ?> />
  87. </div>
  88. </div>
  89. <!--//form-group -->
  90. <div class="form-group">
  91. <label for="email" class="col-sm-3 control-label"><small>
  92. <?php _e('Mail (will not be published)'); ?>
  93. <?php if ($req) _e('(required)'); ?>
  94. </small></label>
  95. <div class="col-sm-9">
  96. <input type="text" class="form-control" name="email" id="email" value="<?php echo esc_attr($comment_author_email); ?>" tabindex="2" <?php if ($req) echo "aria-required='true'"; ?> />
  97. </div>
  98. </div>
  99. <!--//form-group -->
  100. <div class="form-group">
  101. <label for="url" class="col-sm-3 control-label"><small>
  102. <?php _e('Website'); ?>
  103. </small></label>
  104. <div class="col-sm-9">
  105. <input type="text" class="form-control" name="url" id="url" value="<?php echo esc_attr($comment_author_url); ?>" tabindex="3" />
  106. </div>
  107. </div>
  108. <!--//form-group -->
  109. <?php endif; ?>
  110. <div class="form-group">
  111. <label for="comment" class="col-sm-3 control-label"><small>
  112. <?php _e('Comment'); ?>
  113. </small></label>
  114. <div class="col-sm-9">
  115. <textarea class="form-control" name="comment" id="comment" rows="10" tabindex="4"></textarea>
  116. </div>
  117. </div>
  118. <!--//form-group -->
  119. <div class="form-group">
  120. <div class="col-sm-offset-3 col-sm-9">
  121. <input name="submit" class="btn btn-warning" type="submit" id="submit" tabindex="5" value="<?php esc_attr_e('Submit Comment'); ?>" />
  122. </div>
  123. </div>
  124. <!--//form-group -->
  125. <?php comment_id_fields(); ?>
  126. <?php
  127. /** This filter is documented in wp-includes/comment-template.php */
  128. do_action( 'comment_form', $post->ID );
  129. ?>
  130. </form>
  131. <?php endif; // If registration required and not logged in ?>
  132. </div>
  133. <!--//panel-footer -->
  134. <?php endif; // if you delete this the sky will fall on your head ?>
  135. </div>
  136. <!--//panel panel-default -->

コメントがあれば出力します

  1. <?php if(have_comments()): ?><?php endif; ?>

コメントを出力します

  1. <?php wp_list_comments(); ?>

一応、bootstrapになっています。
が、このままでは見た目がオカシイので(笑)ちょっとcssをいじらなければ・・(^_^;)
ということで以下にcssを。

style.css

  1. /*
  2. ---------------------*/
  3. #comments {
  4. color: #222;
  5. }
  6. .panel {
  7. margin-bottom: 20px;
  8. background-color: #fff;
  9. border: none;
  10. border-radius: 0;
  11. box-shadow: none;
  12. }
  13. /*
  14. ---------------------*/
  15. .form-control {
  16. border-radius: 0;
  17. box-shadow: none;
  18. -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
  19. -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
  20. transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
  21. }
  22. .form-control:focus {
  23. border-color: #F90;
  24. outline: 0;
  25. -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(255,204,0,.6);
  26. box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(255,204,0,.6);
  27. }
  28. .btn {
  29. white-space: nowrap;
  30. border: none;
  31. border-radius: 0;
  32. }
  33. /*
  34. ------------------------*/
  35. .media-list .children {
  36. list-style: none;
  37. padding-top: 15px;
  38. border-top: 1px dotted #DDD;
  39. }
  40. .media-list>li {
  41. overflow: hidden;
  42. zoom: 1;
  43. margin-bottom: 20px;
  44. border-bottom: 1px solid #DDD;
  45. }
  46. .media-list li .vcard {
  47. display: table-cell;
  48. vertical-align: top;
  49. padding-right: 20px;
  50. float: left;
  51. }
  52. .media-list li .vcard img {
  53. display: block;
  54. width: 64px;
  55. height: 64px;
  56. border-radius: 4px;
  57. }
  58. .media-list li p {
  59. display: table-cell;
  60. vertical-align: top;
  61. width: 10000px;
  62. overflow: hidden;
  63. zoom: 1;
  64. }
  65. .comment-body {
  66. position: relative;
  67. overflow: hidden;
  68. zoom: 1;
  69. padding-bottom: 15px;
  70. }
  71. .comment-meta {
  72. display: inline-block;
  73. position: absolute;
  74. font-size: 11px;
  75. bottom: 10px;
  76. right: 0;
  77. }
  78. .reply {
  79. display: inline-block;
  80. position: absolute;
  81. font-size: 0.857em;
  82. top: 0;
  83. right: 0;
  84. }
  85. .fn, .says {
  86. font-size: 0.857em;
  87. font-style: normal;
  88. }
  89. .media-list li a:hover,
  90. article .well a:hover {
  91. color: #AAA;
  92. }

ちょっとまだ不十分かな?(^_^;)

オリジナルのtheme(テーマ)を作る18:グローバルメニューを作る

トップページ専用ページを作ってみたものの、現状ではどこのページにも行けないので(^_^;)
グローバルメニューを作ります。

function.php

  1. //カスタムメニュー機能を有効にする
  2. register_nav_menus(array('navigation' => ' NavigationBar '));

カスタムメニューを有効にしておきます。

メニューを複数(日本語でもOKです)

  1. //メニュー有効化
  2. register_nav_menus(array(
  3. 'main-menu' => 'メインメニュー',
  4. 'sub-menu' => 'サブメニュー'
  5. ));

header.php

  1. <header id="header">
  2. <nav class="navbar navbar-inverse">
  3. <div class="container">
  4. <div class="navbar-header">
  5. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#globalmenu" aria-expanded="false">MENU</button>
  6. <h1><a class="navbar-brand" href="<?php echo home_url('/'); ?>"><?php bloginfo('name'); ?></a><small><?php bloginfo('description'); ?></small></h1>
  7. </div>
  8. <!--//navbar-header -->
  9. <div class="collapse navbar-collapse" id="globalmenu">
  10. <?php wp_nav_menu(array('theme_location' => 'navigation')); ?>
  11. </div>
  12. <!-- //collapse navbar-collapse -->
  13. </div>
  14. <!--//container -->
  15. </nav>
  16. <!--//nav -->
  17. </header>
  18. <!--//#header -->

header.phpに書いてあったメニュー部分(ul li)を削除して、下記のテンプレートタグに書き換えます。

  1. <?php wp_nav_menu(array('theme_location' => 'navigation')); ?>

自動的に、ul li タグが書き出されるので、style.cssで見た目を整えましょうー。
bootstrapを使っているのですが、ulとliが勝手に・・となってしまうので
cssの書き換えが面倒だよーという方はこの部分だけbootstrapでなくてもいいんではないかと。

とりあえずここではbootstrapのまま、cssを書き換えました。

  1. /* #globalmenu
  2. ----------------------------*/
  3. #globalmenu {
  4. }
  5. #globalmenu ul {
  6. list-style: none;
  7. margin: 0;
  8. padding: 0;
  9. }
  10. #globalmenu ul>li {
  11. float: left;
  12. position: relative;
  13. display: block;
  14. }
  15. #globalmenu ul>li>a {
  16. color: #AAA;
  17. height: 100px;
  18. border-left: 1px #000 solid;
  19. border-right: 1px #444 solid;
  20. padding: 25px;
  21. position: relative;
  22. display: block;
  23. line-height: 20px;
  24. }
  25. #globalmenu ul>li:first-child {
  26. border-left: 1px #444 solid;
  27. }
  28. #globalmenu ul>li:last-child {
  29. border-right: 1px #000 solid;
  30. }
  31. #globalmenu ul>li>a:focus,
  32. #globalmenu ul>li>a:hover {
  33. background-color: transparent;
  34. }
  35. @media screen and (min-width: 768px) and (max-width: 1199px){
  36. #globalmenu ul>li>a {
  37. height: auto;
  38. padding: 10px 15px;
  39. }
  40. }
  41. @media screen and (max-width: 767px){
  42. #globalmenu ul>li>a {
  43. height: auto;
  44. border-left: none;
  45. border-bottom: 1px solid #AAA;
  46. padding: 10px 15px;
  47. }
  48. #globalmenu ul>li:last-child>a {
  49. border-right: none;
  50. }
  51. #globalmenu ul>li {
  52. -webkit-box-shadow: inset -1px -1px 0px 0px rgba(0,0,0,1);
  53. -moz-box-shadow: inset -1px -1px 0px 0px rgba(0,0,0,1);
  54. box-shadow: inset -1px -1px 0px 0px rgba(0,0,0,1);
  55. }
  56. #globalmenu ul>li>a small {
  57. display: inline-block;
  58. text-align: left;
  59. margin-left: 15px;
  60. }
  61. #globalmenu ul>li>a {
  62. padding: 10px 15px;
  63. }
  64. #globalmenu ul>li:last-child {
  65. border-right: none;
  66. }
  67. #globalmenu ul>li {
  68. float: none;
  69. width: 1%;
  70. display: table-cell;
  71. }
  72. }
  73. @media screen and (min-width: 768px){
  74. #globalmenu ul {
  75. float: right!important;
  76. margin-right: -15px;
  77. }
  78. }

ちなみに、ul liの入れ子になった場合についての考慮はしてません。
※項目を入れ子にしなければいいだけw
項目を入れ子にしたい場合は、bootstrapのtoggleを入れる必要がでてくるので
その場合はbootstrapではなく、cssのみで入れ子のメニューを作るようにするといいかなと思います。

スマホでの見え方も考慮してないので、そのへんは考えなければ。
項目名の下にスラッグ等の英語表記を入れたかったんですが、ちょっと厳しかったなー。
もうちょっと試行錯誤が必要・・。

挿入する項目は、左側の外観-メニューから項目を選んでください。
gmenu
これで、無事、メニューが出来たかと思います(^^)

オリジナルのtheme(テーマ)を作る17:トップページだけレイアウトを変える

ブログのみだとトップページだけ違うレイアウトというのは必要ないかもですが、
色んなページが含まれるwebサイトの場合はトップページだけレイアウトが違ったりしますね。
トップページだけ大きな画像を表示させたり。

ということで、トップページを作ろうー。

front-page.phpトップページのファイルはhome.php、またはfront-page.phpというファイル名、もしくはほかの名前でもOK。
とりあえずここでは、font-page.phpという名前のファイルを空のままFTPでアップロードします。

外観-テーマの編集から、front-page.phpを開きます。
真っ白なままですが、ここにテンプレート名を記述します。

  1. <?php
  2. /*
  3. Template Name: フロントページ
  4. */
  5. ?>

分かりやすい名前であれば何でもいいですが、フロントページと書きました。

次に、page.phpの中身を全部コピーして、front-page.phpに貼り付けます。
※上で記述したテンプレート名の下に貼り付けて更新します。

固定ページ-新規追加画面で、トップページ用のタイトルを書いて更新します。
このタイトルは分かり易ければなんでもいいと思います。
TOPとかHOMEとかのタイトルだと分かりやすいかもですね。
※テンプレートは先ほど付けたテンプレート名を選びます。

設定-表示設定の画面で、フロントページの設定を固定ページにして、プルダウンからページを選択します。
さきほど固定ページに付けたタイトルを選択します。

表示設定

この時点でサイトを表示させると投稿のタイトルが出ているので
これらの要らないものは、外観-テーマの編集画面に行ってfront-page.phpの中からタイトル部分を削除します。

また、トップページに必要なものを追加していきます。

  1. <?php
  2. /*
  3. Template Name: front page
  4. */
  5. ?>
  6. <?php get_header(); ?>
  7. <main id="main" role="main">
  8. <div class="container-fluid">
  9. <div class="custom-header">
  10. <div class="container">
  11. <div class="frontnewsBox">
  12. <ul>
  13. <?php dynamic_sidebar('header_area'); ?>
  14. </ul>
  15. </div>
  16. <!--//frontnewsBox -->
  17. </div>
  18. <!--//container -->
  19. </div>
  20. <!--//custom-header -->
  21. </div>
  22. <!--//container-fluid -->
  23. <div class="container">
  24. <section>
  25. <div class="row">
  26. <div class="col-xs-12">
  27. <div class="contentsBox">
  28. <ul>
  29. <?php dynamic_sidebar('top_area'); ?>
  30. </ul>
  31. </div>
  32. <!--//contentsBox -->
  33. </div>
  34. <!--//col -->
  35. </div>
  36. <!--//row -->
  37. </section>
  38. <!--//section-->
  39. <section>
  40. <div class="row">
  41. <div class="col-sm-3">
  42. <div class="contentsBox">
  43. <ul>
  44. <?php dynamic_sidebar('center_area'); ?>
  45. </ul>
  46. </div>
  47. <!--//contentsBox -->
  48. </div>
  49. <!--//col -->
  50. <div class="col-sm-3">
  51. <div class="contentsBox">
  52. <ul>
  53. <?php dynamic_sidebar('center_area-2'); ?>
  54. </ul>
  55. </div>
  56. <!--//contentsBox -->
  57. </div>
  58. <!--//col -->
  59. <div class="col-sm-3">
  60. <div class="contentsBox">
  61. <ul>
  62. <?php dynamic_sidebar('center_area-3'); ?>
  63. </ul>
  64. </div>
  65. <!--//contentsBox -->
  66. </div>
  67. <!--//col -->
  68. <div class="col-sm-3">
  69. <div class="contentsBox">
  70. <ul>
  71. <?php dynamic_sidebar('center_area-4'); ?>
  72. </ul>
  73. </div>
  74. <!--//contentsBox -->
  75. </div>
  76. <!--//col -->
  77. </div>
  78. <!--//row -->
  79. </section>
  80. <!--//section-->
  81. </div>
  82. <!--//container -->
  83. </main>
  84. <!--//#main -->
  85. <?php get_footer(); ?>

ところどころに、sidebarのウィジェット入りになってます。
このサイトのトップページは複数のテキストウィジェットを配置して表示しています。
基本的には、ウィジェットでphpを使うことはできませんが、phpが使えるようになるプラグインもあるようです。