3分で実装!JINにタイムライン機能を追加する方法

スポンサーリンク
3分で実装!JINにタイムライン機能を追加する方法 WordPress

WordPressプラグインでもいくつかありますが、functions.phpとカスタムCSSを使って3分でタイムラインを実装してみましょう。

子テーマのfunctions.phpやstyle.cssへ書き込むのも良いですが、私のおすすめはfunctions.php記述内容はCode Snippetプラグインへ書き込み、CSSはカスタマイザーからカスタムCSSへ書き込むのがFTPを一切使わず簡単です。

Code Snippets
An easy, clean and simple way to run code snippets on your site.
スポンサーリンク

タイムライン動作デモ

デモタイトル
  • 2019.1
    概要
    説明文
  • 2019.2
    概要
    説明文

functions.php記載内容

元々はWordPressテーマでタイムライン表現を使うためのショートコード実装方法で紹介されているのですが、特に変更する事なくそのままコピペします。

貼り付け用コードはこちら

上記ページが万が一見れない場合は下記をそのままコピペしてください。

//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;

Code Snippetを利用している方は貼り付けた後に、Only run on site front-endをチェックして保存してください。管理画面で読み込む必要はないです。

カスタムCSS記載内容

こちらは寝ログで紹介されているコードだとCocoonテーマ向けなので一部JIN向けに修正が必要ですが既に修正済みのが公開されています。

貼り付け用コードはこちら

同じく上記ページが見れない場合は書きをコピペしてください。

/*********************************
* タイムライン
*********************************/
.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: 130px;
  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;
  }
}

ショートコード

[timeline title="デモタイトル"]
[ti label="2019.1" title="概要"]説明文[/ti]
[ti label="2019.2" title="概要"]説明文[/ti]
[/timeline]

上記ショートコードを見てもらえば分かると思いますが、HTMLのtable要素と似ています。項目を増やしたい場合は

[ti label="2019.2" title="概要"]説明文[/ti]

を増やすだけです。

タイトルとURLをコピーしました