【WP】拡張子を「.html」にしたい時の対処法

WordPressでサイトを固定ページを作成すると、基本的に「ドメイン/スラッグ/(index.php)」になります。
今回はリニューアル時に、「現状URLを変更したくない」と言うご要望を受け、現状URLである「.html」に変更できるか、
色々調べてみました。

まず、結論は、ほぼできそうです!
方法は色々あるのですが、今回の要望にベストな解決方法は、今のところ1つでした。
場合によって要望が異なると思うので、調べた結果をメモしておきます。

今回したいこと

現状URLを維持したサイトをWordPressを使って作りたい。
具体的には、固定ページで、ページを作成し、固定ページのURLを次のようにしたい。

理想のURL

固定ページ
(親)「会社概要」・・・・・・・/company/(index.html)
  (子)「社長挨拶」・・・・・/company/message.html
  (子)「沿革」・・・・・・・/company/history.html
  (子)「事務所一覧」・・・・/company/office/(index.html)
    (孫)「東京本社」・・・/company/office/tokyo.html
    (孫)「大阪営業所」・・/company/office/osaka.html

ちなみに普通にWordPressの固定ページで作成すると、URLは次のようになるかと思います。

WordPressデフォルト設定URL

固定ページ
(親)「会社概要」・・・・・・・/company/(index.php)
  (子)「社長挨拶」・・・・・/company/message/(index.php)
  (子)「沿革」・・・・・・・/company/history/(index.php)
  (子)「事務所一覧」・・・・/company/office/(index.php)
    (孫)「東京本社」・・・/company/office/tokyo/(index.php)
    (孫)「大阪営業所」・・/company/office/osaka/(index.php)

解決方法(案1)「function.phpでカスタマイズ」

以下の記事を参考に、プラグインを使用せず、固定ページのURLの拡張子を「.html」にすることができました。
情報をありがとうございます!

固定ページのURLの拡張子をhtmlに変更する:WordPress私的マニュアル

function.phpにて、次のように設定

add_action( 'init', 'mytheme_init' );
	if ( ! function_exists( 'mytheme_init' ) ) {
		function mytheme_init() {
	global $wp_rewrite;
	$wp_rewrite->use_trailing_slashes = false;
	$wp_rewrite->page_structure = $wp_rewrite->root . '%pagename%.html';
	flush_rewrite_rules( false );
	}
}

しかし、この設定の場合、親ページも「.html」になってしまいました。

反映結果

固定ページ
(親)「会社概要」・・・・・・・/company.html
  (子)「社長挨拶」・・・・・/company/message.html
  (子)「沿革」・・・・・・・/company/history.html
  (子)「事務所一覧」・・・・/company/office.html
    (孫)「東京本社」・・・/company/office/tokyo.html
    (孫)「大阪営業所」・・/company/office/osaka.html

非常に惜しい感じです。。これでOKな場合もあると思いますが、今回の理想とは異なったので
他の方法も探してみました。

解決方法(案2)プラグイン「.html on PAGES」を活用

次に、WordPressプラグイン「.html on PAGES」を活用してみました。
プラグインのインストールのみで使用できて良かったのですが、結果は「案1」と全く同じ状態でした(汗)

反映結果

固定ページ
(親)「会社概要」・・・・・・・/company.html
  (子)「社長挨拶」・・・・・/company/message.html
  (子)「沿革」・・・・・・・/company/history.html
  (子)「事務所一覧」・・・・/company/office.html
    (孫)「東京本社」・・・/company/office/tokyo.html
    (孫)「大阪営業所」・・/company/office/osaka.html

解決方法(案3)プラグイン「Improved Page Permalinks」を活用

これで、ほぼ理想的な階層を作ることができました!

2016/2/24 追記

WP 4.2から、非対応のようです。。

反映結果

固定ページ
(親)「会社概要」・・・・・・・/company/(index.php)
  (子)「社長挨拶」・・・・・/company/message.html
  (子)「沿革」・・・・・・・/company/history.html
  (子)「事務所一覧」・・・・/company/office/(index.php)
    (孫)「東京本社」・・・/company/office/tokyo.html
    (孫)「大阪営業所」・・/company/office/osaka.html

惜しいのは、下階層がある場合に「/company/index.html」にならず、「/company/index.php」のままということです。
「/company/」ではちゃんと表示されているので、ほぼOKだと思います。
後はサーバー側の設定で「index.html」=「index.php」と認識してもらえたら問題ないかと思います。

プラグイン「Improved Page Permalinks」の良いところは、もう一つありました。
下階層がない場合でも「/company/message.html」ではなく「/company/message/」にする選択ができる点です。
選択は個別ページ毎に設定でき、チェックの有無だけで切り替えることができるのでとても便利です。

解決方法(案4)プラグイン「Custom Permalinks」を活用

こちらのプラグインでは、パーマリンクの設定をページ毎に自由に変更することができます。
どのくらい自由かというと、ドメイン以下の部分は階層、拡張子含めて全て変更できます。

変更方法は、個別ページのパーマリンクのドメイン以下が編集できるようになっているので、
変更したいパスに変えて保存するのみです。
変更前のパーマリンクのパスも表示されており、変更しなければデフォルトのパスで公開されます。

ただ、一括で拡張子を「.html」に変更する方法はプラグインそのままではなさそうで、
今回の場合だと全ての記事を手動で「.html」つきに変更していかないといけないっぽいです(汗)

なので、今回は「案3」を主に活用し、場合によっては「案4」も活用する方向で行きたいと思います。

また別途「.html」にする良さそうな方法が見つかりましたら、メモを更新したいと思います。

コメント

  1. のんちゃん より:

    「Improved Page Permalinks」を入れて有効化し、記事の編集画面で.htmlをつけてみて、ちゃんとついたのですが、実際にそのページを見てみると404 Not Foundになってしまいます・・・。
    なぜでしょう・・。

    • hiyo より:

      コメントをありがとうございます!

      私も今年の1月に「Improved Page Permalinks」が使えないことを確認致しました。
      残念ですが、新しいWPのバージョンに対応していないようです。。。

タイトルとURLをコピーしました