WordPress のカスタム投稿タイプでスティッキー投稿を可能にするコード

WordPress ではデフォルトの機能で、Sticky posts という記事を固定させる機能がある。しかし、それはカスタム投稿タイプには使えない。それを可能にするプラグインがあるが、ここでは自分で実装させる方法を紹介する。

Seamless Sticky Custom Post Types

Seamless Sticky Custom Post Types というプラグインで可能らしいのでコーディングに興味がない人はそちらを利用すればいいだろう。ただ、もしプラグインに頼りたくないという人は次に紹介する方法を利用してみるのも一つの手だ。

DIY

どういうメカニズムで機能を実装するかというと、カスタム投稿タイプに関連付けられたカスタムタクソノミーの指定したターム(言葉・タグ)が投稿に関連付けられた時に、それを固定記事(スティッキー)として扱うようにする。

なので、まず、カスタム投稿タイプとそれに関連付けが済んでいるカスタムタクソノミーが既に作成されていることを前提とする。まだの人はコーディングするか、 Custom Post Type UI などでも作れる。

用意するもの

準備するのは2つ

  • カスタム投稿タイプのスラッグ
  • カスタムタクソノミー (上の投稿タイプに関連付けられていること)のスラッグ

例えばここでは、note カスタム投稿タイプと note_tag カスタムタクソノミーとして話を進める。スラッグと名称は違うことは確かめて置きたい。例えば静的ページの名称は”ページ”だがプログラム内部でそれを識別するために使用されるスラッグは page となっている。

用意できたら次のコードをテーマの functions.php に放り込む。

PHP コード

使い方

使い方はクラスをインスタンス化するだけ。インスタンス時に、サポートする投稿タイプのスラッグと、タクソノミーのスラッグ、スティッキー扱いするためのタグ名を指定する。

  1. (array) 投稿タイプスラッグ
  2. (array) タクソノミースラッグ => ターム名1, ターム名2, ターム名3, …
  3. (string) タームのスラッグで調べるか名称で調べるか。default: name
  4. (boolean) 2ページ目以降もスティッキー表示させるかどうか。 default: false

上のコードでは何をやっているかというと the_posts フィルターフックで、クエリ結果を編集し、指定した投稿タイプのクエリの場合、スティッキーのタームがついている投稿を取得して、存在する場合はその配列の前方に取得した投稿をインジェクトしている。

後は、上の例に従えば、sticky というターム(タグ)を固定したい記事に付与すればOK。ケースインセンシティブなので、Sticky でも構わない。ちなみに、このサイトの Notes のセクションはこの方法で表示させている。もし、pinned というタームでも固定させたい場合、コンストラクターの 2つ目のパラメーターを次のようにしてあげる。

余談

今回は、途中説明を端折ってできるだけ短くまとめてみた。この方が執筆する方としても楽だ。一応上級のカテゴリーに入れておいたので、わかってる人向けの内容となっている。

Leave a Reply

Your email address will not be published. Required fields are marked *