読者です 読者をやめる 読者になる 読者になる

世界が変わったのだから、自分も変わらなくてはならない。

エンジニア兼デザイナーのナカモリのブログです。

【WordPress】マルチサイトで固定ページ → タクソノミー(カテゴリ)一覧 → カスタム投稿タイプの記事という画面遷移にしたい

WordPress Webデザイン

f:id:takahironakamori:20160322232808p:plain

今日はWordPressでやりたいことについての実現方法を考えていて、はまってしまった1日でした。

今回考えたWordPressでやりたいことは次のとおりです。

前提:ウェブサイトのルートは自動リンク防止のため「h_ttp://www.hogehoge.jp/」とします。

 

【希望その1】WordPressは専用ディレクトリに配置したい

例えば、ウェブサイトのルートは「h_ttp://www.hogehoge.jp/」ですが、WordPressは「h_ttp://www.hogehoge.jp/admin/」内に設置したい。

 

【希望その2】マルチサイトにしたい

例えば、「h_ttp://www.hogehoge.jp/」と「h_ttp://www.hogehoge.jp/sub/」でマルチサイトでWordPressを使いたい。

 

【希望その3】マルチサイトのうちの1つにカスタム投稿を2つ加えたい

例えば、「h_ttp://www.hogehoge.jp/sub/」には「book」と「food」というカスタム投稿タイプを加えたい。

 

【希望その4】希望その3で加えたカスタム投稿にもカテゴリが欲しい

例えば、「book」には「小説(novel)」や「コミック(comic)」など、「food」には「肉(meat)」や「魚(fish)」などのカテゴリを加えたい。
※カテゴリは1つしか指定しない。

 

【希望その5】希望その4に関連して画面遷移を固定ページ → タクソノミー(カテゴリ)一覧 → カスタム投稿の記事という流れにしたい

例えば、
(1)「h_ttp://www.hogehoge.jp/sub/book/」は固定ページ
(2)「h_ttp://www.hogehoge.jp/sub/book/novel/」はカテゴリ一覧ページ
(3)「h_ttp://www.hogehoge.jp/sub/book/novel/sampleBook/」はある小説を紹介するカスタム投稿ページ
としたい。
sampleBookの階層が最下層になります。

 

上記の1〜5までのことをプラグインを使わずにできるか?という確認作業をしていました。

今のところの結論は「なんとかできそう」です。

以下は、どう実現しているのかの記録です。

【希望その1】WordPressは専用ディレクトリに配置したい

これはWordPress Codex 日本語版に解説がありますので、それに従えばいいです。

WordPress を専用ディレクトリに配置する - WordPress Codex 日本語版

 

【希望その2】マルチサイトにしたい

これもWordPress Codex 日本語版に解説がありますので、それに従えばいいです。

ネットワークの作成 - WordPress Codex 日本語版

 

【希望その3】マルチサイトのうちの1つにカスタム投稿を2つ加えたい

カスタム投稿タイプとは通常の記事の投稿や管理を切り分けしたいときや体裁が異なる記事を投稿・管理したいときに用いられる機能です。
function.phpに下記のようなコードを追加すると、カスタム投稿タイプが追加されます。

カスタム投稿タイプを追加する

設定できる項目はまだたくさんあります。

関数リファレンス/register post type - WordPress Codex 日本語版

 

【希望その4】希望その3で加えたカスタム投稿にもカテゴリが欲しい

ここでいう「カテゴリ」は「タクソノミー」と呼びます。
タクソノミーを追加するには、function.phpに下記ようなコードを追加します。

カスタム投稿タイプにタクソノミーを追加する

これも設定できる項目がたくさんあります。

関数リファレンス/register taxonomy - WordPress Codex 日本語版

 

【希望その5】希望その4に関連して固定ページ → カテゴリ一覧 → カスタム投稿の記事という画面遷移にしたい

(1)「h_ttp://www.hogehoge.jp/sub/book/」は固定ページ
これは固定ページを作って、パーマリンクを指定すればOKです。

(2)「h_ttp://www.hogehoge.jp/sub/book/novel/」はカテゴリ一覧ページ
(3)「h_ttp://www.hogehoge.jp/sub/book/novel/sampleBook/」はある小説を紹介するカスタム投稿ページ
上記の2つを実現するために、上記のカスタム投稿とタクソノミーの設定を1つの関数にまとめて、その関数の中にrewriteルールを加えています。

カスタム投稿タイプとタクソノミー、rewriteルール追加をまとめた関数

また、上記のコードではタクソノミーをURLに組み込むために、%book-cat%というリライトタグを使っています(27行目と56,57行目)。

59,60行目ではbook/novel/samplebook/ でsamplebookのカスタム投稿記事ページが表示されるようrewriteツールを、
62,63行目ではbook/novel/ でnovel一覧ページが表示されるようrewriteツールを加えています。

さらに%book-cat%をカスタム投稿記事内で指定したタクソノミーが表示されるよう置き換える関数を作成します。

%book-cat%を置き換える関数

タクソノミーの一覧ページのテンプレートは、archive-{カスタム投稿名}.php(例:archive-post_type_book.php)で作成します。

 

最後に

function.phpを編集、特にrewriteルールを変更した場合は、function.phpをアップロードしてから管理画面のパーマリンク設定を保存しなおす作業をした方がいいです。
保存しなおさないと想定どおりに動かない場合が何度かありました。

今回は、結局、rewriteルールを個別で作るというねじ込み感がありました、なんとか実現できそうでよかったです。