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


10

プラグインなしで.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';
}

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

上記のコードに似.htmlた、カスタム投稿タイプのURL を変更または追加する必要があるコードはありますか?


5
.htmlを追加する理由は何ですか?
Vince Pettit、2007

まあ、function post-type_permalinkエラーをスローします。このエラーが発生しない場合は、デバッグ設定に問題が発生しています。また、行の正しい意図で質問を書き直してください。ありがとう。
カイザー

@kaiser、カスタム投稿タイプに同じパーマリンク設定を使用する方法を知っているだけです。/$postname.html投稿に設定した場合、カスタム投稿タイプに同じように使用できますか?
user983248

私がコメントで書いた一行も読んでなかったでしょ?コードを修正してください。また-、関数名では機能しません...
kaiser '25 / 07/25

はい@kaiser私でしたが、私はフラッシュはないよ、と私は私が考えるようなタイプか、話すことができないので、私は、手の問題を抱えている
user983248

回答:


8

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

のような書き換えルールを作成します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.php管理ページにアクセスすることで可能Dashboard -> Settings -> Permalinksです。


6
Oi Vinicius氏は、コピー/パスタの競合を回避するために、すべての関数名の前にwpse_59024_ (質問ID)を付けることをお勧めします;)。。。そして、そのコードが私たちのスニペットライブラリに属しているAnswerを知るという追加の利点があります。。。。。+1スポットオン!
ブラソフィロ

このコードは、フィルターを使用する他のすべてのフィルターを上書きしpost_type_linkます
Tom J Nowell

4

たとえば、カスタムの投稿タイプ「製品」など、組み込みのパーマリンクに取って代わる書き換えルールを追加できます...

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

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

注意事項

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

2

WordPressプラグインで作業を処理したい場合は、WordPressプラグインリポジトリのカスタム投稿タイプのパーマリンクを確認してください 。WordPress 3.4.1でテストされ、完全に動作します。

プラグインを有効にした後、ダッシュボード->設定->パーマリンクに移動します。登録済みのカスタム投稿タイプごとに特定の書き換えを追加できます。


3
ページが読み込まれるたびに書き換えルールをフラッシュしないでください。
fuxia

そのコードは、あなただけのコードをコピーして貼り付ける場合も、働いていないxplus3.net/2010/05/20/wp3-custom-post-type-permalinksそれは予想通り-1テストを行わないために働くことを確認してください
user983248を

@toschoどのようにそれを行うか、それを止めると思いますか?
user983248 '19

1
flush_rules()非常に遅いため、非アクティブ化時にのみ呼び出す必要があります。$GLOBALS['wp_rewrite']->rulesルールが既知であるかどうかを確認できます。
fuxia

@Michael Ecklundそれは私が働かない404を与えます。そのコードをテストしましたか?
user983248 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.