WordPress で投稿タイプ別にデフォルトの投稿フォーマットを設定する

ツイッターのような感じで気軽に短い文章を投稿できるようにカスタム投稿タイプを使ってあれこれ WordPress をいじくっていたのだけど、カスタム投稿タイプのデフォルトの投稿フォーマットが設定できない。WordPress には投稿フォーマットという機能があり、記事の種類を決めることができる。スタンダード、引用だとか、画像だとかで、テーマ側がサポートしていれば表示形式にバリエーションを持たせることができる。しかし、WordPress そのままの機能だと、このデフォルトの投稿フォーマットの設定がカスタム投稿タイプごとに設定できない。そのため、これを解決するためにコードを書いた。

全体設定

全体のデフォルトの投稿フォーマットは簡単に変更できる。Dashboard -> Settings -> Writing から、Default Post Format のオプションを変更すれば良い。

しかし、これをカスタム投稿タイプ毎に設定したい。

解決方法

今回やりたいことは、option_{オプションキー名} フィルターフックを使えば可能。この場合、default_post_format というオプションのキーになる。このオプションのキー名の探し方は、ブラウザの Inspect Element (要素の上で右クリック) を使って調べる。select インプットの name アトリビュートの値がそうだ。

で、WordPerss 側で、このデフォルトの値を取りに来た時に、投稿タイプを調べて、予め決めておいたものを返せば良い。

コード

ささっと、クラスを書いた。

使い方

テーマの functions.php に放り込むことを想定している。使い方はクラスをインスタンス化するだけ。

その際に、要望の投稿タイプとそのデフォルトの投稿フォーマットを指定した配列を渡してあげる。上の例では note という投稿タイプのスラッグの場合 aside という投稿フォーマットにしてね、ということになっている。

指定できる投稿フォーマットは次の通り。

  • aside
  • gallery
  • link
  • image
  • quote
  • standard
  • video
  • audio

結果

うまくいくと、記事公開直後に、同編集画面から Document -> Post Format を確認すれば希望したフォーマットが保存されていることがわかる。

note カスタム投稿タイプの場合
普通の post 投稿タイプの場合

Leave a Reply

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