東京のWeb制作会社LIGLIGならできるおもしろいこと。バックエンドシェアこんにちは。WordPressのカスタム投稿タイプの詳細ページをIDベースにしたいときありますよね。そんな風にURLをコントロールする方法を、カスタム投稿タイプを作るときに使う、register_post_type関数の中身を見ながら、再確認したいと思います。目次カスタム投稿タイプの登録リライトルールについてIDベースのURLへの変更カスタム投稿タイプの登録まずは、概要です。$post_type_object;}一つ目の引数にカスタム投稿タイプ名、二つ目の引数にその内容を配列で指定する形です。配列のサニタイズや、投稿タイプ名の制限チェックなどを経て、次が実行されます。);カスタム投稿タイプ登録用のインスタンスを作成します。コンストラクタでは、与えられた引数を、WP_Post_Type::set_props()で整えながらプロパティにセットしていきます。$post_type_object->add_supports();投稿画面でどの機能をサポートするかどうかを設定します。初期値は「title」と「editor」になります。タイトルと本文ですね。「title」だけ指定すればタイトルだけの投稿画面にすることができます。$post_type_object->add_rewrite_rules();お待ちかねのリライトルールがここで登場です。$post_type_object->register_meta_boxes();投稿画面のメタボックス用のアクションフックとして呼び出す関数を登録します。$post_type_object->register_taxonomies();グローバル変数に登録して、予約投稿用のフックに追加し、カスタム分類との関連づけを行います。add_rewrite_rules()の部分を見ます。リライトルールについて前提として、WordPressは下記のようなURLが本来の記事詳細ページのURLです。index.php?p=1234それをパーマリンク設定によっては、/archives/1234のようなURLで動作させることができるのですが、これはどういうことかというと、/book/1234というリクエストがあったら、それをindex.php?p=1234に置き換えるようになっているからです。これがリライトルールです。このリライトルールをコントロールすることによって自由なURLを設定することができるようになり、カスタム投稿タイプが作成するURLも、この仕組みを利用しています。それでは、見てみましょう。}まずは「%book%」のようなカスタム投稿名を冠するリライトタグを登録しています。これはパーマリンク設定画面で見ることのできる「%post_id%」や「%postname%」のようなものです。これは、それを示すURLがどのような構成かを指定します。);bookというカスタム投稿だとすると、「%book%」は、「([^/]+)」という正規表現に合致し、それは、「book=」もしくは「post_type=book&pagename=」に置き換えられるということになります。下記により、URLの構造を登録しています。);これは「/book/%book%」というURL構造になります。いうように置き換えられることになります。「/book/foo」というURLがリクエストされた場合は、index.php?post_type=book&name=fooになり、投稿タイプ「book」の中からfooというslugを持つ記事を抽出するというメインクエリーが発行されることになります。真ん中の部分は一覧ページのURLのコントロールについてなので今回は割愛します。オプションを指定することにより、IDベースに置き換えることは、今現在はできません。他の方法でIDベースのURLにできるようにします。IDベースのURLへの変更register_post_type()関数実行時の最後に設定されているregistered_post_typeというアクションフックがあります。ここで、add_rewrite_tagを変更してみてはどうでしょうか。いうURL構造を作成しました。置き換えてくれるようになります。これだけでIDベースのURLでアクセスできるようになります。一つ、記事のパーマリンクはまだ作成されていませんので、これも上記のルールになるようにします。post_type_linkというフィルターフックを使います。4);これで、get_permalink()のURLもIDベースのURLになります。URLのコントロールも仕組みを理解しておくといろいろできますね。POSTLIGへの自由なメッセージお待ちしています頂いたご意見への回答は行っておりません。