
先日、自作テーマのフォーラムに「タイムライン機能があったらいいな」というリクエストをいただきました。
で、ショートコードを用いて実装してみたら、思っていたよりは簡単に実装できました。
加えて、コピペでどんなテーマにも実装できそうだったので、カスタマイズ方法の紹介です。
こんな感じのタイムラインを作成できます。
- 手順1プラグインをインストールする事前準備としてまずプラグインをインストールする必要があります。
- 手順2プラグインでバックアップバックアッププラグインをインストールしたら、ボタン押してバックアップをしましょう。
目次
主な手順

カスタマイズに必要となる主な手順はこちら。
- ショートコード用のコードをfunctions.phpにコピペ
- タイムライン用のCSSをstyle.cssにコピペ
特に書かれている内容を気にしないのであれば、コピペ2回程度でカスタマイズできるようになっています。
ショートコード用のコードをfunctions.phpにコピペ
まずは、テーマ(子テーマ)のfunctions.phpにショートコードを動作させるためのコードをコピペします。
//timelineショートコードコンテンツ内に余計な改行や文字列が入らないように除外
if ( !function_exists( 'remove_wrap_shortcode_wpautop' ) ):
function remove_wrap_shortcode_wpautop($shortcode, $content){
//tiショートコードのみを抽出
$pattern = '/\['.$shortcode.'.*?\].*?\[\/'.$shortcode.'\]/is';
if (preg_match_all($pattern, $content, $m)) {
$all = null;
foreach ($m[0] as $code) {
$all .= $code;
}
return $all;
}
}
endif;
//タイムラインの作成(timelineショートコード)
add_shortcode('timeline', 'timeline_shortcode');
if ( !function_exists( 'timeline_shortcode' ) ):
function timeline_shortcode( $atts, $content = null ){
extract( shortcode_atts( array(
'title' => null,
), $atts ) );
$content = remove_wrap_shortcode_wpautop('ti', $content);
$content = do_shortcode( shortcode_unautop( $content ) );
$title_tag = null;
if ($title) {
$title_tag = '<div class="timeline-title">'.$title.'</div>';
}
$tag = '<div class="timeline-box">'.
$title_tag.
'<ul class="timeline">'.
$content.
'</ul>'.
'</div>';
return apply_filters('timeline_tag', $tag);
}
endif;
//タイムラインアイテム作成(タイムラインの中の項目)
add_shortcode('ti', 'timeline_item_shortcode');
if ( !function_exists( 'timeline_item_shortcode' ) ):
function timeline_item_shortcode( $atts, $content = null ){
extract( shortcode_atts( array(
'title' => null,
'label' => null,
), $atts ) );
$title_tag = null;
if ($title) {
$title_tag = '<div class="timeline-item-title">'.$title.'</div>';
}
$content = do_shortcode( shortcode_unautop( $content ) );
$tag = '<li class="timeline-item">'.
'<div class="timeline-item-label">'.$label.'</div>'.
'<div class="timeline-item-content">'.
'<div class="timeline-item-title">'.$title.'</div>'.
'<div class="timeline-item-snippet">'.$content.'</div>'.
'</div>'.
'</li>';
return apply_filters('timeline_item_tag', $tag);
}
endif;
タイムライン用のCSSをstyle.cssにコピペ
次は、タイムラインショートコードが出力するHTMLの装飾です。
以下のCSSをテーマ(子テーマ)のstyle.cssにコピペしてください。
/*********************************
* タイムライン
*********************************/
.timeline-box {
margin-bottom: 20px;
border: 1px solid #ccc;
border-radius: 4px;
padding: 16px 5px;
box-sizing: border-box;
}
.timeline-box *{
box-sizing: border-box;
}
.timeline-box .timeline {
list-style: none;
padding: 0;
margin: 0;
}
.timeline-title {
font-weight: bold;
font-size: 1.1em;
text-align: center;
}
.timeline > li {
margin-bottom: 60px;
}
.timeline > li.timeline-item {
overflow: hidden;
margin: 0;
position: relative;
}
.timeline-item-label {
width: 110px;
float: left;
padding-top: 18px;
text-align: right;
padding-right: 1em;
font-size: 14px;
}
.timeline-item-title {
font-weight: bold;
}
.timeline-item-content {
width: calc(100% - 110px);
float: left;
padding: .8em 1.4em;
border-left: 3px #e5e5d1 solid;
}
.timeline-item:before {
content: '';
width: 12px;
height: 12px;
background: #6fc173;
position: absolute;
left: 105px;
top: 24px;
border-radius: 100%;
}
/* for Smartphone */
@media screen and (max-width: 480px) {
.timeline-box .timeline {
padding-left: 10px;
}
.timeline > li.timeline-item {
overflow: visible;
border-left: 3px #e5e5d1 solid;
}
.timeline-item-label {
width: auto;
float: none;
text-align: left;
padding-left: 16px;
}
.timeline-item-content {
width: auto;
padding: 8px;
float: none;
border: none;
}
.timeline-item::before {
left: -12px;
top: 19px;
width: 21px;
height: 21px;
}
}
テーマのスタイルによっては、装飾がずれる可能性があるので、テーマごとに調整してください。上記コードは、WordPress公式テーマTwenty
Seventeenで動作確認しています。
動作確認
タイムラインショートコードを動作確認するとこんな感じで表示されます。
- 2016年3月不祥事により会社を退職取引先の社長の頭をひっぱたいてしまい会社をクビに。
- 2016年4月就職活動就職活動を行うも、前の会社での行いが知れ渡っており、同業者は全て門前払い。
- 2016年8月就職を諦め無職へ完全にやる気が無くなり無職へジョブチェンジ。毎日オンラインゲームざんまいの濃密な日々を過ごす。
- 2017年8月サイト運営を開始貯金を使い果たしそうになり「何とかせねば!」と〇〇というサイトを開始。
- 2018年8月サイト運営1年経過毎日記事を書き続けた結果、月収〇〇円に。節約すれば何とか生活できる収入に到達。
モバイルではこんな感じで表示されます。
ショートコード例はこちら。
[timeline title="これまでの経歴(※フィクションです)"] [ti label="2016年3月" title="不祥事により会社を退職"]取引先の社長の頭をひっぱたいてしまい責任を取って退職。[/ti] [ti label="2016年4月" title="就職活動"]就職活動を行うも、前の会社での行いが知れ渡っており、同業者は全て門前払い。[/ti] [ti label="2016年8月" title="就職を諦め無職へ"]完全にやる気が無くなり無職へジョブチェンジ。毎日オンラインゲームざんまいの濃密な日々を過ごす。[/ti] [ti label="2017年8月" title="サイト運営を開始"]貯金を使い果たしそうになり「何とかせねば!」と〇〇というサイトを開始。[/ti] [ti label="2018年8月" title="サイト運営1年経過"]毎日記事を書き続けた結果、月収〇〇円に。節約すれば何とか生活できる収入に到達。[/ti] [/timeline]
参考
このタイムラインのデザインはWebクリエイターボックスを運営されているManaさんが作成されたCodePenのものを参考に、モバイル用のスタイルを加えさせていただきました。
まとめ
今回のタイムラインショートコードは、「順番を扱う内容」、「時系列を扱う内容」のコンテンツを作成する際に、内容分かりやすく装飾してくれるかと思います。
そんなわけで、「手順や時系列を出来る限りわかりやすく表現したい」なんて場合に良い表現方法になるかと思います。

ショートコードの作成方法が載っていないのですが、どのようにショートコードを本文内に設置すれば良いのでしょうか?