web-dev-qa-db-ja.com

カスタム投稿タイプに.html(ドットHTML)拡張子を追加する

カスタム投稿タイププラグインなし.html拡張子を追加する方法はありますか?

投稿については、私はパーマリンクの設定に/%postname.htmlを使用することができます

私が使用できるページの場合:

add_action('init', 'change_page_permalink', -1);
function change_page_permalink() {
    global $wp_rewrite;
    if ( strstr($wp_rewrite->get_page_permastruct(), '.html') != '.html' ) 
        $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}

カスタム投稿タイプの場合

カスタム投稿タイプのURLに.htmlを変更または追加するように要求する上記のようなコードはありますか。

9
user983248

これはうまくいくようです:

post-type/post-name.htmlのような書き換え規則を作成します。配列を使用して、すべての投稿タイプに対してルールを作成するのではなく、一連の投稿タイプに対してルールを作成できます。

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

これらの投稿タイプ用に新しいパーマリンク構造をフォーマットします。

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

そして、末尾のスラッシュを削除するために正規URLのリダイレクトをやめます。たいていの場合リダイレクトを維持したいと思うかもしれないのでこれにはもう少し作業が必要かもしれません。

add_filter( 'redirect_canonical', '__return_false' );

他の人がこのあたりで言ったように、上記のことをした後にあなたはルールをフラッシュする必要があります、そしてそれはoptions-permalink.phpDashboard -> Settings -> Permalinks adminページを訪問することによって可能です。

7
vmassuchetto

あなたは組み込みのパーマリンクを置き換えるこのための書き換え規則を追加することができます。カスタム投稿タイプ "product"の場合...

add_action('init', 'add_html_ext_to_custom_post_types');
function add_html_ext_to_custom_post_types() {
    add_rewrite_rule('^product/([^/]+)\.html', 'index.php?product=$matches[1]', 'top');
}

(上記の@toschoのメモのように、パーマリンクを再保存するかflush_rulesを使用して、ルールをフラッシュすることを忘れないでください)。

注意事項

  • 私はthe_permalink()のような関数がこれを使うとは思わないので、これらのリンクを捉えるためにpost_linkのためのフィルタを追加しなければならないかもしれません。デフォルトのパーマリンクをリダイレクトするためにredirect_canonicalフィルタを追加して、/ product/fooと/ product/foo /を/product/foo.htmlにリダイレクトすることもできます。
  • フィードURL、後続のページ、トラックバックなど、サイトで使用されている他のURLの書き換えを追加する必要があります。上記のコードは、メインのカスタム投稿タイプページでのみ機能します。
4
Matthew Boynes

WordPressプラグインを使って作業を進めたい場合は、WordPressプラグインリポジトリの カスタム投稿タイプパーマリンク をご覧ください。 WordPress 3.4.1でテストされ、それは完璧に動作します。

プラグインを有効にした後、Dashboard - > Settings - > Permalinksに移動してください。登録したカスタム投稿タイプごとに特定の書き換えを追加できます。

2
Michael Ecklund