最小構成でwordpressのテーマを作成します。
パート3では以下の行程を進めます。
条件および方針
0. wordpressをサーバーに設置済とする。
1. トップページ(index.html)、投稿ページ(single.html)、固定ページ(page.html)、アーカイブページ(archive.html)を作成する
2. wordpressのthemesディレクトリに作成したファイルをいれる
3. 作成したファイルの書き換え、ファイルの追加 ← パート1はここまで
4. 記事詳細ページの作成(single.php)
5. 固定ページの作成(page.php) ← パート2はここまで
6. アーカイブの作成(archive.php) ← 本記事はここまでやります
7. その他の設定とまとめ
6. 記事詳細ページの作成(archive.php)
・archiveでカテゴリ別に投稿記事を表示させる。
・記事のカテゴリ-の初期値をnewsとする。(日付順の表示も楽にできる)
6-1. archive.php、archive-news.php、archive-other.php、functions.phpの作成
・カテゴリごとに読み込むテンプレート変更できます。
・functions.phpでアーカイブの表示件数を調整します。
○archive.php
<?php
$post = $wp_query->post;//記事データ取得
if ( in_category('news') ) {//カテゴリがnewsなら下記を実行
include(TEMPLATEPATH.'/archive-news.php');
} elseif ( !(in_category('news')) ) {//カテゴリがnews以外なら下記を実行
include(TEMPLATEPATH.'/archive-other.php');
}
?>
○archive-news.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/archive.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">アーカイブ(news)</p>
<?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>
</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>
○archive-other.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/archive.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">アーカイブ(other)</p>
<?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>
</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>
○functions.php
//アーカイブ表示件数
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() ){//管理画面あるいはメインクエリでなければ即終了
return;
}
if ( $query->is_category('news') ) { /* カテゴリがnewsのとき表示件数を10件にセット */
$query->set( 'posts_per_page', '10' );
}
if ( $query->is_home() ) {/* トップページの表示件数を5件にセット */
$query->set( 'posts_per_page', '5' );
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
・その他のページの表示件数はwordpressの管理画面の1ページに表示する最大投稿数から設定できる
6-2. アーカイブにページネーションの追加
・記事ループの下にページネーション表示用の関数を挿入する
○archive-news.php, archive-other.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/archive.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">アーカイブ(news)</p>
<?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
}
?>
?>
<?php if (function_exists("pagination")) {//ページネーションが存在しているなら
pagination($wp_query->max_num_pages);//ページネーション実行
} ?>
</div>
<div class="sideBar">
<p>サイドバーを書く</p>
<?php get_sidebar(); ?>
</div>
</div>
<p>ここまでmain</p>
</div>
</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>
○functions.php
・ページネーション表示用関数の中身を記述する
ページネーションの複雑なところだけ解説します。
$pages・・・全ページ
$paged・・・現在のページ
$showitems・・・ページ数の表示個数を表す式。$rangeの数値を設定することでページネーションの数字の部分を何個にするか調整できます。
①<ページ送り(戻る)>
・if($paged > 1 && $showitems < $pages)
現在のページが2ページ目かつページ数の表示個数が全ページ数より少ないとき
②<数字の部分>
if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
このままだと分かりにくいので分解します。
・!($i >= $paged+$range+1 || $i <= $paged-$range-1)
書き換えると($paged-$range-1<$i<$paged+$range+1 )こんな式になります。
これでもイメージがわかない場合は$pagedと$rangeに実際に数字を入れてみると良いかも。
・$pages <= $showitems
全ページ数が表示個数より小さいとき(イメージが分かない場合はページ送りの時と背反の条件の時と考えると良いかも)
③<ページ送り(進む)>
・if ($paged < $pages && $showitems < $pages)
現在のページが最後のページから一つ前かつページ数の表示個数が全ページ数より少ないとき
//アーカイブ表示件数
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() ){//管理画面あるいはメインクエリでなければ即終了
return;
}
if ( $query->is_category('news') ) { /* カテゴリがnewsのとき表示件数を10件にセット */
$query->set( 'posts_per_page', '10' );
}
if ( $query->is_home() ) {/* トップページの表示件数を5件にセット */
$query->set( 'posts_per_page', '5' );
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
//
//ページネーション
if( !function_exists('pagination') ){
function pagination($pages = '', $range = 1)
{
$showitems = ($range * 2)+1;
global $paged;
if(empty($paged)) $paged = 1;
if($pages == '')
{
global $wp_query;
$pages = $wp_query->max_num_pages;
if(!$pages)
{
$pages = 1;
}
}
if(1 != $pages)
{
echo "<div class='pagination'>";
echo "<ul class='pagenationList'>";
//①
if($paged > 1 && $showitems < $pages) echo "<li class='pagenationListItem'><a class='pagenationListLink' href='".get_pagenum_link($paged - 1)."'>‹</a></li>";
for ($i=1; $i <= $pages; $i++)
{
//②
if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
{
echo ($paged == $i)? "<li class='pagenationListItem'><span class='pagenationListLink now'>".$i."</span></li>":"<li class='pagenationListItem'><a class='pagenationListLink' href='".get_pagenum_link($i)."' class='inactive' >".$i."</a></li>";
}
}
//③
if ($paged < $pages && $showitems < $pages) echo "<li class='pagenationListItem'><a class='pagenationListLink' href='".get_pagenum_link($paged + 1)."'>›</a></li>";
echo "</ul>\n";
echo "</div>\n";
}
}
}
これでアーカイブページにページネーションが表示されます。
パート4に続く