WordPress> настройка параметра постоянной ссылки через скрипт глючит? - PullRequest
2 голосов
/ 12 ноября 2009

Панель пользовательских настроек моей темы имеет следующий код ...

` / * инициализировать параметры сайта * /

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

Это проверяет настройку параметра постоянной ссылки и, поскольку WP по умолчанию имеет значение "", которое запускает обработчик site.com/?p=x. Таким образом, если пользователь еще не установил постоянные ссылки по умолчанию, мой скрипт сделает это за них, установив постоянную ссылку для имени публикации. Или, по крайней мере, то, что я думал ...

Однако у меня было несколько человек, которым мой шаблон сказал, что при первой установке они получали 404 ошибки на страницах .

Очевидно, что обходной путь заключается в том, чтобы физически перейти на страницу Постоянные ссылки и просто нажать « Сохранить изменения » (даже если при первом обращении к этой странице постоянная ссылка появляется так, как будто она правильно введена в « настраиваемое "поле.

Кто-нибудь знает, почему это происходит? Возможно, это еще один параметр в БД, который определяет постоянную ссылку в дополнение к тому, что происходит при вызове update_options (), как в приведенном выше коде?

Ответы [ 2 ]

1 голос
/ 03 декабря 2009

Что ж, вероятно, это происходит потому, что вы обновляете значение в таблице базы данных (permalink_structure), в то время как .htaccess остается прежним, и поэтому mod_rewrite не загружается, и пользователи получают 404 ошибки на страницах.

Я полагаю, что WordPress также добавляет правила перезаписи в .htaccess, чтобы включить постоянные ссылки, когда вы нажимаете «Сохранить изменения» в панели администратора. Позвольте мне выкопать это и выяснить, что именно делает WP.


EDIT.

Хорошо, вот код, который делает то, что вы пытаетесь выполнить:

<?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();
}
0 голосов
/ 14 ноября 2009

wp_rewrite не оказывает никакого влияния. Пользователям по-прежнему приходится вручную нажимать «Сохранить параметры» на экране постоянных ссылок.

Полагаю, я запусту firebug на этой странице во время обновления, чтобы увидеть, что устанавливается, когда update_options явно отсутствует.

Это может показаться ошибкой в ​​update_options, когда обновляемым параметром является permalink_structure.

Кто-нибудь не согласен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...