chlonolog

web, digital gadgets, and more.

表示したくないポストを一覧から除外する

「インデックスページに表示したくないエントリ」ってありませんか?
うちの場合は「TATEditorで小説同人誌の入稿用PDFを作ろう」の2ページ目以降がそれにあたります。疑似的にページを分割しているので、2ページ目以降も普通のページ扱いなのですが、一覧からはたどってほしくないんですよね。

プラグインでなんとかなるじゃない

そういった希望を叶えるために前はテンプレートでごにょごにょしていたのですが、どうにも面倒くさい。
ということで、今回はプラグインhexo-generator-index2を使用しました。

導入方法

npm uninstall hexo-generator-index
npm install hexo-generator-index2 --save-dev

_config.ymlの記述方法

ルートの_config.ymlに

index2_include_index: true
index2_generator:
  - layout: 'index'
    path: ''
    index: true
    per_page: 10
    order_by: -date
    exclude:
      - tag 子ページ # 除外したい条件

と書くと、インデックスページから指定した条件を除外してくれます。この場合は、タグに「子ページ」が指定されているエントリを一覧に表示しません。

除外だけじゃない、便利な使い方

ちなみにこのプラグインは除外だけでなく、表示するエントリのフィルタリングも可能です。

  - layout: 'archive-index' # 独自のテンプレート
    path: 'category/web'    # ページのパス
    per_page: 0             # 「0」でページングしない
    order_by: -date         # 日付順
    include:                # 表示したい条件
      - category web制作
    exclude:                # 除外したい条件
      - tag 子ページ

これでカテゴリ「web制作」だけを表示するページ「category/web/」を、独自のテンプレート「archive-index」で表示できます。ページングは使用せず、全エントリを表示します。
なんともお手軽ですね。

純正ヘルパーを使うと表示されちゃうよね?

list_tags()tagcloud()といったHexo純正のヘルパーを使えば、普通に表示されてしまいます。まあ当然ですよね。
この辺はSASS側で

.menu-list
  &[href*='child-page'] // タグ「子ページ」のスラッグ
    display: none

と強引に非表示にしました。

除外しているのがタグではなくカテゴリだった場合も、同様の方法で対処できます。
ソースを見ればたどれちゃうんですが、そこまでして見るようなものではないし、やられたところで動線が少々残念なことになるだけなので、深く気にしないことにしました。

コメント

© 2018 chlono