雑記

JINでタイムラインを表示させるHTML&CSSコード

SANGOに使われているタイムライン機能がJINでも使えるように紹介されているサイトがいろいろありますが、今回僕がタイムラインのコードを入力したら、結構デザインが崩れました。

このタイムラインは、テーマエディターからfunctions.phpをいじることになるので、データのバックアップと子テーマのインストールを済ませておきます。

https://saruwakakun.com/html-css/wordpress/backup

子テーマのインストールと有効化

子テーマのインストールはこちらから

子テーマをJINのサイトからインストールします。
テーマの追加→ファイルを選択→今すぐインストールインストール後、外観→テーマ→新規追加→テーマのアップロードから、先程インストールしたJINの子テーマをアップロードし、今すぐインストールを押します。

外観→テーマアップロードすると、外観→テーマと進んだところに、新しくテーマが追加されています。※画像ではjin-childのテーマが有効化されていますが、この時点では、有効化せずにJINのテーマのままにしておきます。

外観→カスタマイズ→エクスポート/インポートの順に進みます。
カスタマイズからテーマをエクスポート(書き出し)書き出しをクリックすると、今適用している親テーマのファイルがダウンロードされます。
ダウンロード後、外観→テーマに戻りjin-childのライブプレビューを選択すると、カスタマイズ画面に移行します。(まだ有効化はしません)

親テーマをカスタマイズからインポートするエクスポート/インポートに進み、先程ダウンロードしたJINテーマのファイルをアップロードし、「画像ファイルをダウンロードしてインポートしますか?」にチェックを入れ、
インポートをクリック。

インポートすると、子テーマに親テーマの情報が適用されます。
サイトのデザインが今まで使用していたデザインにかわります。
確認出来たら、有効化して公開を押します。

これで子テーマの有効化とデザインの反映が終わりました。

タイムライン機能のPHP&HTML&CSS

PHPコードをfunctions.php(子テーマ)にコピペする

下記のコードを子テーマ(jin-child)の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;
//タイムラインショートコード
add_shortcode('ptimeline', 'tl_shortcode');
if ( !function_exists( 'tl_shortcode' ) ):
function tl_shortcode( $atts, $content = null ){
extract( shortcode_atts( array(
    'color' => null,
    'marker' => null,
    'icon' => null,
  ), $atts ) );
  $content = remove_wrap_shortcode_wpautop('ti', $content);
  $content = do_shortcode( shortcode_unautop( $content ) );
  if ( $icon ):
   $tag .= '<style type="text/css">.ptimeline-wrap .'.$icon.' .ptimeline-item .ptimeline-marker:before{ content:"\\'.$icon.'";}</style>';
  endif;
  $tag .= '<div class="ptimeline-wrap">'.
            '<ul class="ptimeline '.$color.' '.$marker.' '.$icon.'">'.
              $content.
            '</ul>'.
          '</div>';
  return apply_filters('timeline_tag', $tag);
}
endif;
 
//タイムラインショートコード中身
add_shortcode('ti', 'tl_item_shortcode');
if ( !function_exists( 'tl_item_shortcode' ) ):
function tl_item_shortcode( $atts, $content = null ){
  extract( shortcode_atts( array(
    'title' => null,
    'label' => null,
    'icon_item' => null,
  ), $atts ) );
  $content = do_shortcode( shortcode_unautop( $content ) );
  if ($icon_item):
   $tag .= '<style type="text/css">.ptimeline-wrap .ptimeline-item .'.$icon_item.':before{ content:"\\'.$icon_item.'" !important;}</style>';
  endif;
  $tag .= '<li class="ptimeline-item">'.
            '<div class="ptimeline-label">'.$label.'</div>'.
             '<div class="ptimeline-title">'.$title.'</div>'.
             '<div class="ptimeline-main">'.$content.'</div>'.
            '<div class="ptimeline-marker '.$icon_item.'"></div>'.
          '</li>';
  return apply_filters('timeline_item_tag', $tag);
}
endif;

 

CSSコードをコピペする

  1. 外観→テーマエディター→子テーマ(jin-child)→スタイルシートに記述
  2. 外観→カスタマイズ→追加CSSに記述

CSSを記述する場合は、2つあり①のように直接子テーマに記述する方法と、②の追加CSSに記述する方法です。

基本的には追加CSSに記述するのをおススメします。
画面を切り替えずにプレビュー画面が見れるので、時間の短縮になります。

追加CSSからタイムラインのCSSを追加する外観→カスタマイズ→追加CSSに記述する場合は、この赤枠の中にCSSコードを記述していきます。

下記コードがCSSコードです。

/*********************************
* タイムライン
*********************************/
.ptimeline-wrap{
    margin:0 auto 2rem;
}
.ptimeline-wrap .ptimeline{
    padding:0 !important;
    list-style:none !important;
}
.ptimeline-wrap .ptimeline-label {
    padding: 3px 0 0 2px;
    color: #aaa;
    font-size: 12px;
    font-weight: 500;
}
.ptimeline-wrap .ptimeline-title {
    font-size: 1.1em;
    font-weight: bold;
    line-height: 1.5;
    color:#00bfff;
}
.ptimeline-wrap .ptimeline-main {
    margin-top: 0.5em;
    padding: 0 0 1.5em;
    font-size: 0.9em;
    line-height: 1.8;
    border-bottom: dashed 1px #ddd;
    color:#555;
}
.ptimeline-wrap .ptimeline-main img{
  display:block;
  margin:1em auto;
}
.ptimeline-wrap .ptimeline-item {
    position: relative;
    padding: 0 0 1em 1.5em !important;
    margin-bottom:0 !important;
    border:none;
}
.ptimeline-wrap .ptimeline .ptimeline-item:before {
    content: "";
    width: 3px;
    background: #eee !important;
    display: block;
    position: absolute;
    top: 25px;
    bottom: -3px;
    left: 5px;
}
.ptimeline-wrap .ptimeline-item:last-child:before{
    content:none;
}
/*********************************
* タイムライン マーカー
*********************************/
.ptimeline-wrap .ptimeline-marker{
    display: block;
    position: absolute;
    content: "";
    top: 6px;
    left: 0;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    border: solid 3px #00bfff;
}
.ptimeline-wrap .ptimeline-item:first-child .ptimeline-marker,.ptimeline-wrap .ptimeline-item:last-child .ptimeline-marker{
    background:#00bfff;
}
/*四角 */
.ptimeline-wrap .square .ptimeline-marker{
    border-radius: 0;
}
/* アイコン*/
.ptimeline-wrap .icon .ptimeline-item .ptimeline-marker{
    content:unset;
    border:none !important;
    background:none !important;
}
.ptimeline-wrap .icon .ptimeline-item .ptimeline-marker:before{
    font-family: "Font Awesome 5 Free";
    top: -1px;
    left: 0;
    position:absolute;
    font-weight:bold;
    font-size:16px;
    line-height:1;
    color:#00bfff;
}
.ptimeline-wrap .icon .ptimeline-item:first-child .ptimeline-marker,.ptimeline-wrap .icon .ptimeline-item:last-child .ptimeline-marker{
    background:none !important;
}
/* 画像*/
.ptimeline-wrap .tl-img .ptimeline-item .ptimeline-marker{
    content:unset;
    border:none !important;
    background:none !important;
}
.ptimeline-wrap .tl-img .ptimeline-item .ptimeline-marker:before {
    content:"";
    display:inline-block;
    background-image:url(ここに画像URL); /* 画像1番目*/
    background-size:contain;
    background-repeat:no-repeat;
    width:40px;
    height:40px;
    position: relative;
    top: -4px;
    left: -2px;
}
.ptimeline-wrap .tl-img li:nth-of-type(2) > .ptimeline-marker:before{
    background-image:url(ここに画像URL) !important; /* 画像2番目*/
}
.ptimeline-wrap .tl-img li:nth-of-type(3) > .ptimeline-marker:before{
    background-image:url(ここに画像URL) !important; /* 画像3番目*/
}
.ptimeline-wrap .tl-img li:nth-of-type(4) > .ptimeline-marker:before{
    background-image:url(ここに画像URL) !important; /* 画像4番目*/
}
.ptimeline-wrap .tl-img li:nth-of-type(5) > .ptimeline-marker:before{
    background-image:url(ここに画像URL) !important; /* 画像5番目*/
}
.ptimeline-wrap .tl-img .ptimeline-item {
    padding: 0 0 1em 3em !important;
}
.ptimeline-wrap .tl-img .ptimeline-item:before {
    top: 30px;
    left: 15px;
}
/*********************************
* タイムライン カラー
*********************************/
/* ピンク */
.ptimeline-wrap .pink .ptimeline-title{
    color:#f7bcbc !important; /* タイトル色 */
}
.ptimeline-wrap .pink .ptimeline-main{
    color:#555 !important; /* コンテンツ色 */
}
.ptimeline-wrap .pink .ptimeline-marker{
    border: solid 3px #f7bcbc !important; /* マーカー色 */
    color:#f7bcbc; /* アイコン色 */
}
.ptimeline-wrap .pink .ptimeline-item:first-child .ptimeline-marker,.ptimeline-wrap .pink .ptimeline-item:last-child .ptimeline-marker{
    background:#f7bcbc; /* マーカー色(最初と最後)*/
}
.ptimeline-wrap .pink .ptimeline-item .ptimeline-marker:before{
    color:#f7bcbc !important; /* アイコン色 */
}
/*イエロー*/
.ptimeline-wrap .yellow .ptimeline-title{
    color:#fdc44f !important; /* タイトル色 */
}
.ptimeline-wrap .yellow .ptimeline-main{
    color:#555 !important; /* コンテンツ色 */
}
.ptimeline-wrap .yellow .ptimeline-marker{
    border: solid 3px #fdc44f !important; /* マーカー色 */
    color:#fdc44f; /* アイコン色 */
}
.ptimeline-wrap .yellow .ptimeline-item:first-child .ptimeline-marker,.ptimeline-wrap .yellow .ptimeline-item:last-child .ptimeline-marker{
    background:#fdc44f; /* マーカー色(最初と最後)*/
}
.ptimeline-wrap .yellow .ptimeline-item .ptimeline-marker:before{
    color:#fdc44f !important; /* アイコン色 */
}
/*グリーン*/
.ptimeline-wrap .green .ptimeline-title{
    color:#2fcdb4 !important; /* タイトル色 */
}
.ptimeline-wrap .green .ptimeline-main{
    color:#555 !important; /* コンテンツ色 */
}
.ptimeline-wrap .green .ptimeline-marker{
    border: solid 3px #2fcdb4 !important; /* マーカー色 */
    color:#2fcdb4; /* アイコン色 */
}
.ptimeline-wrap .green .ptimeline-item:first-child .ptimeline-marker,.ptimeline-wrap .green .ptimeline-item:last-child .ptimeline-marker{
    background:#2fcdb4; /* マーカー色(最初と最後)*/
}
.ptimeline-wrap .green .ptimeline-item .ptimeline-marker:before{
    color:#2fcdb4 !important; /* アイコン色 */
}

 

HTMLコード(ショートコード)の追加

投稿画面で入力するコードになります。
AddQuicktagというプラグインを導入しておくと、コードの呼び出しが1クリックで出来るようになります。

  • STEP1
    タイトル1
    ここにテキスト
  • STEP2
    タイトル2
    ここにテキスト
  • STEP3
    タイトル3
    ここにテキスト
  • STEP4
    タイトル4
    ここにテキスト
  • STEP5
    タイトル5
    ここにテキスト

 

  • Font Awesomeにアイコンコードを入力
  • STEP1~5/タイトル1~5/ここにテキスト/にそれぞれ文字を入力

アイコンはFont Awesome5からUnicodeのみをコピペします。

JINアイコンを使用する場合は、先程追加したCSSを書き換えます。
JINアイコンを使う場合は"jin-icon"に変える

.ptimeline-wrap .icon .ptimeline-item .ptimeline-marker:before{
    font-family: "Font Awesome 5 Free";

この”Font Awesome 5 Free”の部分を”jin-icons”に変更してください。

タイムラインのデザインは、ぽんひろ.comでいろいろ紹介されています。

PHPコードを追加する場所

僕もコードが反映されずに悪戦苦闘していたのですが、僕みたいな素人は結構間違えやすい部分だと思うので解説します。
テーマエディターから子テーマにPHPコードを記述子テーマをインストールした人は、JINとjin-childの2種類のテーマがあるかと思います。テーマエディターをいじる時は①jin-childを選択してから②functions.phpをクリックし、PHPコードを記述して③ファイルを更新します。

タイムラインのコードが上部に表示される場合

タイムラインのPHPコードがヘッダー上部に表示されてしまう

PHPコードをfunctions.phpに記述すると、このようにヘッダー上部にPHPコードが表示されてしまう場合があります。

functions.phpに記述した時に正しい場合はコードに色が付きますが、反映されない場合は、コードが黒文字のままです。

文字コードが上部に表示されてしまう原因は、JIN(親テーマ)に記述している場合が多いかと思います。

JINの子テーマをダウンロードし、jin-childのfunction.phpに記述することで改善します。JIN子テーマのダウンロードはこちらから