【SANGO】トップページのカスタマイズ(詳細版)

運営している別サイトのコンタクトフォームから立て続けに SANGO カスタマイズに関する質問をもらう →「そうだ、新しくブログ作ろう」という、思い付きと勢いで作成したこのブログ。トップページにはほとんど手を入れずに使っていましたが、シンプルすぎるなぁとずっと気になってはいたんです。でもなかなか手を付けられないまま、あっという間に1ヶ月が経ってしまいました。

先日「THE THOR」というテーマを購入して、ここ数日はそちらを弄っていたのですが、ちょっと SANGO が恋しくなったので、これを機にトップページのカスタマイズをしてみました。

手順に沿って進めればトップページが完成する簡潔版記事はこちらへどうぞ。

【SANGO】トップページのカスタマイズ(簡潔版)

各パーツをざっと解説

ヘッダーアイキャッチっぽい部分

当サイトのトップページ1番上にヘッダーアイキャッチっぽい部分がありますが、これはただ画像を並べているだけです。SANGO のカスタマイザーから設定すれば、この上に更にヘッダーアイキャッチを表示させることもできます。

PICK UP(おすすめ)記事

次の PICK UP 記事4つは、SANGO の「指定したタグを持つ記事を好きな数だけ出力」するショートコードを使用しています。
表示させたい記事に「まとめ」というタグをつけて、CSS で PC からは4記事、タブレットからは2記事ずつ2列、モバイルからは1列1記事で表示するように指定しています。

人気記事と新着記事

その下の人気記事と新着記事を表示している部分は、新しいウィジェットエリアを作り、そこに登録したウィジェットを本文内からショートコードで呼び出せるようにしました。
ウィジェットの設定画面から最新記事と SANGO の人気記事ウィジェットを追加し、固定ページの記事本文内にショートコードを記述して呼び出しています。

カテゴリ別新着記事

一番下のカテゴリ別最新記事の部分は、SANGO の「指定したカテゴリーIDの記事を好きな数だけ出力」するショートコードを使用しています。CSS で切り替えるタブを実装して、各タブの表示部分にショートコードでカテゴリ記事を出力させています。

CSS でタブのデザインを SANGO オリジナルのものに寄せて、PC からは3記事ずつ2列、タブレットからは2記事ずつ3列、モバイルからは1記事1列×6記事表示されるように指定しています。モバイル表示ではタブも2つずつ2列になります。

カスタムトップページデモ

カスタマイズ前の準備

ウィジェットを作成してショートコード化する

人気記事と新着記事を出力するため、新しくウィジェットエリアを作成して、そこに追加されているウィジェットを本文内からショートコードで呼び出せるようにします。

ウィジェットを実行する PHP ファイルを作り、それを本文内からショートコードで呼び出すという仕組みになっています。詳しく知りたい方はこちらの記事へどうぞ。

【WordPress】ウィジェットを記事本文内などに表示させる方法

新しいウィジェットエリアとショートコードを実装する

まずは子テーマの「function.php」に以下をコピペして、新しいウィジェットエリアとショートコードを作成してください。

function.php

//ショートコード化のためのウィジェット
register_sidebar( array(
'id' => 'custom_shortcord',
'name' => 'ショートコード化するウィジェット',
'description' => 'ここに追加したウィジェットを、記事内などにショートコードで表示させることができます。',
'before_widget' => '<div class="widget custom_sc">',
'after_widget' => '</div>',
) );

//ウィジェットを呼び出すショートコード
function add_widget_func($params = array()) {
extract(shortcode_atts(array(
'file' => 'default'
), $params));
ob_start();
get_template_part($file,'');
return ob_get_clean();
}
add_shortcode('add_widget', 'add_widget_func'); 

ウィジェットエリアを実行するための PHP ファイルを作る

custom_widget.php

<?php dynamic_sidebar('custom_shortcord'); ?>

新規ファイルを作成して上記の1行をコピペし、「custom_widget.php」という名前を付けて保存するか、下のボタンからファイルをダウンロードしてください。

ダウンロードした ZIP ファイルを展開すると、「custom_widget.php」というファイルが入っています。
このPHP ファイルを SANGO のテーマ直下(本体の方)にアップロードしてください。

新しいウィジェットエリアに人気記事・新着記事を追加する

ウィジェットの設定画面で「ショートコード化するウィジェット」というエリアに、人気記事ウィジェットと最近の投稿ウィジェットを追加してください。
ここで設定したタイトルが見出しの部分に出力され、表示件数も反映されます。

おすすめ記事用のタグの作成と設定

ヘッダーアイキャッチ(っぽい部分)の下に表示される4記事を登録するためのタグを作成し、表示させたい記事に登録します。(タグ名はトップページには出力されません)

ショートコードを書き換えれば、特定のカテゴリーの記事や好きな記事に変更することもできるので、タグを利用しない場はこの工程を飛ばしてください。

トップページと記事一覧ページを作る

新規の固定ページを2つ作ってください。

記事一覧ページを作る

記事一覧ページになる方は、任意のタイトルをつけ、本文には何も記入せずに下書き保存します。パーマリンクを「all_posts_archive」に変更して公開しておいてください。
(パーマリンクは別のものでも良いですが、その場合は後ほどソースコードも変更する必要があります)

カスタマイズするトップページを作る

トップページになる方は「トップページ用1カラム」というテンプレートを選びます。タイトルとパーマリンクは好きなもので構いません。
これで準備は終了です。

カスタマイズする

ここからは投稿画面の記事部分への記述になります。ビジュアルエディタを使用されている方は、テキストエディタに切り替えてからコピペしてください。

注意

私はクラシックエディタを使用しているため Gutenberg の使い方があまりよく分かっていません。何か問題があれば旧テキストエディタを使用してください。

HTML

まず HTML の部分から。以下のソースコードを投稿画面の記事本文エリアにコピペしてください。(右上の「COPY」をワンクリックでコピーできます)
変更必須個所には【】内に説明を入れてあるので、【】を消して自分のサイトの URL なり ID なりを記入してください。その他、簡単に変更できる場所には <!-- --> でコメントを入れてあります。

固定ページ本文

[no_toc] <!-- TOC+を非表示にする・必要なければ削除 -->
<!-- ページ上部の自由エリアが必要なければ削除 -->
<div class="top_description">
[yoko2 responsive]
[cell]<p>SANGO の横2列のショートコード<br>左側のセル</p><p>ここは自由に変更してください</p>[/cell]
[cell]<p>SANGO の横2列のショートコード<br>右側のセル</p><p>必要なければ消去してください</p>[/cell]
[/yoko2]
</div>
<!-- ページ上部の自由エリアが必要なければ削除ここまで -->

<!-- おすすめ4記事 -->
<div class="tag_posts">
<p class="fukidashi_down">
<i class="fa fa-heart-o"></i> PICK UP! <!-- 吹出タイトル -->
</p>
<div class="cardtype cf">
[tagpost id="【タグのID】" num="4" type="card"]<!-- ここにタグのIDを記入 -->
</div>
</div>
<!-- おすすめ4記事ここまで -->

<!-- 人気記事・新着記事 -->
<div class="cardtype cf">
[add_widget file='custom_widget']
</div>
<a class="more_posts" href="/all_post_archive/"> <!-- 記事一覧ページのURLを変更した場合はここを書き換える -->
<i class="fa fa-map-signs"></i> 最新記事をもっと読む <!-- リンクの文字 -->
</a>
<!-- 人気記事・新着記事ここまで -->

<!-- カテゴリ別新着記事 -->
<div class="cate_new_posts">
<p class="fukidashi_down">
<i class="fa fa-check"></i> カテゴリ別新着記事 <!-- 吹出タイトル -->
</p>
</div>

<div class="tab_posts">
<input id="tab_1" type="radio" name="tab_item" checked>
<input id="tab_2" type="radio" name="tab_item">
<input id="tab_3" type="radio" name="tab_item">
<input id="tab_4" type="radio" name="tab_item">

<!-- タブ -->
<div class="tab_area">
<label id="tab1"class="tab_item" for="tab_1">【タブ1】</label><!-- タブ1タイトル -->
<label id="tab2"class="tab_item" for="tab_2">【タブ2】</label><!-- タブ2タイトル -->
<label id="tab3"class="tab_item" for="tab_3">【タブ3】</label><!-- タブ3タイトル -->
<label id="tab4"class="tab_item" for="tab_4">【タブ4】</label><!-- タブ4タイトル -->
</div>
<!-- タブここまで -->

<!-- タブ1をクリックした時に表示される記事(デフォルト) -->
<div class="tab_content" id="tab1_content">
<div class="cardtype cf">
[catpost catid="【カテゴリID】" num="6" type="card"] <!-- 1つ目のタブに対応するカテゴリーID -->
<div class="more_cate_posts center">
<!-- SANGO のリップルエフェクト付ボタン(メインカラー) -->
[btn href="【カテゴリページのURL】" class="raised main-bc strong rippler rippler-default"]
<i class="fa fa-mortar-board"></i> もっと読む <!-- ボタンの中身 -->
[/btn]
<!-- ボタンここまで -->
</div>
</div>
</div>

<!-- タブ2をクリックした時に表示される記事 -->
<div class="tab_content" id="tab2_content">
<div class="cardtype cf">
[catpost catid="【カテゴリID】" num="6" type="card"]
<div class="more_cate_posts center">
[btn href="【カテゴリページのURL】" class="raised main-bc strong rippler rippler-default"]<i class="fa fa-mortar-board"></i> もっと読む[/btn]
</div>
</div>
</div>

<!-- タブ3をクリックした時に表示される記事 -->
<div class="tab_content" id="tab3_content">
<div class="cardtype cf">
[catpost catid="【カテゴリID】" num="6" type="card"]
<div class="more_cate_posts center">
[btn href="【カテゴリページのURL】" class="raised main-bc strong rippler rippler-default"]<i class="fa fa-mortar-board"></i> もっと読む[/btn]
</div>
</div>
</div>

<!-- タブ4をクリックした時に表示される記事 -->
<div class="tab_content" id="tab4_content">
<div class="cardtype cf">
[catpost catid="【カテゴリID】" num="6" type="card"]
<div class="more_cate_posts center">
[btn href="【カテゴリページのURL】" class="raised main-bc strong rippler rippler-default"]<i class="fa fa-mortar-board"></i> もっと読む[/btn]
</div>
</div>
</div>
</div>
<!-- HTML ここまで -->

ヘッダーアイキャッチっぽい部分

ひな形として SANGO の横並び2列のショートコードをいれてありますが、この部分は各自好きなように変更して下さい。このエリアが必要なければコメントの入っている部分を丸ごと削除して構いません。

PICK UP(おすすめ)記事部分

SANGO の「指定したタグを持つ記事を好きな数だけ出力」するショートコードを使用するので、事前準備で作成したタグの ID を調べて、ショートコードの「ID=【タグのID】」という部分に記入します。

表示件数を変更したい場合は「num="4"」の数字を変更してください。4の倍数ならモバイルやタブレットからも綺麗に表示できます。2記事・3記事(とその倍数)にしたい場合は後ほど CSS を変更する必要があります。

人気記事と新着記事

事前準備でウィジェットを追加してあれば特に変更の必要はありません。
記事一覧ページ(デフォルトのトップページ)へのリンクのテキストを変更したい場合は「リンクの文字」とコメントが入っている行を書き換えてください。

タブのタイトル

【タブ〇〇】と入っている部分に、4つ並んだタブに表示するカテゴリ名を記入します。
タブを増やしたい場合は、この項目と1つ上のブロックにあるラジオボタンの項目を1セットとして、好きなセット数分増やしてください。タブ数を変更する場合は後ほど CSS も変更する必要があります

タブの中身(記事を表示する部分)

「タブ〇をクリックした時に表示される記事」というコメントが入っている部分が、各タブの中身になります。
【カテゴリID】に表示したいカテゴリーの ID を、【カテゴリページのURL】には対応するカテゴリーページの URL をそれぞれ記入してください。

「num="6"」という部分が表示件数です。PCでは1列に3記事、タブレットからだと1列に2記事、スマホからは1列1記事表示されるようになっているので6記事に設定するのがおすすめです。(変更する場合は、こちらも CSS の変更が必要になります)

「SANGO のリップルエフェクト付ボタン(メインカラー)」というコメントで囲まれた部分は、SANGO のショートコードで実装できるボタンで、各カテゴリページへ飛ぶリンクになっています。リンクのデザインやテキストを変更したい場合はこの部分を書き換えてください

CSS

次は CSS。まずは以下を先ほどコピペした HTML の上か下にコピペしてください。

この CSS はこのページでしか使わず、また子テーマの CSS に追加すると他のページの要素にも適用されてしまう場合があるため、記事本文エリアに一緒にコピペしてしまうのをおすすめします。後からデザインや表示件数を変更したくなった時にも、その方が楽です。(昨年末より CSS を body 内に書いても文法違反ではなくなりました)

固定ページの記事本文エリア

<style>
/*ページ全体*/
#content.page-forfront, #container, #entry {
	background: transparent; /* 背景色を消去 */
}
.page-forfront .entry-content {
	padding: 0;
}
.entry-content img {
	box-shadow: none;
	margin: 0;
}
.page-forfront .entry-content a {
	border-bottom: 0;
}
.cardtype {
	margin-bottom: 0;
}
.c_linkto {
	max-width: 100%;
}
.tab_item, a.more_posts {
	cursor: pointer; /*カーソル*/
}

/*アイキャッチっぽい部分*/
.top_description {
	width: calc(100% - 20px);
	text-align: center;
	font-size: .9em;
	margin: 0 auto;
}

/*ピックアップ4記事(タグ)*/
.tag_posts {
	width: calc(100% - 6px);
	margin: 0 auto 20px;
}

/*おすすめ記事の表示件数(PC)*/
.tag_posts .c_linkto {
	width: calc(25% - 12px);
	margin: 0 6px;
}/*おすすめ記事の表示件数ここまで*/

.tag_posts .c_linkto_text {
	font-size: .85em;
}

/*人気記事・新着記事の見出し*/
/*記事部分の見出しのCSSが適用されるので上書きしています*/
.entry-content h2:before, .entry-content h2:after {
	display: none
}/*疑似要素を使いたい場合はこの3行を削除してください*/

.entry-content .my_popular_posts h2, .entry-content .custom_sc h2, {
	background: 【背景色】; /*タイトル(見出し)部分の背景色*/
	color: 【文字色】; /*タイトル(見出し)の文字色*/
	font-size: 1.3em;
}

/*人気記事・新着記事*/
.my_popular_posts li, .custom_sc li {
	list-style-type: none;
}
.my_popular_posts, .custom_sc {
	display: inline-block;
	width: calc(50% - 20px);
	margin: 20px 10px 0;
	padding: 0 0 10px;
}
.my_popular_posts h2.widgettitle, .custom_sc h2.widgettitle {
	padding: 10px 20px;
	margin: 0 0 20px;
}
.my_popular_posts ul li, .custom_sc ul li {
	margin: 0 15px 0 0;
}
.my-widget li a .my-widget__text {
	padding: 0 0 0 10px;
}
.my_popular_posts li a:hover, .custom_sc li a:hover {
	background-color: #eaf4fc!important; /*記事にカーソルを乗せた時の色*/
}

/*カテゴリ別新着記事*/
.tab_posts {
	background: transparent;
	width: 100%;
	margin 0;
}

/*カテゴリ記事の表示件数(PC)*/
.tab_posts .c_linkto {
	width: calc(100%/3 - 20px);
	margin: 20px 10px 0;
}/*カテゴリ記事の表示件数ここまで*/

.tab_posts .c_linkto_text {
	font-size: .85em;
}

/*タブのスタイル*/
.tab_area {
	width: calc(100% - 20px);
	font-size: 0;
	background: #fcfcfc;/*選択されていないタブの背景色*/
	margin: 0 10px;
	border-radius: 2px;
	box-shadow: rgba(0, 0, 0, 0.2) 0px 3px 10px -2px;
}
/*ラジオボタンを全て消す*/
input[name="tab_item"] {
	display: none;
}
/*タブ切り替えの中身*/
.tab_content {
	display: none;
	padding: 0;
	overflow: hidden;
}
/*タブにカーソルを乗せた時の挙動*/
.tab_item:hover {
	opacity: 0.75;
}

/*タブの見た目ここから*/
.tab_item {
	width: calc(100%/4); /*タブの大きさ*/
	height: 50px;
	line-height: 50px;
	font-size: 16px;
	text-align: center;
	color: #565656; /*タブの文字色*/
	display: inline-block;
	text-align: center;
	font-weight: bold;
	border-right: 1px solid #eaeaea;
	transition: all 0.2s ease;
}
#tab4.tab_item {
	border: none;
}

/*選択されているタブのコンテンツのみを表示*/
#tab_1:checked~#tab1_content, #tab_2:checked~#tab2_content, #tab_3:checked~#tab3_content, #tab_4:checked~#tab4_content {
	display: block;
}
#tab_1:checked~.tab_area #tab1 {
	border-radius: 3px 0 0 3px; /*左端タブの左側角を丸く*/
}
#tab_4:checked~.tab_area #tab4 {
	border-radius: 0 3px 3px 0 /*右端タブの右側角を丸く*/
}
#tab_1:checked~.tab_area #tab1, #tab_2:checked~.tab_area #tab2, #tab_3:checked~.tab_area #tab3, #tab_4:checked~.tab_area #tab4 {
	background: 【背景色】; /*選択されているタブの背景色*/
	color: 【文字色】; /*文字色*/
}
/*タブの見た目ここまで*/


/*リンク*/
.more_cate_posts {
	width: 100%;
	margin: 20px 0 0;
}
.entry-content .more_cate_posts a.btn {
	width: calc(100%/3 - 20px); /*もっと読むリンクのボタンの大きさ*/
}
#inner-content .more_cate_posts .btn {
	margin: 0;
}
a.more_posts {
	text-align: center;
	background: #eaedf7; /*記事一覧へのリンクの背景色*/
	color: #afafaf; /*文字色*/
	margin: 0;
	padding: 10px 20px;
	display: block;
	width: 100%;
	border-radius: 2px;
}
a.more_posts:hover {
	background: #eaf4fc; /*記事一覧へのリンクにカーソルを乗せた時の背景色*/
	color: #8491c3; /*文字色*/
	border-radius: 2px;
}

/*吹出タイトル*/
.tag_posts p.fukidashi_down {
	margin: 0 50% 20px 4px;
}
.cate_new_posts p.fukidashi_down {
	margin: 0 50% 20px 10px;
}
p.fukidashi_down {
	width: calc(50% - 10px);
	padding: 10px 25px;
	text-align: center;
}
.fukidashi_down {
	position: relative;
	display: inline-block;
	min-width: 120px;
	max-width: 100%;
	color: #4d4c61; /*吹出の文字色*/
	background: #eaedf7; /*吹出の背景色*/
	border-radius: 5px;
}
.fukidashi_down:before {
	content: "";
	position: absolute;
	left: 50%;
	bottom: -40px;
	margin-left: -20px;
	border: 20px solid transparent;
	border-top: 20px solid #eaedf7; /*吹出の背景色*/
}

/*レスポンシブ対応用*/
@media only screen and (min-width: 768px) {
	a.more_posts {
		width: calc(50% - 20px);
		margin: 0 0 20px calc(50% + 10px);
	}
}
@media only screen and (min-width:1030px) {
	.wrap, #inner-header, #inner-content {
		max-width: 1000px; /*表示エリア全体の横幅*/
	}
}
@media only screen and (max-width: 1029px) {
	.entry-content ul.my-widget {
		width: 100%;
		padding: 0 0 0 7px;
	}
	.my_popular_posts ul li, .custom_sc ul li {
		margin: 0 7px 0 0;
	}
	.tag_posts {
		width: 100%;
		margin: 0 auto;
	}

/*おすすめ記事の表示件数*/
	.tag_posts .c_linkto {
		width: calc(50% - 20px);
		margin: 0 9.5px 20px;
	}
/*おすすめ記事の表示件数ここまで*/

/*カテゴリ別最新記事の表示件数*/
	.tab_posts .c_linkto {
		width: calc(50% - 20px);
		margin: 20px 9.5px 0;
	}
/*カテゴリ別最新記事の表示件数ここまで*/

	.my_popular_posts, .custom_sc {
		margin: 20px 9.5px 0;
	}
	.tag_posts p.fukidashi_down {
		margin: 20px 10px 25px;
		width: calc(100% - 20px);
	}
}
@media only screen and (max-width: 480px) {
	.top_description, .head_intro, .thor, .tag_posts .c_linkto, .tab_area, .tab_posts .c_linkto, .my_popular_posts, .custom_sc, p.fukidashi_down, .tag_posts p.fukidashi_down, .entry-content .more_cate_posts a.btn {
		width: 100%;
	}
	.tab_area {
		margin: 10px 0;
	}

/*タブ数を増やした時に変更するエリア*/
	.tab_item {
		width: calc(100%/2);
	}
	#tab1.tab_item, #tab2.tab_item {
		border-bottom: 1px solid #eaeaea;
	}
	#tab_1:checked~.tab_area #tab1 {
		border-radius: 3px 0 0 0;
	}
	#tab_2:checked~.tab_area #tab2 {
		border-radius: 0 3px 0 0;
	}
	#tab_3:checked~.tab_area #tab3 {
		border-radius: 0 0 3px 0;
	}
	#tab_4:checked~.tab_area #tab4 {
		border-radius: 0 0 0 3px
	}
/*タブ数を増やした時に変更するエリアここまで*/

/*表示件数を変更する時に追記するエリア*/
	.tab_posts .c_linkto {
		margin: 20px 9.5px 10px;
	}
	.tag_posts .c_linkto {
		margin: 10px 9.5px 20px;
	}
/*表示件数を変更する時に追記するエリアここまで*/
	.cate_new_posts p.fukidashi_down, .tag_posts p.fukidashi_down {
		margin: 30px auto 20px;
	}
	p.fukidashi_down {
		padding: 10px 5px;
	}
	a.more_posts {
		margin: 0 0 20px;
	}
	.more_cate_posts {
		margin: 10px 0 20px;
	}
	.my_popular_posts, .custom_sc {
		margin: 20px 0 0;
	}
}
</style>

【】で囲まれた部分を変更する(必須)

「人気記事」「最新記事」の見出し部分の背景色と文字色、それから選択されているタブの背景色と文字色の指定部分を【】で囲んであるので、好みの色に変更してください。

コメントが入っている部分を変更する

背景色や hover 時の色など、変更可能な場所にはほとんどコメントを入れてあります。サイトに合わせて変更してください。

おすすめ記事・カテゴリ記事・タブの表示件数を変更した場合

おすすめ記事の表示数を4の倍数に変更した場合は、CSS を変更する必要はありません。
それ以外の方は該当部分を変更する必要がありますが、13000文字を超えてしまったので別記事にまとめました。こちらを参考にカスタマイズしてください。

【SANGO】トップページのカスタマイズで記事やタブの表示件数を変更する方法