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

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

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

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

どもです。
携帯機でぷよぷよをやりたいと思いぷよぷよテトリスを買ったら、テトリスが難しすぎて
詰みゲーになりかけてる餅。です。

シナリオモードがテトリスの度に数時間ストップします(´・ω・`)

それはともかくWordPress。

今回の案件は、
「商品一覧(カスタム投稿)を英語サイトにも表示されるようにしたい」です。

英語サイト用テンプレートに出力しなければならないので、テンプレートの頭で
クエリストリングを読み込むようにして…と思ったのですが、

ドメイン/en/product/ が理想だが、クエリストリングだけだと ドメイン/product/○○?en

これは……、ちょっとなぁ。
美しくないよなぁ……(´・ω・`)

というわけで、URLもきちんと/en/product/になるようにしようではありませんか。

add_rewrite_rule('en/カスタム投稿名(半角)/([0-9]+)/?$', 'index.php?post_type=カスタム投稿名(半角)&slug=カスタム投稿名(半角)&p=$matches[1]&page&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');

まとめてfunctionに投下すればおk。

以前、URLからtaxonomyを消すのに使った、リライトルールの追加です。
上から、single、taxonomy、カスタム投稿トップページのリライトで、一番下のは
singleを表示するために必要(全ての場合に必要か不明だが僕が今回手がけた環境では
必要だった)な、リダイレクトを拒否する命令です。

また、singleとtaxonomyのパーマリンクについては、
singleは「/カスタム投稿名/投稿ID」
taxonomyは「/カスタム投稿名/term」
に、それぞれなっています。
これと異なる設定をしたい場合は、カンマの左側を修正します。
但し、左側を設定が被ってしまうと、当然ながらバグるので注意です。

これで、異なるURLで同じページを吐き出すことができました。
とはいえ、このままでは使用するテンプレートも同じなので、テンプレートにPHPをひとつ噛ませてURLによって異なるテンプレートを読み込むようにします。

<?php
$data = $_SERVER["REQUEST_URI"]; list($domain,$dir_01) = explode("/",$data);
if( $dir_01 == 'en' ): get_template_part('英語サイトのテンプレート');
else: get_template_part('日本語サイトのテンプレート');
endif;
?>

URLを取得、URLが「ドメイン/en/...」である場合とそうでない場合でifをかけます。

これでおkです。(゚∀゚)

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