我的主题的自定义选项面板包含以下代码...
` / *初始化网站选项* /
if(get_option('permalink_structure')==“”){update_option('permalink_structure','/%postname%/');} `
这将检查永久链接选项设置,因为WP默认为“”,它会触发site.com/?p=x处理程序。这样,如果用户尚未设置默认的永久链接,我的脚本会通过将永久链接设置为发布名称来为它们设置永久链接。或者至少是我的想法...
但是,我有一些人让我的模板告诉我,首次安装时,他们在页面上收到404错误。
显然,解决方法是物理导航到固定链接页面,然后点击“保存更改”(即使您第一次点击此页面时,固定链接会出现,就好像它已正确输入到“定制”领域。
任何人都知道为什么会这样吗?除了在上面的代码中调用update_options()时会发生什么情况,它们可能是数据库中另一个确定永久链接的设置吗?
答案 0 :(得分: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();
}
答案 1 :(得分:0)
wp_rewrite似乎没有任何效果。用户仍然必须手动点击永久链接屏幕上的“保存选项”。
我想我会在更新期间在该页面上运行firebug,以查看update_options显然缺少的设置。
当更新的选项是permalink_structure时,这似乎是update_options中的错误。
有人不同意吗?