最小構成でwordpressのテーマを作成します。
条件および方針
0. wordpressをサーバーに設置済とする。
1. トップページ(index.html)、投稿ページ(single.html)、固定ページ(page.html)、アーカイブページ(archive.html)を作成する
2. wordpressのthemesディレクトリに作成したファイルをいれる
3. 作成したファイルの書き換え、ファイルの追加 ← 本記事はここまでやります
4. 記事詳細ページの作成(single.php)
5. 固定ページの作成(page.php)
6. アーカイブの作成(archive.php)
7. その他の設定とまとめ
1. トップページ(index.html)、投稿ページ(single.html)、固定ページ(page.html)、アーカイブページ(archive.html)を作成する
〇ディレクトリ構成
original
|______inde.html
|______single.html
|______page.html
|______archive.html
|
|______css
| |______index.css
| |______common.css
| |______normalize.css
| |______sanitize.css
| |______page.css
| |______single.css
| |______archive.css
|
|______js
| |______jquery-2.0.0.min.js
| |______common.js
|
|______images
|______main.png
htmlファイルを作成しますがほとんど一緒です。読み込むcssとテキストの一部が違うくらいです。
〇index.html(デモはこち)
<!DOCTYPE html>
<html lang="ja">
<head>
<title>wordpressテーマ自作</title>
<meta name="description" content="ディスクリプションだよ">
<meta name="keywords" content="キーワード1, キーワード2">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/sanitize.css">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/common.css">
<link rel="stylesheet" href="css/index.css">
</head>
<body>
<header>
<div class="headerWrap">
<div class="centerBox">
<p>ここからheader</p>
<h1>wordpress自作テーマ概略</h1>
<div class="menuBtn">
<span></span>
<span></span>
<span></span>
</div>
<nav class="headerMenu">
<ul>
<li>
<a href="">トップページ</a>
</li>
<li>
<a href="">記事一覧へのリンク</a>
</li>
<li>
<a href="">固定ページへのリンク</a>
</li>
</ul>
</nav>
<p>ここまでheader</p>
</div>
</div>
</header>
<main>
<div class="mainWrap">
<div class="centerBox">
<p>ここからmain</p>
<div class="rowWrap">
<div class="contentWrap">
<p class="text">トップページ</p>
<div class="imgItem">
<img src="images/main.png">
</div>
<ul>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
</ul>
</div>
<div class="sideBar">
<p>サイドバーを書く</p>
</div>
</div>
<p>ここまでmain</p>
</div>
</div>
</main>
<footer>
<div class="footerWrap">
<div class="centerBox">
<p>ここからfooter</p>
<p>ここまでfooter</p>
</div>
</div>
<script src="js/jquery-2.0.0.min.js"></script>
<script src="js/common.js"></script>
<script src="js/index.js"></script>
</footer>
</body>
</html>
〇single.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>wordpressテーマ自作</title>
<meta name="description" content="ディスクリプションだよ">
<meta name="keywords" content="キーワード1, キーワード2">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/sanitize.css">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/common.css">
<link rel="stylesheet" href="css/single.css">
<body>
<header>
<div class="headerWrap">
<div class="centerBox">
<p>ここからheader</p>
<h1>wordpress自作テーマ概略</h1>
<div class="menuBtn">
<span></span>
<span></span>
<span></span>
</div>
<nav class="headerMenu">
<ul>
<li>
<a href="">トップページ</a>
</li>
<li>
<a href="">記事一覧へのリンク</a>
</li>
<li>
<a href="">固定ページへのリンク</a>
</li>
</ul>
</nav>
<p>ここまでheader</p>
</div>
</div>
</header>
<main>
<div class="mainWrap">
<div class="centerBox">
<p>ここからmain</p>
<div class="rowWrap">
<div class="contentWrap">
<p class="text">記事ページのテンプレート</p>
</div>
<div class="sideBar">
<p>サイドバーを書く</p>
</div>
</div>
<p>ここまでmain</p>
</div>
</div>
</main>
<footer>
<div class="footerWrap">
<div class="centerBox">
<p>ここからfooter</p>
<p>ここまでfooter</p>
</div>
</div>
<script src="js/jquery-2.0.0.min.js"></script>
<script src="js/common.js"></script>
<script src="js/index.js"></script>
</footer>
</body>
</html>
〇page.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>wordpressテーマ自作</title>
<meta name="description" content="ディスクリプションだよ">
<meta name="keywords" content="キーワード1, キーワード2">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/sanitize.css">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/common.css">
<link rel="stylesheet" href="css/page.css">
</head>
<body>
<header>
<div class="headerWrap">
<div class="centerBox">
<p>ここからheader</p>
<h1>wordpress自作テーマ概略</h1>
<div class="menuBtn">
<span></span>
<span></span>
<span></span>
</div>
<nav class="headerMenu">
<ul>
<li>
<a href="">トップページ</a>
</li>
<li>
<a href="">記事一覧へのリンク</a>
</li>
<li>
<a href="">固定ページへのリンク</a>
</li>
</ul>
</nav>
<p>ここまでheader</p>
</div>
</div>
</header>
<main>
<div class="mainWrap">
<div class="centerBox">
<p>ここからmain</p>
<div class="rowWrap">
<div class="contentWrap">
<p class="text">固定ページのテンプレート</p>
</div>
<div class="sideBar">
<p>サイドバーを書く</p>
</div>
</div>
<p>ここまでmain</p>
</div>
</div>
</main>
<footer>
<div class="footerWrap">
<div class="centerBox">
<p>ここからfooter</p>
<p>ここまでfooter</p>
</div>
</div>
<script src="js/jquery-2.0.0.min.js"></script>
<script src="js/common.js"></script>
<script src="js/index.js"></script>
</footer>
</body>
</html>
〇archive.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>wordpressテーマ自作</title>
<meta name="description" content="ディスクリプションだよ">
<meta name="keywords" content="キーワード1, キーワード2">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/sanitize.css">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/common.css">
<link rel="stylesheet" href="css/archive.css">
</head>
<body>
<header>
<div class="headerWrap">
<div class="centerBox">
<p>ここからheader</p>
<h1>wordpress自作テーマ概略</h1>
<div class="menuBtn">
<span></span>
<span></span>
<span></span>
</div>
<nav class="headerMenu">
<ul>
<li>
<a href="">トップページ</a>
</li>
<li>
<a href="">記事一覧へのリンク</a>
</li>
<li>
<a href="">固定ページへのリンク</a>
</li>
</ul>
</nav>
<p>ここまでheader</p>
</div>
</div>
</header>
<main>
<div class="mainWrap">
<div class="centerBox">
<p>ここからmain</p>
<div class="rowWrap">
<div class="contentWrap">
<p class="text">アーカイブページ</p>
<ul>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
</ul>
</div>
<div class="sideBar">
<p>サイドバーを書く</p>
</div>
</div>
<p>ここまでmain</p>
</div>
</div>
</main>
<footer>
<div class="footerWrap">
<div class="centerBox">
<p>ここからfooter</p>
<p>ここまでfooter</p>
</div>
</div>
<script src="js/jquery-2.0.0.min.js"></script>
<script src="js/common.js"></script>
<script src="js/index.js"></script>
</footer>
</body>
</html>
〇common.css
* {
margin: 0;
}
h1, h2, h3, h4, h5, h6 {
margin: 0;
}
ul {
list-style: none;
}
/*
header
*/
.centerBox {
padding: 0 15px;
margin: 0 auto;
}
.headerWrap {
background-color: #e2f5f7;
padding: 50px 0;
max-width: 960px;
margin: 0 auto;
}
.menuBtn {
width: 50px;
height: 50px;
background: #fff;
position: relative;
margin: 0 0 10px;
}
.menuBtn span {
position: absolute;
height: 2px;
width: 25px;
background-color: #444;
transition: .3s;
}
.menuBtn span:nth-of-type(1) {
transform: translate(-50%,-50%);
top: calc(50% - 8px);
left: 50%;
}
.menuBtn span:nth-of-type(2) {
transform: translate(-50%,-50%);
top: 50%;
left: 50%;
}
.menuBtn span:nth-of-type(3) {
transform: translate(-50%,-50%);
top: calc(50% + 8px);
left: 50%;
}
.menuBtn.menuBtnOn span:nth-of-type(1) {
transform: translate(-50%,-50%) rotate(405deg);
top: 50%;
left: 50%;
}
.menuBtn.menuBtnOn span:nth-of-type(2) {
opacity: 0;
}
.menuBtn.menuBtnOn span:nth-of-type(3) {
transform: translate(-50%,-50%) rotate(-405deg);
top: 50%;
left: 50%;
}
.headerMenu {
display: none;
margin: 0 0 10px;
}
.headerMenu ul {
margin: 0;
}
.headerMenu li:not(:last-of-type) {
margin: 0 0 10px;
}
/*
main
*/
.mainWrap {
background-color: #ececec;
padding: 50px 0;
max-width: 960px;
margin: 0 auto;
}
.rowWrap {
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-wrap: wrap;
}
@media print, screen and (min-width: 768px){
}
.contentWrap {
width: 100%;
background-color: #f1aeae;
padding: 20px 10px;
margin: 0 0 30px;
}
@media print, screen and (min-width: 768px){
.contentWrap {
width: calc(100% - 220px);
margin: 0;
}
}
.sideBar {
width: 100%;
background-color: #c9e2ff;
padding: 20px 10px;
}
@media print, screen and (min-width: 768px){
.sideBar {
max-width: 200px;
width: 100%;
}
}
/*
footer
*/
.footerWrap {
background-color: #edcaf9;
padding: 50px 0;
max-width: 960px;
margin: 0 auto;
}
〇common.js
$(function(){
$('.menuBtn').on('click', function() {//スマートフォンメニューの開閉
$(this).toggleClass('menuBtnOn');
$('nav').slideToggle('');
});
});
〇index.cssなどは、各自で書いてもらえばOK(今回は読み込みの確認にのみ使用しています。)
/* index.css */
2. サーバーに設置されているwordpressのthemesディレクトリに作成したファイルをいれる
〇wordpressにファイルを入れた直後のディレクトリ構成
themes
|
|______original
|______inde.html
|______single.html
|______page.html
|______archive.html
|
|______css
| |______index.css
| |______common.css
| |______normalize.css
| |______sanitize.css
| |______page.css
| |______single.css
| |______archive.css
|
|______js
| |______jquery-2.0.0.min.js
| |______common.js
|
|______images
|______main.png
3. 作成したファイルの書き換え、ファイルの追加
3-1. style.cssの追加
・作成したテーマファイルの認識
wordpressにテーマを認識させるために、oiriginalディレクトリにstyle.cssを追加します。
○style.css
/* theme Name: original */
3-2. index.phpの作成
・作成したテーマファイルの認識
wordpressにテーマを認識させるために、index.htmlの拡張子を変更しindex.phpとする。
3-3. テーマの有効化とパスの修正
・wordpress上からテーマを有効化
wordpress上で先ほど拡張子を変更したindex.phpが反映されていることを確認してください。
(現段階ではcss、js、画像のリンクが切れた状態になっています。)
・リンクの修正
wordpress上の独自関数を使用してcss、css、画像のパスを修正します。
パスを修正することでcss、js、画像が適切に反映されます。
○index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<title>wordpressテーマ自作</title>
<meta name="description" content="ディスクリプションだよ">
<meta name="keywords" content="キーワード1, キーワード2">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/sanitize.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/normalize.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/common.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/index.css">
</head>
<body>
<header>
<div class="headerWrap">
<div class="centerBox">
<p>ここからheader</p>
<h1>wordpress自作テーマ概略</h1>
<div class="menuBtn">
<span></span>
<span></span>
<span></span>
</div>
<nav class="headerMenu">
<ul>
<li>
<a href="">トップページ</a>
</li>
<li>
<a href="">記事一覧へのリンク</a>
</li>
<li>
<a href="">固定ページへのリンク</a>
</li>
</ul>
</nav>
<p>ここまでheader</p>
</div>
</div>
</header>
<main>
<div class="mainWrap">
<div class="centerBox">
<p>ここからmain</p>
<div class="rowWrap">
<div class="contentWrap">
<p class="text">トップページ</p>
<div class="imgItem">
<img src="<?php echo get_template_directory_uri(); ?>/images/main.png">
</div>
<ul>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
</ul>
</div>
<div class="sideBar">
<p>サイドバーを書く</p>
</div>
</div>
<p>ここまでmain</p>
</div>
</div>
</main>
<footer>
<div class="footerWrap">
<div class="centerBox">
<p>ここからfooter</p>
<p>ここまでfooter</p>
</div>
</div>
<script src="<?php echo get_template_directory_uri(); ?>/js/jquery-2.0.0.min.js"></script>
<script src="<?php echo get_template_directory_uri(); ?>/js/common.js"></script>
<script src="<?php echo get_template_directory_uri(); ?>/js/index.js"></script>
</footer>
</body>
</html>
3-4. wordpressの機能呼び出し
・headerとfooterにwordpressの独自関数の追加
wordpressの基幹ファイルを呼び出す<?php wp_footer(); ?>、<?php wp_footer(); ?>
をそれぞれ追加する
header に<?php wp_head(); ?>
footerに<?php wp_footer(); ?>
・サイドバーにwordpressの独自関数の追加
wordpressでサイドバーに機能を追加できるようにするために、<?php get_sidebar(); ?>を追加する
サイドバーに出力された表示が崩れている場合は、cssを弄って調整してください。
○index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<title>wordpressテーマ自作</title>
<meta name="description" content="ディスクリプションだよ">
<meta name="keywords" content="キーワード1, キーワード2">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/sanitize.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/normalize.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/common.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/index.css">
<?php wp_head(); ?>
</head>
<body>
<header>
<div class="headerWrap">
<div class="centerBox">
<p>ここからheader</p>
<h1>wordpress自作テーマ概略</h1>
<div class="menuBtn">
<span></span>
<span></span>
<span></span>
</div>
<nav class="headerMenu">
<ul>
<li>
<a href="">トップページ</a>
</li>
<li>
<a href="">記事一覧へのリンク</a>
</li>
<li>
<a href="">固定ページへのリンク</a>
</li>
</ul>
</nav>
<p>ここまでheader</p>
</div>
</div>
</header>
<main>
<div class="mainWrap">
<div class="centerBox">
<p>ここからmain</p>
<div class="rowWrap">
<div class="contentWrap">
<p class="text">トップページ</p>
<div class="imgItem">
<img src="<?php echo get_template_directory_uri(); ?>/images/main.png">
</div>
<ul>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
<li><a href="#"><p><span>2020年1月1日</span><span>【カテゴリ】</span>記事のタイトル</p></a></li>
</ul>
</div>
<div class="sideBar">
<p>サイドバーを書く</p>
<?php get_sidebar(); ?>
</div>
</div>
<p>ここまでmain</p>
</div>
</div>
</main>
<footer>
<div class="footerWrap">
<div class="centerBox">
<p>ここからfooter</p>
<p>ここまでfooter</p>
</div>
</div>
<script src="<?php echo get_template_directory_uri(); ?>/js/jquery-2.0.0.min.js"></script>
<script src="<?php echo get_template_directory_uri(); ?>/js/common.js"></script>
<script src="<?php echo get_template_directory_uri(); ?>/js/index.js"></script>
<?php wp_footer(); ?>
</footer>
</body>
</html>
3-5. 投稿記事の表示
・投稿記事の表示
トップページで記事一覧を表示させる部分を作成します。
① the_post()で記事の詳細を取得し、取得した記事データからthe_time(‘Y年n月j日’)、 get_permalink()、the_title()といった専用の関数を用いて記事の作成日時、リンク、タイトルを表示させます。
② get_the_category()でカテゴリー情報を取得し、配列で取得された情報からカテゴリ名を選び表示させます。
③ the_post()のみではどの記事の詳細を読み出して良いか判断できないため、have_posts()を用いて全記事を取得し、whileにより記事分①の処理を行っています。
○index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<title>wordpressテーマ自作</title>
<meta name="description" content="ディスクリプションだよ">
<meta name="keywords" content="キーワード1, キーワード2">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/sanitize.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/normalize.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/common.css">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/index.css">
<?php wp_head(); ?>
</head>
<body>
<header>
<div class="headerWrap">
<div class="centerBox">
<p>ここからheader</p>
<h1>wordpress自作テーマ概略</h1>
<div class="menuBtn">
<span></span>
<span></span>
<span></span>
</div>
<nav class="headerMenu">
<ul>
<li>
<a href="">トップページ</a>
</li>
<li>
<a href="">記事一覧へのリンク</a>
</li>
<li>
<a href="">固定ページへのリンク</a>
</li>
</ul>
</nav>
<p>ここまでheader</p>
</div>
</div>
</header>
<main>
<div class="mainWrap">
<div class="centerBox">
<p>ここからmain</p>
<div class="rowWrap">
<div class="contentWrap">
<p class="text">トップページ</p>
<div class="imgItem">
<img src="<?php echo get_template_directory_uri(); ?>/images/main.png">
</div>
<?php
//投稿記事があれば下記を実行
if(have_posts()){
?>
<ul>
<?php
//記事取得分だけ繰り返す
while(have_posts()) {
the_post();//記事データを取得
?>
<li>
<a href="<?php echo get_permalink(); ?>"><p><span> <?php the_time('Y年n月j日'); ?></span><span><?php $category = get_the_category(); $cat_name = $category[0]->cat_name; echo $cat_name; ?></span><?php the_title(); ?></p></a>
</li>
<?php
}
?>
</ul>
<?php
}
?>
</div>
<div class="sideBar">
<p>サイドバーを書く</p>
<?php get_sidebar(); ?>
</div>
</div>
<p>ここまでmain</p>
</div>
</div>
</main>
<footer>
<div class="footerWrap">
<div class="centerBox">
<p>ここからfooter</p>
<p>ここまでfooter</p>
</div>
</div>
<script src="<?php echo get_template_directory_uri(); ?>/js/jquery-2.0.0.min.js"></script>
<script src="<?php echo get_template_directory_uri(); ?>/js/common.js"></script>
<script src="<?php echo get_template_directory_uri(); ?>/js/index.js"></script>
<?php wp_footer(); ?>
</footer>
</body>
</html>
※headerのメニューのリンクは他ページを作成したのち修正します。
パート2に続く