この記事は最後に更新してから1年以上経過しています。

固定ページのURLの拡張子をhtmlに変更する

説明

固定ページについて、URLを静的ページっぽく拡張子htmlに変更したいという要望を受けることがある。これまでは「.html on PAGES」というプラグインを使っていて特に不満があったわけではないのだが、今回ひょんなことから簡単に対応できることがわかったので、メモ書きしておく。

きっかけとなったのは、カスタム投稿タイプのパーマリンク設定について調べている際にwp-includes/rewrite.phpをナナメ読みしている中、$wp_rewriteのget_page_permastructメソッドを見つけたあたり。さっそく自テーマのfunctions.phpにinitアクションを追加し、試したところあっけなく動作しました。コードは次の通り('mytheme'の部分はお好みで変更を)。

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 );
	}
}

ポイントは flush_rewrite_rules関数の呼び出し。これは1度だけ呼び出せばいいので、ここではコメント化している。また、管理ページの「設定」-「パーマリンク設定」にアクセスして、そのまま「変更を保存」ボタンを押すことで同様の効果があるので、どちらかの対応を選んでほしい。

なお、ここでは単に拡張子をhtmlにしているだけだが、例えばaboutのようなディレクトリ以下のページのようにすることも可能である。

$wp_rewrite->page_structure = $wp_rewrite->root . 'about/%pagename%.html';

スラッグが'about'の親ページ作っても対応できるのだが、こちらは応用例として紹介しておく。

追記)use_trailing_slashesプロパティの値がtrueの場合、URLの末尾に'/'が付与される場合がある。パーマリンク設定によってuse_trailing_slashesプロパティの値がfalseになる場合があるが、常に'/'をつけたくない場合は意図的にfalseを設定すること。


最終更新 : 2013年03月09日 00:22


お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。