2

私のテーマのカスタムオプションパネルには次のコードがあります...

` /* サイト オプションを初期化します */

if(get_option('permalink_structure')==""){update_option('permalink_structure', '/%postname%/');} `

これによりパーマリンク オプションの設定がチェックされ、WP のデフォルトは "" であるため、site.com/?p=x ハンドラーがトリガーされます。このように、ユーザーがまだデフォルトからパーマリンクを設定していない場合、私のスクリプトは投稿名にパーマリンクを設定することで、パーマリンクを設定します。または、少なくとも私が思っていたこと...

ただし、テンプレートを持っている何人かの人から、最初のインストール時にページで 404 エラーが発生したと言われました。

どうやら、回避策は物理的にパーマリンク ページに移動し、[変更を保存] をクリックすることです (ただし、最初にこのページにアクセスしたときは、パーマリンクが「カスタム」フィールドに正しく入力されているかのように表示されます)。

Anyone know why this happens? Is their perhaps another setting in the db that determines the permalink in addition to what happens when update_options() is called as in the above code?

4

2 に答える 2

1

これはおそらく、データベーステーブル(permalink_structure)の値を更新しているのに、.htaccessは同じままであるために発生します。そのため、mod_rewriteが読み込まれず、ユーザーはページで404エラーを受け取ります。

管理パネルで[変更を保存]をクリックしたときにパーマリンクを有効にするために、WordPressは.htaccessに書き換えルールも追加していると思います。それを掘り下げて、WPが正確に何をしているのかを調べてみましょう。


編集。

さて、これがあなたが達成しようとしていることをしているコードです:

<?php

if (get_option('permalink_structure') == "")
{
    // Including files responsible for .htaccess update
    require_once(ABSPATH . 'wp-admin/includes/misc.php');
    require_once(ABSPATH . 'wp-admin/includes/file.php');

    // Prepare WordPress Rewrite object in case it hasn't been initialized yet
    if (empty($wp_rewrite) || !($wp_rewrite instanceof WP_Rewrite))
    {
        $wp_rewrite = new WP_Rewrite();
    }

    // Update permalink structure
    $permalink_structure = '/%postname%/';
    $wp_rewrite->set_permalink_structure($permalink_structure);

    // Recreate rewrite rules
    $wp_rewrite->flush_rules();
}
于 2009-12-03T19:57:41.737 に答える
0

wp_rewrite は何の効果もないようです。ユーザーは、パーマリンク画面で [オプションを保存] を手動でクリックする必要があります。

更新中にそのページでfirebugを実行して、 update_options が明らかに欠落している設定を確認すると思います。

更新されるオプションが permalink_structure の場合、これは update_options のバグのようです。

同意しない人はいますか?

于 2009-11-14T14:52:27.833 に答える