サポート » 使い方全般 » パーマリンクをfunctions.phpから変更する方法

  • 解決済 uple

    (@uple)


    お世話になっております。

    以下のコードをfunctions.phpに記載し、
    パーマリンクを変更しましたが、
    404エラーになってしまいます。

    update_option('permalink_structure', '/%postname%/');

    調査をしたところ、設定 ->パーマリンク設定に
    アクセスすると、正常に切り替わりました。

    パーマリンクの設定が、デフォルトだと
    .htaccessにリライトルールが記載されないための
    現象だと思うのですが、functions.phpだけで、
    パーマリンクを変更す方法はあるのでしょうか?

    お手数をお掛けしますが、
    ご教示をよろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    パーマリンクの設定を変更(あるいは、カスタム投稿を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エラーになってしまいます。

    テーマ変更前に設定 ->パーマリンク設定で
    「デフォルト」以外のパーマリンクを設定するか、
    テーマ変更後に設定 ->パーマリンク設定で
    「変更を保存」をクリックしないと、
    パーマリンクが正常に反映されないようです。

    できれば、パーマリンクが「デフォルト」の状態でも
    テーマを適用するだけで、パーマリンクを変更したいのですが、
    難しいのでしょうか?

    モデレーター jim912

    (@jim912)

    2点修正点があります。

    1.update_option ですと、$wp_rewrite(リライト関連を司るWP_Rewriteのインスタンス)の内部プロパティが変更されず、インスタンス内では、パーマリンクが設定されていないものと判断されてしまいます。これを解消するには、

    $wp_rewrite->set_permalink_structure( '/%postname%/' );

    として、$wp_rewrite の中身も変更する必要があります。

    2.initフックですと、.htaccess 生成に必要な関数が読み込まれていません。admin_init などが適当だと思われます。

    トピック投稿者 uple

    (@uple)

    jim912さま

    お返事ありがとうございます!
    おかげさまで無事解決致しました。

    適切なアドバイスありがとうございます。
    また、貴重なお時間を頂き、本当にありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「パーマリンクをfunctions.phpから変更する方法」には新たに返信することはできません。