テーマカスタマイズ

【Shopifyテーマカスタマイズ】お知らせ一覧の作成

Liquidを使用したお知らせ一覧の表示方法を解説します。

今回作成するお知らせ一覧は下記のようなシンプルな作りで、最新記事を3件表示する形になります。

※デモページは開発ストアのため、パスワードの入力が必要です。
パスワード:test

事前準備

ブログ記事を作成する

Shopifyの管理画面からブログ記事の作成をします。

管理画面のサイドメニューからオンラインストア>ブログ記事>ブログ記事を追加する と進みます。

ブログのハンドル名を取得する

Liquidで記事を表示させるために、ブログのハンドル名が必要になります。

オンラインストア>ブログ記事>ブログを管理する と進みます。

表示させるブログを選択します。

「ウェブサイトのSEOを編集する」を選択します。

URLとハンドルが表示されるので、ハンドル部分をメモしておきます。(青いハイライト部分)

コード解説

Liquid

<div class="news_area">
  <h2>お知らせ</h2>
  <ul class="news_list">
    {% for article in blogs['news'].articles limit:3 %}
      <li>
        <a href="{{article.url}}">
          <dl>
            <dt>{{article.published_at | date: '%Y年%-m月%-d日'}}</dt>
            <dd>{{article.title}}</dd>
          </dl>
        </a>
      </li>
    {% endfor %}
  </ul>
</div>

4行目:{% for article in blogs[‘news’].articles limit:3 %}
blogs[‘news].articles の’news’部分は事前準備で取得したブログのハンドル名を記入します。
取得したブログ記事の一覧がfor文でarticle 変数(変数名は自由)に代入され、for文内で参照することができます。
limit:3 で表示数の調整が可能です。全記事を表示したい場合は何も記入しません。

6、8、9行目:{{article.○○}}
4行目の変数にブログ記事の情報が代入されているので、そこから個別の情報を取り出していきます。

Shopifyの公式リファレンスにarticleオブジェクトで取り出せる情報の一覧が載っていますので、そちらも参考にしてみてください。

CSS

ul {
  padding: 0;
  li {
    list-style: none;
  }
}
a {
  text-decoration: none;
  color: #000;
}

.news_area {
  width: 800px;
  max-width: 89.33%;
  margin: 0 auto;
  h2 {
    text-align: center;
    font-size: 30px;
    font-weight: 400;
    margin: 0;
  }
  .news_list {
    margin-top: 38px;
    li {
      border-top: 1px solid #ddd;
      &:last-child {
        border-bottom: 1px solid #ddd;
      }
      a {
        display: block;
        padding: 20px 10px 13px 0;
        dl {
          display: flex;
          margin: 0;
          color: #1e1916;
          dt {
            width: 155px;
            font-size: 14px;
            letter-spacing: 0.12em;
          }
          dd {
            width: 100%;
            margin-left: 18px;
          }
        }
        &:hover {
          opacity: 0.75;
          dd {
            text-decoration: underline;
          }
        }
      }
    }
  }
}
@media screen and (max-width: 767px) {
  .news_area {
    h2 {
      font-size: 24px;
    }
    .news_list {
      margin-top: 16px;
      li {
        a {
          padding: 14px 0px 18px;
          dl {
            display: block;
            dt {
              width: 100%;
              font-size: 12px;
            }
            dd {
              margin-left: 0;
              margin-top: 3px;
            }
          }
        }
      }
    }
  }
}