パーマリンクの設定を変更(あるいは、カスタム投稿をfunctions.phpに書いて追加)した場合には、flush_rewrite_rules 関数を実行させてリライトルールを更新させる必要があります。
ただし、flush_rewrite_rules 関数は、負荷の高い処理であるため、必要がある時のみ実行させることが推奨されています。
flush_rewrite_rules
トピック投稿者
uple
(@uple)
jim912さま
お返事ありがとうございます!
負荷が大きいとのことで、テーマが適用された時だけ
動くようにして試してみました。
function theme_activate() {
global $pagenow;
if(is_admin() && $pagenow == 'themes.php' && isset($_GET['activated']))
do_action('theme_activate');
}
add_action('init', 'theme_activate');
function theme_activated() {
update_option('permalink_structure', '/%postname%/');
flush_rewrite_rules();
}
add_action('theme_activate', 'theme_activated');
これで、パーマリンクの記述自体は変更されますが、
ページにアクセスると、やはり404エラーになってしまいます。
テーマ変更前に設定 ->パーマリンク設定で
「デフォルト」以外のパーマリンクを設定するか、
テーマ変更後に設定 ->パーマリンク設定で
「変更を保存」をクリックしないと、
パーマリンクが正常に反映されないようです。
できれば、パーマリンクが「デフォルト」の状態でも
テーマを適用するだけで、パーマリンクを変更したいのですが、
難しいのでしょうか?
2点修正点があります。
1.update_option ですと、$wp_rewrite(リライト関連を司るWP_Rewriteのインスタンス)の内部プロパティが変更されず、インスタンス内では、パーマリンクが設定されていないものと判断されてしまいます。これを解消するには、
$wp_rewrite->set_permalink_structure( '/%postname%/' );
として、$wp_rewrite の中身も変更する必要があります。
2.initフックですと、.htaccess 生成に必要な関数が読み込まれていません。admin_init などが適当だと思われます。
トピック投稿者
uple
(@uple)
jim912さま
お返事ありがとうございます!
おかげさまで無事解決致しました。
適切なアドバイスありがとうございます。
また、貴重なお時間を頂き、本当にありがとうございました!