3カラムのテンプレートに、WordPrsses の記事を表示する部分を実装します
次のような機能を実現します。一部、プラグインを使うところは、後日実装します。
- ヘッダー
- タイトル
- パンくずリスト用のエリア
- 左サイドバー
- カレンダーアーカイブ用のエリア
- 最新記事
- 月間アーカイブ
- 右サイドバー
- プロフィールを書くエリア
- カテゴリ
- 中央
- ブログの記事
- フッター
- Copyright
ブログ記事一覧 index.php
どこから作成しようとかと思いましたが、本丸から攻めます。
index.php
基本的な構造は、こちら(http://ikubo.jp/tech/web-html5-tag/)に書いている構造にしてあります。
別記事で書いている schema.org の metadata を入れてあります。(http://ikubo.jp/tech/web-schema-org/)
<?php get_header(); ?>
<main id="wrap-container" role="main" class="container">
<div class="row">
<div id="sub-col-left" class="col-10 col-md-2 order-3 order-md-0">
<div class="sub-col-inner">
<?php get_sidebar('left'); ?>
</div>
</div> <!-- sub-col -->
<div id="main-col" class=" col-sm-7 col-md-6 order-1">
<div id="main-col-inner">
<?php if( have_posts() ): ?>
<div class="entry-list">
<?php while( have_posts() ): the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class('entry'); ?> itemscope itemtype="http://schema.org/BlogPosting">
<header class="entry-header">
<div class="entry-meta-datetime-updated">
<time itemprop="datePublished" datetime="<?php the_time('Y-m-d'); ?>"> <?php the_time('Y年n月j日 G:i' ); ?></time>
</div>
<a href="<?php the_permalink(); ?>">
<h1 class="entry-title" itemprop="headline"><?php the_title(); ?></h1>
</a>
</header>
<div class="entry-body">
<div class="entry-content" itemprop="articleBody">
<?php the_content(); ?>
</div>
</div>
<footer class="entry-footer">
<div class="entry-meta">
<?php
$term_name='';
$categories = get_the_terms($post->ID,'category');
$separator = ' ';
$output = '';
if ( $categories ) {
foreach( $categories as $category ) {
$output .= $category->name . $separator;
}
$term_name = trim( $output, $separator );
}
?>
<div class="entry-meta-category">
Category: <span itemprop="keywords"><?php echo $term_name;?></span>
</div>
</div>
</footer>
</article>
<?php endwhile; ?>
</div>
<?php else: ?>
<section class="not-found">
<p>ページが見つかりません。</p>
</section>
<?php endif; ?>
</div> <!-- main-col-innner -->
</div> <!-- main-col -->
<div id="sub-col-right" class="col-sm-3 col-md-2 order-2">
<div class="sub-col-inner">
<?php get_sidebar('right'); ?>
</div>
</div> <!-- sub-col -->
</div> <!-- /.row -->
</main>
<?php get_footer(); ?>
- 13行目の while で記事取得のルールを回します。一度にとれる記事の数は、設定–> 表示設定 で設定した数が上限です。
- 19行目で、個別記事のリンクを作成しています。
- 20行目で、タイトルを表示
- 25行目で、記事本文を表示。ここは the_content() の代わりに the_excerpt() を使うと要約を出力できます。記事を複数ページで表示するような設定を使う場合、もう少し記述が必要です。当面はこれでいきます。
header.php
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php wp_head(); ?>
<link rel="stylesheet" href="<?php echo esc_url( get_template_directory_uri() ).'/css/app.css?ver=0.1.1'; ?>">
</head>
<body <?php body_class(); ?>>
<div id="wrapper">
<header id="header" class="header">
<!-- デバッグ用の領域 -->
<div id="debugHeader" style="display:block;">
</div>
<!-- タイトル部分。後からカスタム投稿タイプ移動用のアイコンを置く予定 -->
<div id="headerBlock1">
<div class="container">
<div class="row">
<div class="blog-name col-10 col-sm-5">
<h2>Project Artemis</h2>
</div>
</div>
</div>
</div>
<!-- パンくずリスト用の領域 -->
<div id="headerBlock2">
<div class="container">
<div class="row">
<div class="col-10 col-md-2"> <!-- main-col の位置にパンくずリストを配置するための位置調整 -->
</div>
<div class="col-10 col-md-6">
<div class="breadcrumbs">
<ul><li>Home > Blog</li></ul> <!-- とりあえず、固定文字列 -->
</div>
</div>
</div>
</div>
</div>
</header>
コメントで書いている通りです。パンくずリストの表示位置を調整するためにBoostrap の grid を追加してあります。
sidebar-left.php
<div id="sidebar-left" class="sidebar">
<div class="side-contents">
<h2>カレンダー</h2>
<div class="side-menu-text">
<p>設置予定</p>
</div>
</div>
<div class="side-contents">
<h2>最新記事</h2>
<div class="side-menu-text">
<ul>
<?php wp_get_archives(array( 'type' => 'postbypost', 'limit' => 12)); ?>
</ul>
</div>
</div>
<div class="side-contents">
<h2>月別アーカイブ</h2>
<div class="side-menu-text">
<ul>
<?php wp_get_archives(array('show_post_count'=>true)); ?>
</ul>
</div>
</div>
</div>
sidebar-right.php
<div id="sidebar-right" class="sidebar">
<div class="side-contents">
<h2>Profile</h2>
<div class="side-menu-text">
<p>設置予定</p>
</div>
</div>
<div id="term_list" class="side-contents">
<h2>カテゴリ</h2>
<div class="side-menu-text">
<ul>
<?php
$term_type ='category';
$terms = get_terms($term_type);
foreach ($terms as $term) {
echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
}
?>
</ul>
</div>
</div>
</div>
css/app.css
@charset 'UTF-8';
/* サイト スタイル */
body {
background: #fff;
color: #333;
font-family: Meiryo, 'Lucida Grande', 'Hiragino Kaku Gothic ProN', sans-serif;
font-size: 16px;
-webkit-text-size-adjust: 100%;
}
p {
margin-bottom: 8px;
}
a {
color: #0056B3;
}
.sidebar {
background: #fff;
}
/*
*
*/
#wrap-container, #headerBlock1 .container, #headerBlock2 .container {
max-width: 980px;
}
#main-col, #sub-col-left, #sub-col-right {
padding: 0px;
margin: 0;
}
.sub-col-inner {
border: 1px solid #aaa;
margin-bottom: 20px;
}
/* 768(md) 以上で左メニューを左に出す */
@media (min-width: 768px) {
#sub-col-left {
padding-left: 10px;
}
}
/* 576(sm) 以上で右メニューを右に出す */
@media (min-width: 576px) {
#sub-col-right {
padding-right: 10px;
}
}
#header ul {
list-style-type:none;
padding: 10px;
}
#header li {
padding: 0 5px;
}
#footer {
background: #343a40;
padding-top: 10px;
font-size: 12px;
color: #aaa;
height: 60px;
text-align: center;
}
img {
border: 1px solid #ccc;
}
#headerBlock1 {
color: #fff;
background: #343a40;
}
#headerBlock1 .blog-name {
padding: 8px 10px 10px 16px;
line-height: 1.2;
font-weight: bold;
}
#headerBlock2 {
background: #fff;
margin-bottom: 10px;
border-bottom: 1px solid #aaa;
}
#header ul {
margin: 0;
padding: 0;
/* display: flex; */
list-style-type:none;
}
.side-contents h2 {
color: #fff;
background: #343a40;
margin: 0;
padding: 5px;
font-size: 14px;
}
.side-contents p {
color: #666;
padding: 10px;
font-size: 14px;
}
.side-contents ul {
margin: 0;
padding: 0;
list-style-type: none;
}
.side-contents ul li {
margin-left: 12px;
padding: 0;
font-size: 14px;
}
/*
* 記事
*/
.entry {
margin: 0 10px 10px;
padding: 5px 20px 10px;
background: #fff;
border: 1px solid #aaa;
-webkit-border-radius:10px;
}
/* 更新日時 */
.entry .entry-meta-datetime-updated {
text-align: right;
font-size: 12px;
color: #aaa;
}
.entry .entry-meta-datetime {
text-align: right;
font-size: 12px;
color: #aaa;
}
.entry .entry-meta {
margin-top: 10px;
font-size: 12px;
color: #aaa;
}
詳細はあとで追記予定