まずまずの頻度である「記事に.hmltをつけたい!」という要望。
投稿だけを使うならパーマリンク設定でOK!だが、カスタム投稿タイプの場合は出来ない。
便利なプラグインもあるのだが、
http://wordpress.org/plugins/custom-post-type-permalinks/
テーマに組み込めないか調べてみたところ、こんな記事を見つけられたのでメモ。
http://wordpress.stackexchange.com/questions/59024/add-html-dot-html-extension-to-custom-post-types
1. rewrite_rules_array フィルターにcustom post type分のrewrite ruleを追加。
add_action('rewrite_rules_array', 'rewrite_rules'); function rewrite_rules($rules) { $new_rules = array(); foreach (get_post_types() as $t) $new_rules[$t . '/(.+?)\.html$'] = 'index.php?post_type=' . $t . '&name=$matches[1]'; return $new_rules + $rules; }
2. custom post type でのURLフォーマットを指定。 post_type_linkフィルターを利用。
add_filter('post_type_link', 'custom_post_permalink'); // for cpt post_type_link (rather than post_link) function custom_post_permalink ($post_link) { global $post; $type = get_post_type($post->ID); return home_url() . '/' . $type . '/' . $post->post_name . '.html'; }
3. redirect_canonical でリダイレクト先のURL最後のスラッシュを削除する。
add_filter('redirect_canonical', 'remove_redirect_canonical'); function remove_redirect_canonical($redirect_url) { return false; }
追記:
スラッグじゃなくIDがいい場合は、下のように投稿の編集時にスラッグを変更して、上の処理を行えばOK.
function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) { global $post; return 'post' . $slug; } add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4 );
これで、domain.com/post-type/post00.htmlのようなURLの完成。
追記 131105:固定ページの場合。
固定ページにhtmlを付けたい場合は、便利なプラグインもあるが、下の記述のみでOK。
add_action( 'init', '_add_html_on_page' ); if ( ! function_exists( '_add_html_on_page' ) ) { function _add_html_on_page() { global $wp_rewrite; $wp_rewrite->use_trailing_slashes = false; $wp_rewrite->page_structure = $wp_rewrite->root . '%pagename%.html'; // flush_rewrite_rules( false ); } }
としてやれば固定ページのみに反映される。