web-dev-qa-db-ja.com

WordPressのカスタム投稿タイプはテーマの再インストールに関するパーマリンクを壊す

これはかなり奇妙な問題です。私は私のテーマのfunctions.phpファイルにWordPressのカスタム投稿タイプを次のフォーマットで作成しています。

add_action('init', 'product_register');

function product_register() {
$args = array(
    'label' => __('Products'),
    'singular_label' => __('Product'),
    'public' => true,
    'show_ui' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'rewrite' => true,
    'supports' => array('title', 'editor', 'thumbnail')
);

register_post_type( 'product' , $args );
}

これにより、私の製品のURL構造は次のようになります。 http://www.mywebsite.com/products/product-name

しかし、別のテーマ(TwentyTen)に切り替えてからWordPressを元に戻すと、パーマリンクは忘れられます。上のURLを閲覧すると、404ページが表示されます。

私が気づいた本当に奇妙なことは、私が管理者で設定 - >パーマリンクを参照することでこの問題を解決できることです。これは次のテーマのアンインストール/再インストールまで問題を一時的に修正します。

他の誰かが同様の問題を抱えていますか?

1
jnthnclrk

新しいパーマリンク構造は、 WP_Rewrite::flush_rules() が呼び出されたときにのみ保存されます。これは面倒な操作(新しいルールの計算とデータベースへの保存)であるため、すべてのinit呼び出しでそれを実行するのではなく、構造を変更した場合にのみ実行してください。ただし、カスタム投稿タイプは、データベースではなくメモリ内のPHP配列に保存されるため、すべてのinit呼び出しで登録する必要があります(テーマを切り替えたときにカスタム投稿タイプを忘れたのはこのためです)。構造体はまだ存在していましたが、ロードされていないカスタム投稿タイプを参照していたため、エラーが発生しました。

3
Jan Fabry