register_post_type() やプラグインでカスタム投稿タイプを追加する際に見落としやすい注意点など いくつかメモです。
更新情報サービス
「更新情報サービス」(Update Services)てなに? そうですよね。存在自体を忘れがちですが、管理画面の[設定]-[投稿設定]の一番下にあります。新しい投稿を公開したときにサイト更新情報サービスに通知(ping)してくれる機能のことです。
カスタム投稿タイプは、この更新情報サービスがデフォルトで無効になっています。カスタム投稿タイプで投稿した記事は、公開しても ping してくれないということです。
カスタム投稿タイプで ping 通知するための PHP コード
これを有効にするには、以下のコードを functions.php に追加します。
xxxxx 部分は対象のカスタム投稿タイプの投稿タイプ名(register_post_type の第一引数)に置き換えます。
function xxxxx_pings_at_publish( $post_id ) { wp_schedule_single_event( strtotime( '+10 min' ), 'do_pings', array( $post_id ) ); } add_action( 'publish_xxxxx', 'xxxxx_pings_at_publish', 10, 1 );
記事の公開から 10分後以降に ping します。strtotime( ‘+10 min’ ) 部分を time() に変更すると直後になります。なぜ 10分後なのか? とあるサービスに対して直後に ping したら「未来の記事は受け付けねーよ!」て怒られたからです。筆者がレンタルしているサーバーの時計、または先方のサーバーの時計、どちらかが ずれていたのでしょう。
投稿タイプ名にハイフンを使ってはいけない
投稿タイプ名とは、カスタム投稿タイプを登録する register_post_type() 関数の第一引数に指定する名前です。ハイフンを含んだ名前だと様々な問題を引き起こすので、区切り文字には「_」(アンダースコア)を使います。
また、あまりにも一般的な単語のみ(video や image など)は避けるのが無難です。
ただ、SEO を意識するなら URL の区切り文字としてはハイフンが推奨されています。URL の設計は別に考えます。
投稿タイプ名の例
× daily-video(ハイフンは使用しない)
△ video(直感的に避けたい単語)
○ daily_video
○ d_video
スラッグを設定した場合は「パーマリンク設定」を開く
カスタム投稿タイプのスラッグ設定は、WordPress 内部ではリライト ルールの新規追加になります。一度、管理画面の[設定]-[パーマリンク設定]を開かないと有効にならないため注意が必要です。
カスタム投稿タイプを追加するサンプル コードと注釈
カスタム投稿タイプ「d_video」を追加するサンプル コードです。通常はこれらの指定で事足りると思いますので、スニペットとしても利用できると思います。カスタム投稿タイプを管理するプラグインもありますが、細かいカスタマイズをしないなら、プラグインを使うよりもシンプルです。
function add_d_video_post_type() { register_post_type( 'd_video', array( 'label' => '本日の動画', 'public' => true, 'has_archive' => true, 'taxonomies' => array( 'category', 'post_tag' ), 'rewrite' => array( 'slug' => 'daily-video' ), 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields', 'trackbacks' ), ) ); } add_action( 'init', 'add_d_video_post_type' );
label
サイトの閲覧者に対するカスタム投稿タイプの名称です。WordPress の設定にもよりますが、ページ タイトルなど SEO 的に大事な部分にも使用されるので慎重に決めます。
taxonomies
デフォルトのカテゴリとタグを使うことを指定しています。
rewrite
URL 構造の指定です。やはり これも、SEO を意識した設定をすべきです。これを指定しないと、投稿タイプ名が URL にも使用されます。また、既存の URL と重複しないように注意が必要です。
その他、詳しい説明は以下の公式ドキュメントをご参照ください。
- 関数リファレンス/register post type – WordPress Codex 日本語版
- Function Reference/register post type « WordPress Codex(英語)
カスタム投稿タイプの URL 構造
上記のコードで追加したカスタム投稿タイプの記事スラッグ「post-slug」の URL 構造は以下になります。
(パーマリンク設定が「投稿名」の場合)
//example.com/daily-video/post-slug/
つまり、has_archive を true にすることで、新しいサブディレクトリを作成できます。新しいサブディレクトリを作成して記事を投稿するにはどうすればよいでしょうか? の逆引き的な回答がここに。
カスタム投稿タイプのテンプレート
//example.com/daily-video/ のテンプレートは archive.php(存在しなければ index.php)が使われます。archive-d_video.php を用意すれば独自のテンプレートを使えます。記事ページのテンプレートも同様に、デフォルトでは single.php が使われますが、single-d_video.php を用意すれば自動的に使用されます。
参考サイト
カスタム投稿タイプついての良さげな記事です。
- WordPressテーマの作り方 » カスタム投稿タイプを作成する
- カスタム投稿タイプとカスタムタクソノミーまとめ
- WordPressのカスタム投稿タイプの使い方が初心者でも超わかる記事10選 – ネタワン
あとがき
カスタム投稿タイプを使うとき、事前に知っておきたかったよね… と筆者が思ったことを中心にまとめてみました。きっと どなたかのお役に立つことでしょう。
ご紹介いただきありがとうございます。取り急ぎ☆