ど素人から毛を生やす。<延>

1つの投稿から2つのURLとテンプレートで出力する・改

Web > WordPress 2014年11月6日(最終更新:2年前)

このページは2014.11.6に作成されています。時代の流れとそぐわない可能性があったり、僕が今以上のど素人だった頃の記事だったりするので、新しい記事を探してみるのも良いかもしれません。

どもです。

いつぞや書いた記事の改良版を出しておきます。

 

企業サイト等で、全ページWordPressで作られていない場合。
/sp/とかその辺のディレクトリ名でスマホサイトを構築することがよくありますね。

あるいは、英語サイトを作る場合。
これも/en/とかその辺のサブディレクトリを作ってサイト構築することがあるでしょう。

このとき、WordPressのURLを/sp/blog/とか、/en/blog/とか綺麗な流れで放出したい。
そんなときに使うのが、今回の改造です。

カスタム投稿を使わない場合

add_rewrite_rule('sp/date/([^/]+)/([^/]+)/?$', 'index.php?year=$matches[1]&monthnum=$matches[2]&sp', 'top');
add_rewrite_rule('sp/([^/]+)/([^/]+)/page/([0-9]+)/?$', 'index.php?category_name=$matches[1]%2F$matches[2]&paged=$matches[3]&sp', 'top');
add_rewrite_rule('sp/([^/]+)/page/([0-9]+)/?$', 'index.php?category_name=$matches[1]%2F&paged=$matches[2]', 'top');
add_rewrite_rule('sp/([^/]+)/?$', 'index.php?category_name=$matches[1]&sp', 'top');
add_rewrite_rule('sp/([^/]+)/([^/]+)/?$', 'index.php?category_name=$matches[1]%2F$matches[2]&sp', 'top');
add_rewrite_rule('sp/([^/]+)/([^/]+)/([^/]+)/?$', 'index.php?category_name=$matches[1]%2F$matches[2]&p=$matches[3]&page=&sp', 'top');

remove_filter('template_redirect', 'redirect_canonical');

上述のコードを、functions.phpに記載します。
やっていることは、当サイトではお馴染みのリライトルール弄りです。
(リライトルールについては昔の記事参照で)

([^/]+)  は、半角スラッシュ以外の全ての文字、
([0-9]+) は、0-9の数字の繰り返しを指します。

また、$matches[1]の意味は、左の式で指定した自由記述の部分を代入する、という感じです。
数値はその順番を指します。

よって、

add_rewrite_rule('sp/([^/]+)/([^/]+)/page/([0-9]+)/?$', 'index.php?category_name=$matches[1]%2F$matches[2]&paged=$matches[3]&sp', 'top');

の意味は、

[sp/(何でも良い①)/(何でも良い②)/page/(半角数字)]→[カテゴリ名=(何でも良い①)>(何でも良い②)の一覧の(半角数字)ページ目]

です。
孫カテゴリ以上が想定される場合、上の法則に従って項目を増やします。

カスタム投稿を使う場合

add_rewrite_rule('en/カスタム投稿名(半角)/([0-9]+)/?$', 'index.php?post_type=カスタム投稿名(半角)&slug=カスタム投稿名(半角)&p=$matches[1]&page&en', 'top');
add_rewrite_rule('en/カスタム投稿名(半角)/page/([0-9]+)/?$', 'index.php?post_type=カスタム投稿名(半角)&slug=カスタム投稿名(半角)&paged=$matches[1]&en', 'top');
add_rewrite_rule('en/タクソノミー名(半角)/([^/]+)/page/([0-9]+)/?$', 'index.php?タクソノミー名(半角)=$matches[1]&paged=$matches[2]&en', 'top');
add_rewrite_rule('en/タクソノミー名(半角)/([^/]+)/?$', 'index.php?タクソノミー名(半角)=$matches[1]&en', 'top');
add_rewrite_rule('en/カスタム投稿名(半角)/?$', 'index.php?post_type=カスタム投稿名(半角)&en', 'top');

remove_filter('template_redirect', 'redirect_canonical');

このとき、singleのパーマリンクは「カスタム投稿名/id」です。
左の式が被れば当然バグが起きるので、パーマリンクはIDにしておくのが最も安全です。

テンプレートの記述

<?php
$data = $_SERVER["REQUEST_URI"]; list($domain,$dir_01) = explode("/",$data);
if( $dir_01 == 'en' ): get_template_part('/en/有のときのテンプレート');
else: get_template_part('/en/なしのときのテンプレート');
endif;
?>

これを各categoryやsingleテンプレートに記載します。

URLを取得し、ドメインの次の部分が/en/か否かでifをかけています。
ifをかけたい部分がもっと下の階層であるなら、list($domain,$dir_01)の部分をlist($domain,$dir_01,$dir_02)といった形で増やし、if( $dir_02 == などでifをかけます。

注意事項!

リライトルールに関する設定・変更を行ったら、すぐにパーマリンク設定の空更新を行ってください!
僕はそれを忘れて一時間以上作業を停滞させたことがあります(´・ω・`)

また、リライトルールは上に書いたものが優先されます
上手く表示されないときは、リライトルール追加の順番を確認してください。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった  (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (1)