無料で使えるオンライン画像編集ツール!Photopeaの使い方をご紹介
用意するもの
それでは次に「sidebar.php」と「search.php」を作成していきましょう。サイドバーには「検索ボックス」「カテゴリーリンク」「管理人情報」の3点だけを表示しています。
検索ボックスを設置する場合、検索結果を表示するページが必要になりますので、そのために「search.php」を作成します。検索ボックスは記事数が多いサイトにはとても便利な機能です。
こちらの「デモサイト」から実際のページを確認して頂けます。
「sidebar.php」に表示している内容は「検索ボックス」「カテゴリーリンク」「管理人情報」だけのシンプルな形です。ソースコードも短いので中身を確認してみてください。
sidebar.php
- <aside id="sideWrap">
- <div id="sideBox">
- <div class="searchBox">
- <form method="get" action="<?php echo home_url('/'); ?>">
- <input type="text" name="s" class="search" placeholder="検索キーワード">
- <input type="submit" class="btn" value="検索する">
- </form>
- </div>
- <div class="sideNav">
- <nav>
- <ul>
- <?php
- $args = array(
- 'parent' => 0,
- 'orderby' => 'term_order',
- 'order' => 'ASC'
- );
- $categories = get_categories( $args );
- ?>
- <?php foreach( $categories as $category ) : ?>
- <li><a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->name; ?></a></li>
- <?php endforeach; ?>
- </ul>
- </nav>
- </div>
- <?php dynamic_sidebar('sidebar-item'); ?>
- </div>
- </aside>
それでは「sidebar.php」のコードもコピペしておきましょう。簡単なところから説明すると、「sideNav」というクラス名の中身が各カテゴリーページへのリンクメニュー部分です。
- <?php
- $args = array(
- 'parent' => 0,
- 'orderby' => 'term_order',
- 'order' => 'ASC'
- );
- $categories = get_categories($args);
- ?>
- <?php foreach($categories as $category) : ?>
- <li><a href="<?php echo get_category_link($category->term_id); ?>"><?php echo $category->name; ?></a></li>
- <?php endforeach; ?>
この記述は見覚えがありますよね。そうです、「header.php」に記述したドロワー(三本線)メニューの記述とまったく同じです。このコードでカテゴリーページのURLとカテゴリー名を出力しています
- <div class="searchBox">
- <form method="get" action="<?php echo home_url('/'); ?>">
- <input type="text" name="s" class="search" placeholder="検索キーワード">
- <input type="submit" class="btn" value="検索する">
- </form>
- </div>
そして検索ボックスを作るのも難しくないです。たったこれだけのコードで検索ボックスは作れてしまいます。重要なのは「form」タグと「type=”text”」の「input」タグの記述です。
「form」タグの「method」属性に「get」、「action」属性に「<?php echo home_url(‘/’); ?>」、そして「input」タグの「name」属性には「s」と記述します。
- <?php dynamic_sidebar('sidebar-item'); ?>
こちらのコードでウィジェットが出力されます。ウィジェットは管理画面で設定する事が可能です。サンプルブログはできるだけファイルを編集しなくても良いように作りましたので、あえてウィジェットを利用しています。
「sidebar.php」を作りましたので、サイドバーのデザインも「style.css」に追加しておきましょう。前回までに記述したコードの下へ追加しておいてください。
style.css
- ~テーマ情報省略~
- ~共通デザイン省略~
- ~main・パンくず・mainContents省略~
- ~ヘッダー・フッター省略~
- /* ------ aside ------ */
- .mainInner aside {
- width: 26%;
- max-width: 300px;
- vertical-align: top;
- padding-bottom: 60px;
- display: inline-block
- }
- .mainInner aside #sideBox {
- width: 100%;
- max-width: 300px
- }
- /* serach box */
- .mainInner aside .searchBox .formBox { font-size: 0 }
- .mainInner aside .searchBox input[type="text"] {
- width: calc(100% - 80px);
- height: 36px;
- font-size: 1.4rem;
- font-family: "Kiwi Maru", "Yu Gothic", "YuGothic", "Hiragino Kaku Gothic Pro", "Meiryo UI", "Meiryo", "MS PGothic", sans-serif;
- line-height: 36px;
- vertical-align: top;
- padding: 0 10px;
- border: 1px solid #c1c1c1;
- border-right: none;
- display: inline-block
- }
- .mainInner aside .searchBox input[type="text"]:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px white inset }
- .mainInner aside .searchBox input[type="submit"] {
- width: 80px;
- height: 36px;
- color: #fff;
- font-size: 1.3rem;
- font-family: "Kiwi Maru", "Yu Gothic", "YuGothic", "Hiragino Kaku Gothic Pro", "Meiryo UI", "Meiryo", "MS PGothic", sans-serif;
- line-height: 36px;
- vertical-align: top;
- border: none;
- background: #ff657c;
- display: inline-block
- }
- /* side nav */
- .mainInner aside .sideNav { margin-top: 40px }
- .mainInner aside nav ul {
- padding: 0 10px;
- background: #fff
- }
- .mainInner aside nav li {
- font-size: 1.6rem;
- line-height: 50px;
- position: relative
- }
- .mainInner aside nav li + li { border-top: 1px dashed #c1c1c1 }
- .mainInner aside nav li {
- font-size: 1.5rem;
- position: relative
- }
- .mainInner aside nav a {
- position: relative;
- display: block
- }
- .mainInner aside nav li a { padding: 0 10px }
- .mainInner aside nav a::after {
- content: "";
- width: 100%;
- height: 2px;
- margin: auto;
- background: #fff;
- position: absolute;
- right: 0;
- bottom: 0;
- left: 0;
- transform: scale(0, 1);
- transform-origin: center top;
- transition: transform .3s
- }
- @media screen and (max-width: 900px) {
- .mainInner aside {
- width: 100%;
- max-width: inherit;
- padding-bottom: 40px;
- display: block
- }
- .mainInner aside #sideBox { max-width: inherit }
- }
- /* author */
- .mainInner aside .author {
- padding: 20px;
- margin-top: 40px;
- background: #fff
- }
- .mainInner aside .author .authorTop {
- font-size: 0;
- text-align: center;
- padding-bottom: 20px;
- border-bottom: 1px dashed #c1c1c1
- }
- .mainInner aside .author .imageWrap {
- width: 60px;
- vertical-align: middle;
- margin-right: 30px;
- display: inline-block
- }
- .mainInner aside .author .imageWrap img { width: 100% }
- .mainInner aside .author .nameWrap {
- vertical-align: middle;
- display: inline-block
- }
- .mainInner aside .author .nameWrap p { font-size: 2rem }
- .mainInner aside .author .nameWrap p span {
- font-size: 1.2rem;
- display: block
- }
- .mainInner aside .author .txtWrap {
- text-align: center;
- font-size: 1.6rem;
- margin-top: 20px;
- background: #fff;
- position: relative
- }
- .mainInner aside .author .txtWrap::before {
- content: "";
- margin-left: -11px;
- border: 12px solid transparent;
- border-bottom: 12px solid #fff;
- position: absolute;
- top: -24px;
- left: 50%;
- z-index: 2
- }
- .mainInner aside .author .txtWrap a {
- color: #ff657c;
- text-decoration: underline
- }
ココのデザインに関しては特に問題ないですが、サイドバーに関してひとつお伝えしておくと、サンプルブログではページを下へスクロールしていくとサイドバーが付いてくるように設定しています。
この動きはチェピレアでも実装しているのでパソコンでご覧の方は確認してみてください。
通常であればスクロールするとサイドバーは上部に取り残され、長いページの場合はサイドバーのスペースが空白になってしまいます。ココを空白にするのは淋しいし勿体ない。
なのでサンプルブログではどんなに長いページでもサイドバーが表示されるようにしているというワケです。設定自体はJSファイルでおこなっていますので、後の「main.jsを作成する」で紹介させて頂きます。
準備が整いましたので管理画面のウィジェットを利用して「管理人情報」を作成していきましょう。その際にご自身の写真やイラストなどがあれば、印象アップの効果があります。
ちなみに僕は「chappie」というアプリでプロフィール画像を作っています。こちらは「App Store」しか取り扱っていないようですが良ければチェックしてみてください。
サンプルブログのアイコンサイズは「横幅60px × 高さ60px」で表示しています。アイコンの形は正方形でも円形でもどちらでも構いません。
それでは管理画面でテーマの切り替えをおこないます。「外観」→「テーマ」と進んで、作成したテーマにマウスを重ねると現れる「有効化」をクリックします。
まだテーマフォルダをアップロードしていない方は、FTPソフトを使ってルートディレクトリにある「wp-content」の中の「themes」の中にテーマフォルダを設置しておいてください。
次にプロフィール画像をアップロードします。「メディア」→「ライブラリ」と進んで、「新規追加」から画像をアップロードします。画像をアップロードすると「ファイルのURL」も表示されますのでメモっておいてください。
最後に管理人情報を設定していきます。「外観」→「ウィジェット」と進んで、「サイドバー」内にあるブロックを開いて、下記のコードを記述して「保存」をクリックします。
- <div class="authorTop">
- <div class="imageWrap">
- <img src="https://chepirare.com/sample/02/wp-content/uploads/2022/02/user.png" alt="竹馬" title="竹馬">
- </div>
- <div class="nameWrap">
- <p>竹馬<br><span>サイト管理人</span></p>
- </div>
- </div>
- <div class="txtWrap">
- <p>こちらは<a href="https://chepirare.com/">チェピレア</a>が制作したサンプルのブログサイトです。ワードプレスの設置からサイトの作り方までを解説しています。ご自身のブログサイトを持ちたいとお考えの方はぜひ参考になさってください。</p>
- </div>
このままだとサンプルブログの情報なので、「プロフィール画像のURL」「名前」「紹介文」はご自身のものに書き換えてください。プロフィール画像のURLは先ほどメモったURLです。
ウィジェットの「サイドバー」の中は記述したブロックひとつだけでOKです。デフォルトではいくつかのブロックが用意されていると思いますので、他のブロックは削除しておいてください。
続いて「search.php」を作成していきますので、下記のコードをコピペしておいてください。検索結果を表示する際には、いくつかの条件分岐を設定する必要があります。
search.php
- <?php get_header(); ?>
- <main>
- <div class="breadcrumbWrap">
- <ol itemscope="" itemtype="https://schema.org/BreadcrumbList">
- <li itemscope="" itemtype="https://schema.org/ListItem" itemprop="itemListElement">
- <a itemprop="item" href="<?php echo esc_url(get_home_url()); ?>">
- <img src="<?php bloginfo('template_url'); ?>/img/icon_home.svg" alt="">
- <span itemprop="name">ホーム</span>
- </a>
- <meta itemprop="position" content="1">
- </li>
- <li itemscope="" itemtype="https://schema.org/ListItem" itemprop="itemListElement">
- <span itemprop="name">「<?php the_search_query(); ?>」の検索結果</span>
- <meta itemprop="position" content="2">
- </li>
- </ol>
- </div>
- <div class="mainInner">
- <div id="mainContents" class="mainContents">
- <section id="category">
- <div class="title">
- <h1>「<?php the_search_query(); ?>」の検索結果</h1>
- </div>
- <div class="inner">
- <div class="postWrap">
- <?php if (empty(get_search_query())): ?>
- <div class="notFoundWrap">
- <p>検索キーワードが未入力です。<br>もう一度検索して頂くかサイトマップからご確認ください。</p>
- <div class="btn">
- <a href="<?php echo esc_url(get_home_url()); ?>/sitemap/">サイトマップ</a>
- </div>
- </div>
- <?php else : ?>
- <?php if ( have_posts() ) : ?>
- <?php while ( have_posts() ) : the_post(); ?>
- <article>
- <a href="<?php the_permalink(); ?>">
- <figure class="thumbnail">
- <?php if(has_post_thumbnail()) { echo the_post_thumbnail(); } ?>
- </figure>
- <div class="txt">
- <h2 itemprop="headline"><?php echo get_the_title(); ?></h2>
- </div>
- </a>
- </article>
- <?php endwhile; ?>
- <?php else : ?>
- <div class="notFoundWrap">
- <p>「<?php the_search_query(); ?>」を含む記事が見つかりませんでした。<br>別のキーワードで検索して頂くかサイトマップからご確認ください。</p>
- <div class="btn">
- <a href="<?php echo esc_url(get_home_url()); ?>/sitemap/">サイトマップ</a>
- </div>
- </div>
- <?php endif; ?>
- <?php endif; ?>
- </div>
- <div class="paginationWrap">
- <?php wp_pagination(); ?>
- </div>
- </div>
- </section>
- <div class="recommend">
- <div class="title">
- <h2>その他の記事</h2>
- </div>
- <div class="postWrap">
- <?php
- $args = array(
- 'post_type' => 'post',
- 'posts_per_page' => 6,
- 'orderby' => 'rand'
- );
- $the_query = new WP_Query($args);
- while ($the_query->have_posts()) : $the_query->the_post();
- ?>
- <article>
- <a href="<?php the_permalink(); ?>">
- <figure class="thumbnail">
- <?php if(has_post_thumbnail()) { echo the_post_thumbnail(); } ?>
- </figure>
- <div class="txt">
- <h3 itemprop="headline"><?php echo get_the_title(); ?></h3>
- <div class="cattegory">
- <p><?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; } ?></p>
- </div>
- </div>
- </a>
- </article>
- <?php endwhile; ?>
- </div>
- </div>
- </div>
- <?php get_sidebar(); ?>
- </div>
- </main>
- <?php get_footer(); ?>
「search.php」の中身は大きく分けて「パンくずリスト」「検索結果」「その他の記事」です。ココでは「検索結果」の表示を解説して、「その他の記事」に関しては後の「archive.phpを作成する」でご紹介させて頂きます。
条件分岐の記述には「if文」を使用します。if文とは「もし~なら●●をする、~でなければ○○をする。」という指示を加えた設定です。検索結果の設定にはこの「if文」の中にさらに「if文」を入れていきます。
- <?php if (empty(get_search_query())): ?>
- ・
- // 検索ワードが未入力の場合
- ・
- <?php else : ?>
- ・
- // 検索ワードが入力されている場合
- ・
- <?php if ( have_posts() ) : ?>
- ・
- // 検索ワードに該当する記事がある場合
- ・
- <?php else : ?>
- ・
- // 検索ワードに該当する記事がない場合
- ・
- <?php endif; ?>
- <?php endif; ?>
上記は検索結果で設定されているPHPの「if文」のみを取り出したコードです。これだけで見てもらうと「if文」の中に「if文」がある(入れ子)状態というのがわかってもらえるかと思います。
「<?php if (empty(get_search_query())): ?>」の意味は「検索ワードが未入力の場合」です。「<?php else : ?>」は「それ以外」という意味なので、今回で言うと「検索ワードが入力されている場合」となります。
さらに「検索ワードが入力されている場合」には、「該当する記事がある場合」と「該当する記事がない場合」という条件も追加しています。「if文」の終わりには「<?php endif; ?>」の記述も必要なので注意してください。
- <h1>「<?php the_search_query(); ?>」の検索結果</h1>
あとタイトルなどにも使用している「<?php the_search_query(); ?>」を記述すると、検索ボックスで記入された文字列を出力する事ができます。
「search.php」の検索結果のデザインを「style.css」に追加します。それと「index.php」の作成時に省略したループ部分のデザインも記載しますのでご確認ください。
style.css
- ~テーマ情報省略~
- ~共通デザイン省略~
- ~main・パンくず・mainContents省略~
- ~ヘッダー・フッター省略~
- ~サイドバーデザイン省略~
- * ------ category ------ */
- #category .title h1,
- #category .title h2 {
- font-size: 2.4rem;
- font-weight: 300;
- padding-bottom: 10px;
- border-bottom: 1px dashed #c1c1c1;
- position: relative
- }
- #category .inner { margin-top: 40px }
- #category article {
- width: 100%;
- max-width: 50%;
- vertical-align: top;
- padding: 40px 15px 0;
- display: inline-block
- }
- #category article:first-child,
- #category article:nth-child(2) {
- padding: 0 15px
- }
- #category article a { display: block }
- #category article figure img { transition: all 0.3s ease-in-out }
- #category article a:hover figure img { opacity: 0.7 }
- #category article .txt {
- padding: 10px 20px 20px;
- background: #fff
- }
- #category article h2 {
- font-size: 1.6rem;
- font-weight: 300;
- text-align: left
- }
- #category article .cattegory p {
- font-size: 1.3rem;
- text-align: left;
- margin-top: 6px
- }
- @media screen and (max-width: 768px) {
- #category .title h1 { font-size: 2rem }
- #category .inner {
- padding: 20px 10px;
- margin-top: 20px;
- background: #fff
- }
- #category article {
- max-width: 100%;
- display: block
- }
- #category article:first-child { padding: 0 }
- #category article:nth-child(2) { padding: 20px 0 0 }
- #category article + article {
- padding: 20px 0 0;
- margin-top: 20px;
- border-top: 1px dashed #c1c1c1
- }
- #category article a { font-size: 0 }
- #category article figure {
- width: 100px;
- vertical-align: top;
- margin-right: 10px;
- display: inline-block
- }
- #category article .txt {
- width: calc(100% - 110px);
- vertical-align: top;
- padding: 0 10px;
- display: inline-block
- }
- }
- /* pagenation */
- #category .paginationWrap { text-align: center }
- #category .paginationWrap .pagination { margin: 40px auto 0 }
- #category .paginationWrap .pagination li {
- position: relative;
- display: inline-block
- }
- #category .paginationWrap .pagination li + li::before {
- content: "";
- width: 1px;
- height: 50px;
- border-left: 1px solid #c1c1c1;
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1
- }
- #category .paginationWrap .pagination li a,
- #category .paginationWrap .pagination li span {
- min-width: 50px;
- height: 50px;
- font-size: 1.5rem;
- line-height: 50px;
- padding: 0 20px;
- background: #dcdcdc;
- transition: 0.3s;
- float: left;
- position: relative
- }
- #category .paginationWrap .pagination li .next,
- #category .paginationWrap .pagination li .prev {
- font-size: 2rem
- }
- #category .paginationWrap .pagination li .next { border-radius: 0 25px 25px 0 }
- #category .paginationWrap .pagination li .prev { border-radius: 25px 0 0 25px }
- #category .paginationWrap .pagination li a:hover {
- color: #fff;
- background: #ff657c
- }
- #category .paginationWrap .pagination li .current {
- color: #fff;
- background: #ff657c;
- cursor: default
- }
- @media screen and (max-width: 768px) {
- #category .paginationWrap .pagination li + li::before { height: 40px }
- #category .paginationWrap .pagination li a,
- #category .paginationWrap .pagination li span {
- min-width: 40px;
- height: 40px;
- line-height: 40px;
- padding: 0 15px;
- }
- #category .paginationWrap .pagination li .next { border-radius: 0 20px 20px 0 }
- #category .paginationWrap .pagination li .prev { border-radius: 20px 0 0 20px }
- }
- /* ------ search ------ */
- #category .inner .notFoundWrap {
- text-align: center;
- padding: 20px;
- background: #fff
- }
- #category .inner .notFoundWrap p { font-size: 1.7rem }
- #category .inner .notFoundWrap .btn {
- text-align: center;
- margin-top: 30px
- }
- #category .inner .notFoundWrap .btn a {
- width: 100%;
- max-width: 300px;
- color: #fff;
- font-size: 1.6rem;
- line-height: 50px;
- margin: 0 auto;
- background: #ff657c;
- display: block
- }
- #category .inner .notFoundWrap .btn a:hover { opacity: 0.7 }
少し長いですけどじっくり見てもらえれば難しい事もやってないので問題ないハズです。それではこちらもコピペしてもらって、これまでのファイルを確認しておきましょう。
結構ファイルも揃ってきましたね。次は「page.php」と「404.php」を作成していきます。「404」というのは存在しないページにアクセスした時に表示される「エラーページ」の事です。
消防設備士
HTML
危険物取扱者
サーバー・ドメイン
JavaScript/jQuery
CSS
JavaScript/jQuery
JavaScript/jQuery
資格・試験
ホームページの簡単な作り方以外にも
お得な情報や日常を紹介するブログも是非どうぞ!Webに関連するレンタルサーバーなどの特徴・料金比較や、
個人的に挑戦している資格取得についての勉強法やグルメなどを紹介しています。